Name: series-workflowjzs2b Phase: Succeeded StartedAt: 2026-07-30 20:00:43 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[0] Phase: Succeeded StartedAt: 2026-07-30 20:00:43 +0000 UTC FinishedAt: 2026-07-30 20:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 20:00:43 +0000 UTC FinishedAt: 2026-07-30 20:21:58 +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": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "af4d9143-48fa-4564-9108-cf54fa3d446e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_start_estimator", "ip_vs_stop_estimator", "ip_vs_est_reload_start", "ip_vs_est_kthread_start", "ip_vs_est_kthread_stop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBWUyBlc3RpbWF0b3Iga3RocmVhZCBtYW5hZ2VtZW50IGJ5IGFkZGluZyByZWZlcmVuY2UgY291bnRpbmcgKGdldF90YXNrX3N0cnVjdCBhbmQga3RocmVhZF9zdG9wX3B1dCkgYW5kIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gdGhlIGt0aHJlYWQgZnVuY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUFZTIG5ldGxpbmsgYW5kIHN5c2N0bCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZXN0aW1hdG9yIHN0YXJ0L3N0b3AgYW5kIHJlbG9hZCBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NjQwMmY1M2RhZmEzMzFmYzZhNTMzZmNlZGZjOTc2OTFiOTM0ZmZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6MjA6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5pbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcbkBAIC0xOTEsOCAmIzQzOzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHR9XG4gXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbiYjNDM7XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gXHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4mIzQzO1x0XHRcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLVx1MDAzZWVuYWJsZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHR3aGlsZSAoMSkge1xuQEAgLTI3MCw2ICYjNDM7MjczLDcgQEAgaW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuIFx0XHRrZC1cdTAwM2V0YXNrID0gTlVMTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4mIzQzO1x0Z2V0X3Rhc2tfc3RydWN0KGtkLVx1MDAzZXRhc2spO1xuIFxuIFx0c2V0X3VzZXJfbmljZShrZC1cdTAwM2V0YXNrLCBzeXNjdGxfZXN0X25pY2UoaXB2cykpO1xuIFx0aWYgKHN5c2N0bF9lc3RfcHJlZmVycmVkX2NwdWxpc3QoaXB2cykpXG5AQCAtMjg2LDcgJiM0MzsyOTAsNyBAQCB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3Aoc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiB7XG4gXHRpZiAoa2QtXHUwMDNldGFzaykge1xuIFx0XHRwcl9pbmZvKFwmIzM0O3N0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cJiMzNDssIGtkLVx1MDAzZWlkKTtcbi1cdFx0a3RocmVhZF9zdG9wKGtkLVx1MDAzZXRhc2spO1xuJiM0MztcdFx0a3RocmVhZF9zdG9wX3B1dChrZC1cdTAwM2V0YXNrKTtcbiBcdFx0a2QtXHUwMDNldGFzayA9IE5VTEw7XG4gXHR9XG4gfVxuQEAgLTUyNiw3ICYjNDM7NTMwLDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuIFx0aWYgKGtkKSB7XG4gXHRcdGlmIChrZC1cdTAwM2V0YXNrKSB7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDtzdG9wIHVudXNlZCBlc3RpbWF0b3IgdGhyZWFkICVkLi4uXFxuXCYjMzQ7LCBrZC1cdTAwM2VpZCk7XG4tXHRcdFx0a3RocmVhZF9zdG9wKGtkLVx1MDAzZXRhc2spO1xuJiM0MztcdFx0XHRrdGhyZWFkX3N0b3BfcHV0KGtkLVx1MDAzZXRhc2spO1xuIFx0XHR9XG4gXHRcdGlwX3ZzX3N0YXRzX2ZyZWUoa2QtXHUwMDNlY2FsY19zdGF0cyk7XG4gXHRcdGtmcmVlKGtkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfc3RvcF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2NDAyZjUzZGFmYTMzMWZjNmE1MzNmY2VkZmM5NzY5MWI5MzRmZmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAyMDoyMDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwppbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xOTEsOCAmIzQzOzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKQogCQl9CiAKIAkJLyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovCi0JCWlmIChpcHZzLSZndDtlc3RfY2FsY19waGFzZSkKJiM0MzsJCWlmIChpcHZzLSZndDtlc3RfY2FsY19waGFzZSkgewogCQkJaXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7CiYjNDM7CQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtJmd0O2VuYWJsZSkpCiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJfQogCX0KIAogCXdoaWxlICgxKSB7CkBAIC0yNzAsNiAmIzQzOzI3Myw3IEBAIGludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywKIAkJa2QtJmd0O3Rhc2sgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiYjNDM7CWdldF90YXNrX3N0cnVjdChrZC0mZ3Q7dGFzayk7CiAKIAlzZXRfdXNlcl9uaWNlKGtkLSZndDt0YXNrLCBzeXNjdGxfZXN0X25pY2UoaXB2cykpOwogCWlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKQpAQCAtMjg2LDcgJiM0MzsyOTAsNyBAQCB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3Aoc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCkKIHsKIAlpZiAoa2QtJmd0O3Rhc2spIHsKIAkJcHJfaW5mbygmIzM0O3N0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cbiYjMzQ7LCBrZC0mZ3Q7aWQpOwotCQlrdGhyZWFkX3N0b3Aoa2QtJmd0O3Rhc2spOwomIzQzOwkJa3RocmVhZF9zdG9wX3B1dChrZC0mZ3Q7dGFzayk7CiAJCWtkLSZndDt0YXNrID0gTlVMTDsKIAl9CiB9CkBAIC01MjYsNyAmIzQzOzUzMCw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3koc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCkKIAlpZiAoa2QpIHsKIAkJaWYgKGtkLSZndDt0YXNrKSB7CiAJCQlwcl9pbmZvKCYjMzQ7c3RvcCB1bnVzZWQgZXN0aW1hdG9yIHRocmVhZCAlZC4uLlxuJiMzNDssIGtkLSZndDtpZCk7Ci0JCQlrdGhyZWFkX3N0b3Aoa2QtJmd0O3Rhc2spOwomIzQzOwkJCWt0aHJlYWRfc3RvcF9wdXQoa2QtJmd0O3Rhc2spOwogCQl9CiAJCWlwX3ZzX3N0YXRzX2ZyZWUoa2QtJmd0O2NhbGNfc3RhdHMpOwogCQlrZnJlZShrZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIENvbm5lY3Rpb24gVHJhY2tpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNgLCBhbmQgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIGtlcm5lbCB0aHJlYWQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuICBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHJlZmluaW5nIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlc3RpbWF0aW9uIHRocmVhZHMgKGBrZC0mZ3Q7dGFza2AgcHJlc3VtYWJseSkgd2l0aGluIElQVlMgYXJlIGhhbmRsZWQuCgpUaGUgYWRkaXRpb24gb2YgYGdldF90YXNrX3N0cnVjdChrZC0mZ3Q7dGFzaylgIGluIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgdGhlIGZpcnN0IHNpZ24uIFRoYXQmIzM5O3MgZ29vZCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byBidW1wIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHRhc2sgc3RydWN0dXJlIHdoZW4geW91JiMzOTtyZSB0YWtpbmcgb3duZXJzaGlwIG9mIGEgcG9pbnRlciB0byBpdC4gIFdlIG5lZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGdldCBmcmVlZCBvdXQgZnJvbSB1bmRlciB1cy4gIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIHNlZSBpdCBiZWluZyBleHBsaWNpdGx5IGFkZHJlc3NlZC4KClRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZXMsIGhvd2V2ZXIsIGFyZSB0aGUgdXNlIG9mIGBrdGhyZWFkX3N0b3BfcHV0KGtkLSZndDt0YXNrKWAgaW5zdGVhZCBvZiBqdXN0IGBrdGhyZWFkX3N0b3Aoa2QtJmd0O3Rhc2spYCBpbiBib3RoIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3lgLiAgYGt0aHJlYWRfc3RvcF9wdXRgIGlzIHRoZSBzYWZlciB3YXkgdG8gc3RvcCBhIGtlcm5lbCB0aHJlYWQuIEl0IG5vdCBvbmx5IHNpZ25hbHMgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUgYnV0IGFsc28gcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSBoZWxkIG9uIHRoZSB0YXNrLiBUaGlzIGlzIGEgbXVjaC1uZWVkZWQgaW1wcm92ZW1lbnQ7IG90aGVyd2lzZSwgaXQmIzM5O3MgdmVyeSBlYXN5IHRvIGxlYWsgdGhyZWFkcyBhbmQgbGVhayBtZW1vcnkuCgpGaW5hbGx5LCB0aGUgYWRkZWQgY2hlY2sgZm9yIGBrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpYCB3aXRoaW4gYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgaW5kaWNhdGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgc2h1dGRvd24gY29uZGl0aW9uIGZvciB0aGVzZSB0aHJlYWRzLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBhZGRzIGEgbGV2ZWwgb2YgZ3JhY2VmdWwgc2h1dGRvd24gaWYgdGhlIHN5c3RlbSBpcyBkaXNhYmxpbmcgSVBWUyBvciBpZiBhIHN0b3Agc2lnbmFsIGlzIGdpdmVuLiAgVGhlIGBSRUFEX09OQ0VgIHVzYWdlIGFsc28gaW1wbGllcyB0aGF0IGBpcHZzLSZndDtlbmFibGVgIGlzIGEgc2hhcmVkIHZhcmlhYmxlIGFuZCB3ZSBuZWVkIGF0b21pYyBhY2Nlc3MgdG8gaXQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBnZXR0aW5nIGFuIHVwLXRvLWRhdGUgdmFsdWUuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgZnVsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBzdXNwZWN0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgYWxsIHJlbGF0ZXMgdG8gb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGVwZW5kZW5jaWVzIG9mIElQX1ZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYElQX1ZTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzIG9yIHN1cHBvcnRpbmcgbW9kdWxlcyBmb3IgYElQX1ZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGNhc2NhZGluZyBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBiZWZvcmUgbW92aW5nIG9uLiBXZSBjYW4mIzM5O3QgYWZmb3JkIGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgc28gYSBxdWljayBkZXBlbmRlbmN5IGNoZWNrIGlzIHBhcmFtb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRoYXQgbmVlZHMgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz01PW1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1x0SVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgSVBWU1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXHRJUF9WU19GVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBoZWxwZXJcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVCBcdTAwMjZcdTAwMjYgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cdFx0TkZfQ09OTlRSQUNLX0ZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMzNz1jb25maWdcdElQX1ZTX05GQ1Rcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmdcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzOTpcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1x0SVBfVlNfUEVfU0lQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcGVyc2lzdGVuY2UgZW5naW5lXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ4Olx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgZm9yIElQVlNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1NS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX1ZTYC4gV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb24gb3IgYnVpbGQgcHJvY2Vzcy4gTXkgdGhvdWdodCBwcm9jZXNzIGltbWVkaWF0ZWx5IGp1bXBzIHRvICYjMzQ7aXMgYElQX1ZTYCBmdWxseSByZWxpYW50IG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmA/JiMzNDsgVGhpcyBpcyBhIGtleSBkZXBlbmRlbmN5IGFuYWx5c2lzIHN0ZXAg4oCTIGVuc3VyaW5nIGFsbCBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgaXMgY3JpdGljYWwuIEkmIzM5O20gbWVudGFsbHkgZmlsaW5nIHRoYXQgYXdheSBhcyBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVzZSBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSB0aGUgdHdvIHRoYXQgYXJlIG1lbnRpb25lZCwgYXJlIGFjdHVhbGx5ICplbm91Z2gqLiBBcmUgdGhlcmUgYW55IHN1YnRsZSwgaW1wbGllZCBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGNvbnNpZGVyPwoKVGhlbiwgdGhlIGZvY3VzIHNoaWZ0cyB0byB0aGUgcGF0Y2ggYXQgaGFuZC4gVGhlIGZhY3QgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYGlwX3ZzX2VzdC5jYCBpcyBzaWduaWZpY2FudC4gVGhhdCBwYXJ0aWN1bGFyIGZpbGUgaXMgcGFydCBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZXN0YWJsaXNobWVudCBmb3IgdGhlIElQIFZpcnR1YWwgU2VydmVyLiBOb3csIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhpcyBjb21waWxhdGlvbiBvZiBgaXBfdnNfZXN0LmNgIGNvbmRpdGlvbmFsPyYjMzQ7IE1lYW5pbmcsIGRvZXMgc29tZSBvdGhlciBtYWNybyBvciBjb25maWd1cmF0aW9uIGZsYWcgY29udHJvbCBpZiB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQ/IEEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhdGNoIGlmIGl0JiMzOTtzIG5vdCBhbHdheXMgYXBwbGllZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdvdWxkIGFsbG93IG1lIHRvIGtub3cgaWYgdGhpcyBmaXggaXMgcmVsZXZhbnQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gSSBhbSB3b3JraW5nIG9uLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGlkZW50aWZ5IGFsbCBwb3NzaWJsZSBidWlsZCBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xNj1pcF92cy1vYmpzIDo9XHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cdCAgIFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTctXHRcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cdCAgIFx0XHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE4Olx0XHRpcF92c19lc3QubyBpcF92c19wcm90by5vIGlwX3ZzX3BlLm9cdFx0XHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE5LVx0XHQkKGlwX3ZzX3Byb3RvLW9ianMteSkgJChpcF92cy1leHRyYV9vYmpzLXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0aW9uIFRocmVhZCBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgdGllZCBpbnRvIHRoZSBgaXBfdnMtb2Jqc2AgbW9kdWxlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBmcmFtZXdvcmssIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfSVBfVlNgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IElQVlMgaXMgdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRoZSBlc3RpbWF0aW9uIHRocmVhZC4KCkxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ6IGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAsIGFuZCBgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveWAuIE5vdywgdGhlIGltcG9ydGFudCBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyBuZXcgZXN0aW1hdGlvbiBsb2dpYyBpcyBpbnRyb2R1Y2VkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBJUFZTIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCB0aGUgYnVnIGZpeGVzIGltcGxlbWVudGVkLCBvciBhbnkgb3RoZXIgY2hhbmdlcyBpbiBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQzPXN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0LVx0XHRcdFx0c3RhcnQgPSBrZC1cdTAwM2VuZWVkZWQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mjg1Olx0XHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoaXB2cywga2QpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4Ni1cdFx0XHRcdHJlcGVhdCA9IHRydWU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI1MzppbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjU0LVx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgS3RocmVhZCBTdGFydHVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGt0aHJlYWQgKGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGApIHdpdGhpbiBJUFZTIGdldHMgZmlyZWQgdXAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBzdGFjayBiYWNrIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgZXZlbnQuIEl0IHNlZW1zIGxpa2UgYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCBpcyB0aGUgaW1tZWRpYXRlIHBhcmVudCwgYWNjb3JkaW5nIHRvIHRoZSBzb3VyY2UuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHdoYXQgZXhhY3RseSB0cmlnZ2VycyAqdGhhdCogaGFuZGxlciwgYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCwgd2l0aGluIGBpcF92c19jdGwuY2AuIEtub3dpbmcgdGhlIHRyaWdnZXJpbmcgbWVjaGFuaXNtIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUga3RocmVhZCYjMzk7cyByb2xlIGFuZCBob3cgaXQgYWxsIGZpdHMgaW50byB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZsb3cuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCByZWxvYWQgbG9naWMsIGxpa2VseSByZWxhdGVkIHRvIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciByZXNvdXJjZSBjb25zdHJhaW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB0byB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBsb2FkIGJhbGFuY2luZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXN0X3JlbG9hZF93b3JrX2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yMzA9c3RhdGljIHZvaWQgZGVmZW5zZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjQzOnN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MTc5PWludCBfX25ldF9pbml0IGlwX3ZzX2NvbnRyb2xfbmV0X2luaXQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyMDctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTIwODpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmlwdnMtXHUwMDNlZXN0X3JlbG9hZF93b3JrLCBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTIwOS1cdGlwdnMtXHUwMDNlc3lzY3RsX3N2Y19sZmFjdG9yID0gaXBfdnNfc3ZjX2RlZmF1bHRfbG9hZF9mYWN0b3IoaXB2cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGVsYXllZCBXb3JrIFF1ZXVlKioKClJpZ2h0LCB0aGlzIHdvcmsmIzM5O3MgYmVlbiBoZWxkIHVwIHNvbWV3aGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgcGlucG9pbnQgZXhhY3RseSB3aGVyZSBpbiB0aGUgcXVldWUgYGVzdF9yZWxvYWRfd29ya2AgaXMgc2l0dGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaXRzIGN1cnJlbnQgc3RhdGUgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3Mgc2NoZWR1bGluZyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGl0cyBwb3NpdGlvbiBpcyBjcml0aWNhbCDigJMgaXMgaXQgd2FpdGluZyBvbiBhIHNwZWNpZmljIGRlcGVuZGVuY3ksIGEgcmVzb3VyY2UgbG9jaywgb3Igc2ltcGx5IHJlc291cmNlIGF2YWlsYWJpbGl0eT8gS25vd2luZyB0aGUgcXVldWUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGJvdHRsZW5lY2suIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlbGF5LCBhbmQgdGhlIHF1ZXVlIGxvY2F0aW9uIGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3RfcmVsb2FkX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yMzA9c3RhdGljIHZvaWQgZGVmZW5zZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjQzOnN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NS1cdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDY6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0bnNfaXB2cywgZXN0X3JlbG9hZF93b3JrLndvcmspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0Ny1cdGludCBnZW5pZF9kb25lID0gYXRvbWljX3JlYWQoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfZ2VuaWRfZG9uZSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5Mi1cdGlmIChyZXBlYXQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjkzOlx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmlwdnMtXHUwMDNlZXN0X3JlbG9hZF93b3JrLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5NC1cdFx0XHRcdCAgIGRlbGF5KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NTE3OT1pbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjA3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUyMDg6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZpcHZzLVx1MDAzZWVzdF9yZWxvYWRfd29yaywgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyMDktXHRpcHZzLVx1MDAzZXN5c2N0bF9zdmNfbGZhY3RvciA9IGlwX3ZzX3N2Y19kZWZhdWx0X2xvYWRfZmFjdG9yKGlwdnMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MjY0PXZvaWQgX19uZXRfZXhpdCBpcF92c19jb250cm9sX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjY3LVx0aXBfdnNfY29udHJvbF9uZXRfY2xlYW51cF9zeXNjdGwoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTI2ODpcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZpcHZzLVx1MDAzZWVzdF9yZWxvYWRfd29yayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTI2OS0jaWZkZWYgQ09ORklHX1BST0NfRlNcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjAtICAtIHdoZW4gY29uZmlndXJhdGlvbiAoY3B1bGlzdC9uaWNlKSBpcyBjaGFuZ2VkLCB0aGUgdGFza3MgYXJlIHJlc3RhcnRlZFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjYxOiAgICBieSB3b3JrIChlc3RfcmVsb2FkX3dvcmspXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjItICAtIGt0aHJlYWQgdGFza3MgYXJlIHN0b3BwZWQgd2hpbGUgdGhlIGNwdWxpc3QgaXMgZW1wdHlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MjM4PXZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNDgtXHRcdGF0b21pY19pbmMoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfZ2VuaWQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI0OTpcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2aXB2cy1cdTAwM2Vlc3RfcmVsb2FkX3dvcmssIDApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBGdW5jdGlvbiBDYWxsIEZsb3cqKgoKQWxyaWdodCwgc28gYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIHNvbWUga2luZCBvZiB3b3JrLCBsaWtlbHkgcmVsYXRlZCB0byByZWxvYWRpbmcgZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMgd2l0aGluIHRoZSBJUFZTIHNldHVwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYmFsbCBnZXRzIHJvbGxpbmcuJiMzNDsgTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzICp3aGVyZSogdGhhdCB3b3JrIGlzIGluaXRpYXRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBjYWxsZXJzIHRvIGdyYXNwIHRoZSB0cmlnZ2VycyBmb3IgdGhlc2UgcmVsb2Fkcy4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdGltZXIsIGFuIGV4dGVybmFsIHNpZ25hbCwgYSBjaGFuZ2UgaW4gY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgZHVyaW5nIGEgcmVzdGFydD8gVGhpcyB3aWxsIGdpdmUgbWUgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjYWxsaW5nIGNvbnRleHQsIGluc3BlY3QgYW55IHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkLCBhbmQgc2VlIHdoYXQgdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBhcmUuIEl0IHdpbGwgYmVjb21lIHByZXR0eSBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4NS1cdFx0LyogU3RhcnQgZXN0aW1hdGlvbiBmb3IgZmlyc3QgdGltZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE4ODY6XHRcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4Ny1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ0Mz1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19zZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NzEtXHRpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDcyOlx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDczLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTMzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9uaWNlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NTQtXHRcdFx0XHQqdmFscCA9IHZhbDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTU1Olx0XHRcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTU2LVx0XHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjU2Mz1zdGF0aWMgaW50IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgxLVx0XHRcdCp2YWxwID0gdmFsO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1ODI6XHRcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgzLVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE3ND1zdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjIzODp2b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0zMTE9c3RhdGljIGludCBpcF92c19lc3RfYWRkX2t0aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTM2Mi1cdC8qIFJlcXVlc3Qga3RocmVhZCB0byBiZSBzdGFydGVkICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MzYzOlx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCBmYWxzZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzY0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz00OTc9aW50IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTE3LVx0XHRrZC1cdTAwM2VuZWVkZWQgPSAxO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjUxODpcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTktXHRcdG11dGV4X3VubG9jayhcdTAwMjZpcHZzLVx1MDAzZWVzdF9tdXRleCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTU0MT12b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy02MDctXHRcdFx0a2QtXHUwMDNlbmVlZGVkID0gMDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo2MDg6XHRcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy02MDktXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBmbG93LCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU28sIGBpcF92c19hZGRfc2VydmljZWAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKWAuIFRoYXQgZmlyc3QgY2FsbCBzZWVtcyB0byBzZXQgdXAgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiAgVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIHF1ZXVlcyB3b3JrLCBwcmVzdW1hYmx5IGFzeW5jaHJvbm91c2x5LiBOb3csIHRoaXMgcXVldWVkICYjMzQ7d29yayYjMzQ7IGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBJIHN1c3BlY3QgaXQgaXMgaGFuZGxlZCBieSB0aGUga2VybmVsIHRocmVhZC4gSSBiZXQgdGhhdCBxdWV1ZWQgd29yayBpcyB3aGF0IGtpY2tzdGFydHMgdGhlIHJlYWwgcHJvY2VzcywgYW5kIEkgdGhpbmsgaXQgY2FsbHMgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YC4KClRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwga2VybmVsIHRocmVhZCBpcyBsYXVuY2hlZCB1c2luZyBga3RocmVhZF9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlIHJlYWwgbWFnaWMgd2lsbCBiZSBoYXBwZW5pbmcgdGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBsb29rIGludG8gdGhhdCBmdW5jdGlvbiBwcm9wZXJseS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHR9XG4gMjUxOlx0XG4gMjUyOlx0LyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXG4gMjUzOlx0aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuIDI1NDpcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuIDI1NTpcdHtcbiAyNTY6XHRcdHVuc2lnbmVkIGxvbmcgbm93O1xuIDI1NzpcdFx0aW50IHJldCA9IDA7XG4gMjU4Olx0XHRsb25nIGdhcDtcbiAyNTk6XHRcbiAyNjA6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuIDI2MTpcdFxuIDI2MjpcdFx0aWYgKGtkLVx1MDAzZXRhc2spXG4gMjYzOlx0XHRcdGdvdG8gb3V0O1xuIDI2NDpcdFx0bm93ID0gamlmZmllcztcbiAyNjU6XHRcdGdhcCA9IGtkLVx1MDAzZWVzdF90aW1lciAtIG5vdztcbiAyNjY6XHRcdC8qIFN5bmMgZXN0X3RpbWVyIGlmIHRhc2sgaXMgc3RhcnRpbmcgbGF0ZXIgKi9cbiAyNjc6XHRcdGlmIChhYnMoZ2FwKSBcdTAwM2UgNCAqIElQVlNfRVNUX1RJQ0spXG4gMjY4Olx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdztcbiAyNjk6XHRcdGtkLVx1MDAzZXRhc2sgPSBrdGhyZWFkX2NyZWF0ZShpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQsIGtkLCBcJiMzNDtpcHZzLWU6JWQ6JWRcJiMzNDssXG4gMjcwOlx0XHRcdFx0XHQgIGlwdnMtXHUwMDNlZ2VuLCBrZC1cdTAwM2VpZCk7XG4gMjcxOlx0XHRpZiAoSVNfRVJSKGtkLVx1MDAzZXRhc2spKSB7XG4gMjcyOlx0XHRcdHJldCA9IFBUUl9FUlIoa2QtXHUwMDNldGFzayk7XG4gMjczOlx0XHRcdGtkLVx1MDAzZXRhc2sgPSBOVUxMO1xuIDI3NDpcdFx0XHRnb3RvIG91dDtcbiAyNzU6XHRcdH1cbiAyNzY6XHRcdGdldF90YXNrX3N0cnVjdChrZC1cdTAwM2V0YXNrKTtcbiAyNzc6XHRcbiAyNzg6XHRcdHNldF91c2VyX25pY2Uoa2QtXHUwMDNldGFzaywgc3lzY3RsX2VzdF9uaWNlKGlwdnMpKTtcbiAyNzk6XHRcdGlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKVxuIDI4MDpcdFx0XHRrdGhyZWFkX2FmZmluZV9wcmVmZXJyZWQoa2QtXHUwMDNldGFzaywgc3lzY3RsX2VzdF9wcmVmZXJyZWRfY3B1bGlzdChpcHZzKSk7XG4gMjgxOlx0XG4gMjgyOlx0XHRwcl9pbmZvKFwmIzM0O3N0YXJ0aW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cJiMzNDssIGtkLVx1MDAzZWlkKTtcbiAyODM6XHRcdHdha2VfdXBfcHJvY2VzcyhrZC1cdTAwM2V0YXNrKTtcbiAyODQ6XHRcbiAyODU6XHRvdXQ6XG4gMjg2Olx0XHRyZXR1cm4gcmV0O1xuIDI4NzpcdH1cbiAyODg6XHRcbiAyODk6XHR2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3Aoc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiAyOTA6XHR7XG4gMjkxOlx0XHRpZiAoa2QtXHUwMDNldGFzaykge1xuIDI5MjpcdFx0XHRwcl9pbmZvKFwmIzM0O3N0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cJiMzNDssIGtkLVx1MDAzZWlkKTtcbiAyOTM6XHRcdFx0a3RocmVhZF9zdG9wX3B1dChrZC1cdTAwM2V0YXNrKTtcbiAyOTQ6XHRcdFx0a2QtXHUwMDNldGFzayA9IE5VTEw7XG4gMjk1Olx0XHR9XG4gMjk2Olx0fVxuIDI5NzpcdFxuIDI5ODpcdC8qIEFwcGx5IHBhcmFtZXRlcnMgdG8ga3RocmVhZCAqL1xuIDI5OTpcdHN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9zZXRfcGFyYW1zKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIFRocmVhZCBTYWZldHkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIGNvbmN1cnJlbmN5IHByb2JsZW0gY29ubmVjdGVkIHRvIGBrdGhyZWFkX3N0b3BgLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIGluY29ycG9yYXRlIGBnZXRfdGFza19zdHJ1Y3RgIGFuZCBga3RocmVhZF9zdG9wX3B1dGAgY2FsbHMsIHdoaWNoIGlzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgdGFzayBzdHJ1Y3Qgd2l0aGluIGEga2VybmVsIHRocmVhZCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCBwcmV2ZW50aW5nIGFjY2VzcyBhZnRlciBkZWFsbG9jYXRpb24uCgpOb3csIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBhZGRpdGlvbiB3aXRoaW4gYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7dmUgd2lzZWx5IGFkZGVkIGEgY2hlY2sgdGhhdCBpbmNsdWRlcyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbi4gSXQmIzM5O3MgZXhpdGluZyB0aGUgdGhyZWFkIGlmIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIGlzIHRydWUgKHdoaWNoIGlzIHRoZSBzaWduYWwgdG8gdGVybWluYXRlKSBvciwgY3J1Y2lhbGx5LCBpZiBgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpYCBpcyB0cnVlLiBUaGF0IGxhc3QgY29uZGl0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGhyZWFkIHNob3VsZCBhbHNvIGV4aXQgaWYgdGhlIGBpcHZzLSZndDtlbmFibGVgIGZsYWcgaXMgc2V0IHRvIGZhbHNlLiBVc2luZyBgUkVBRF9PTkNFYCBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlIGVuYWJsaW5nIHZhcmlhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgY29uY3VycmVudGx5IGFuZCBjb3VsZCBiZSBjYWNoZWQgYnkgdGhlIHRocmVhZCBsb2NhbGx5LCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSByYWNlIGNvbmRpdGlvbiBpZiBub3QgYWRkcmVzc2VkIGNvcnJlY3RseS4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHRoZSB0aHJlYWQgY29udGludWluZyB0byBydW4gd2hlbiBpdCBzaG91bGRuJiMzOTt0LiBNYWtlcyBwZXJmZWN0IHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBhcmVhIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRvdXQ6XG4gMTcxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxNzI6XHR9XG4gMTczOlx0XG4gMTc0Olx0c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcbiAxNzU6XHR7XG4gMTc2Olx0XHRzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkID0gZGF0YTtcbiAxNzc6XHRcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0ga2QtXHUwMDNlaXB2cztcbiAxNzg6XHRcdGludCByb3cgPSBrZC1cdTAwM2Vlc3Rfcm93O1xuIDE3OTpcdFx0dW5zaWduZWQgbG9uZyBub3c7XG4gMTgwOlx0XHRpbnQgaWQgPSBrZC1cdTAwM2VpZDtcbiAxODE6XHRcdGxvbmcgZ2FwO1xuIDE4MjpcdFxuIDE4MzpcdFx0aWYgKGlkIFx1MDAzZSAwKSB7XG4gMTg0Olx0XHRcdGlmICghaXB2cy1cdTAwM2Vlc3RfY2hhaW5fbWF4KVxuIDE4NTpcdFx0XHRcdHJldHVybiAwO1xuIDE4NjpcdFx0fSBlbHNlIHtcbiAxODc6XHRcdFx0aWYgKCFpcHZzLVx1MDAzZWVzdF9jaGFpbl9tYXgpIHtcbiAxODg6XHRcdFx0XHRpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcbiAxODk6XHRcdFx0XHQvKiBjb21taXQgZXN0X2NhbGNfcGhhc2UgYmVmb3JlIHJlYWRpbmcgZXN0X2dlbmlkICovXG4gMTkwOlx0XHRcdFx0c21wX21iKCk7XG4gMTkxOlx0XHRcdH1cbiAxOTI6XHRcbiAxOTM6XHRcdFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXG4gMTk0Olx0XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gMTk1Olx0XHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4gMTk2Olx0XHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKSlcbiAxOTc6XHRcdFx0XHRcdHJldHVybiAwO1xuIDE5ODpcdFx0XHR9XG4gMTk5Olx0XHR9XG4gMjAwOlx0XG4gMjAxOlx0XHR3aGlsZSAoMSkge1xuIDIwMjpcdFx0XHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaGxpc3RfZW1wdHkoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfdGVtcF9saXN0KSlcbiAyMDM6XHRcdFx0XHRpcF92c19lc3RfZHJhaW5fdGVtcF9saXN0KGlwdnMpO1xuIDIwNDpcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lETEUpO1xuIDIwNTpcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKVxuIDIwNjpcdFx0XHRcdGJyZWFrO1xuIDIwNzpcdFxuIDIwODpcdFx0XHQvKiBiZWZvcmUgZXN0aW1hdGlvbiwgY2hlY2sgaWYgd2Ugc2hvdWxkIHNsZWVwICovXG4gMjA5Olx0XHRcdG5vdyA9IGppZmZpZXM7XG4gMjEwOlx0XHRcdGdhcCA9IGtkLVx1MDAzZWVzdF90aW1lciAtIG5vdztcbiAyMTE6XHRcdFx0aWYgKGdhcCBcdTAwM2UgMCkge1xuIDIxMjpcdFx0XHRcdGlmIChnYXAgXHUwMDNlIElQVlNfRVNUX1RJQ0spIHtcbiAyMTM6XHRcdFx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdyAtIElQVlNfRVNUX1RJQ0s7XG4gMjE0Olx0XHRcdFx0XHRnYXAgPSBJUFZTX0VTVF9USUNLO1xuIDIxNTpcdFx0XHRcdH1cbiAyMTY6XHRcdFx0XHRzY2hlZHVsZV90aW1lb3V0KGdhcCk7XG4gMjE3Olx0XHRcdH0gZWxzZSB7XG4gMjE4Olx0XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIDIxOTpcdFx0XHRcdGlmIChnYXAgXHUwMDNjIC04ICogSVBWU19FU1RfVElDSylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSVBWUyBFc3RpbWF0b3IgS3RocmVhZCBGdW5jdGlvbmFsIEZpeCAtIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBzb21ldGhpbmcgaGVyZSB0aGF0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGZpeCBmb3IgdGhvc2UgSVBWUyBlc3RpbWF0b3Iga3RocmVhZHMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoZXNlIHRoaW5ncyBhcmUgdXN1YWxseSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IGt0aHJlYWRzIHByZXNlbnQgc29tZSB1bmlxdWUgY2hhbGxlbmdlcyBpbiBob3cgd2UgYXBwcm9hY2ggdGhpcywgc28gbGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4KClRoZSBtYWluIGt0aHJlYWQgaXRzZWxmLCBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCwgaXNuJiMzOTt0IGRpcmVjdGx5IGNhbGxhYmxlIHRocm91Z2ggc3lzY2FsbHMsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5kaXJlY3QgY2FsbHMuIFRoZXJlZm9yZSBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0JiMzOTtzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgYW5kIHRob3NlIGZ1bmN0aW9ucywgbmFtZWx5OiBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAsIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgd2hpY2ggd2lsbCBoYXZlIHRvIGJlIG15IGVudHJ5IHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYWxsIHRob3NlIHJlbGF0ZWQgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIGZ1bmN0aW9ucy4KCkkgc2hvdWxkIGFsc28gZXhhbWluZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IHRyaWdnZXIgdGhlIGt0aHJlYWQmIzM5O3MgZXhlY3V0aW9uLiBgaXBfdnNfYWRkX3NlcnZpY2VgLCBhbmQgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBtZS4gSSBjYW4gaW52ZXN0aWdhdGUgdGhlbSB0byBzZWUgaWYgdGhleSYjMzk7cmUgZ29vZCBmb2N1cyBzeW1ib2xzLiBGdW5jdGlvbnMgbGlrZSBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgIGFyZSBhbHNvIGNydWNpYWwgc2luY2UgdGhleSBoYW5kbGUgY2xlYW51cCBzY2VuYXJpb3MuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgY2FyZWZ1bCBhbmFseXNpcywgYnV0IHRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBpZWNlcyB0byBzdGFydCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDAyPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0MzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQzNTpcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdmMtXHUwMDNlaXB2cywgXHUwMDI2ZGVzdC1cdTAwM2VzdGF0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE0NzE9aXBfdnNfYWRkX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTUyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNTIzOlx0XHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVx1MDAzZWlwdnMsIFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1MjQtXHRcdC8qIE9uIGVycm9yIHB1dCBiYWNrIGRlc3QgaW50byB0aGUgdHJhc2ggKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTcwOT1pcF92c19hZGRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODMzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE4MzQ6XHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3IoaXB2cywgXHUwMDI2c3ZjLVx1MDAzZXN0YXRzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODM1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDk5NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBfdnNfY29udHJvbF9uZXRfaW5pdF9zeXNjdGwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxMjMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTEyNDpcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihpcHZzLCBcdTAwMjZpcHZzLVx1MDAzZXRvdF9zdGF0cy1cdTAwM2VzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MTI1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDA0PXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5Ni0vKiBTdGFydCBlc3RpbWF0aW9uIGZvciBzdGF0cyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NzppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0b3IgTGlmZWN5Y2xlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgSVBWUyBlc3RpbWF0b3IgZnVuY3Rpb25zLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gd2F0Y2gg4oCTIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIG5ldyBkZXN0aW5hdGlvbnMgb3Igc2VydmljZXMgYXJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0uIENvbnZlcnNlbHksIGBpcF92c19zdG9wX2VzdGltYXRvcmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFuZCBpcyBjYWxsZWQgd2hlbiB0aGV5JiMzOTtyZSBkZWxldGVkLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXBfdnNfYWRkX3NlcnZpY2VgLCBhbmQgYGlwX3ZzX2FkZF9kZXN0YCBhcmUgbGlrZWx5IHRoZSBtb3N0IHBlcnRpbmVudCBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgY29udHJvbCBmbG93IGhlcmUuCgpJIGFsc28gc2VlIHRoYXQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGlzIHRyaWdnZXJlZCBieSBzeXNjdGwgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgd29ydGggY29uc2lkZXJpbmcgc2luY2UgaXQgcHJvYmFibHkgaW5kaWNhdGVzIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UuIEdpdmVuIHRoYXQgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHN5c2N0bHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBlc3RpbWF0b3IsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb24gdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIHN5c2N0bCB2YXJpYWJsZXMgbm93IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBlc3RpbWF0b3IgaXMgaW5mbHVlbmNlZCBieSB0aGUgdXNlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2c19wcm9jX2VzdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDIwPXByb2NfZG9fc3luY19wb3J0cyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI0NDM6c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X2NwdW1hc2tfc2V0KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NDQtXHRcdFx0XHQgICAgIHZvaWQgKmJ1ZmZlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ4MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDgyOnN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX2dldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDgzLVx0XHRcdFx0ICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MDY6c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X2NwdWxpc3QoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA3LVx0XHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MTctXHRcdC8qIHByb2Nfc3lzX2NhbGxfaGFuZGxlcigpIGFwcGVuZHMgdGVybWluYXRvciAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MTg6XHRcdHJldCA9IGlwdnNfcHJvY19lc3RfY3B1bWFza19zZXQodGFibGUsIGJ1ZmZlcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUxOS1cdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MjItXHRcdC8qIHByb2Nfc3lzX2NhbGxfaGFuZGxlcigpIGFsbG9jYXRlcyAxIGJ5dGUgZm9yIHRlcm1pbmF0b3IgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTIzOlx0XHRyZXQgPSBpcHZzX3Byb2NfZXN0X2NwdW1hc2tfZ2V0KHRhYmxlLCBidWZmZXIsICpsZW5wICYjNDM7IDEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MjQtXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MzItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUzMzpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfbmljZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MzQtXHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjY1NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c192YXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODM1Olx0XHQucHJvY19oYW5kbGVyXHQ9IGlwdnNfcHJvY19lc3RfY3B1bGlzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVx0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0MC1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4NDE6XHRcdC5wcm9jX2hhbmRsZXJcdD0gaXB2c19wcm9jX2VzdF9uaWNlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NDItXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSVBWUyBFc3RpbWF0b3IgTW9kdWxlIC0gS2V5IEZ1bmN0aW9uYWxpdHkgYW5kIEVudHJ5IFBvaW50cyoqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIElQVlMgZXN0aW1hdG9yIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpcHZzX3Byb2NfZXN0X2NwdWxpc3RgIGFuZCBgaXB2c19wcm9jX2VzdF9uaWNlYCBsb29rIGxpa2Ugc29saWQgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbSByZWdhcmRpbmcgdGhlIGVzdGltYXRvci4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4KCk5vdywgbGV0JiMzOTtzIGNvbnNvbGlkYXRlIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZXN0aW1hdG9yIGZ1bmN0aW9uYWxpdHkuIFdlIG5lZWQgdG8gY3JlYXRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZXN0aW1hdG9yJiMzOTtzIG9wZXJhdGlvbnM6CgoqICAgSSBuZWVkIHRvIGxvb2sgYXQgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGFzIHRoZXkgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBwb2ludHMuIFRoZXNlIGFyZSB0aGUgaG9va3MgZm9yIHRoZSBvdmVyYWxsIGVzdGltYXRvciBsaWZlY3ljbGUuCiogICBJIGFsc28gc2hvdWxkIGluY2x1ZGUgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGluIHRoZSBmb2N1cyBncm91cC4gVGhpcyBpcyBsaWtlbHkgaG93IG5ldyBjb25maWd1cmF0aW9ucyBhcmUgaW50ZWdyYXRlZC4KKiAgIE9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50cyBmcm9tIGJlZm9yZSwgYGlwdnNfcHJvY19lc3RfY3B1bGlzdGAgYW5kIGBpcHZzX3Byb2NfZXN0X25pY2VgLCBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBDUFUgbGlzdCBhbmQgbmljZSB2YWx1ZXMgYXJlIG1hbmFnZWQgb3IgY29uZmlndXJlZC4KKiAgIEZpbmFsbHksIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgYGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbmAuIElmIGl0JiMzOTtzIHRoZXJlLCB0aGVuIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGV4cGxvcmluZyBob3cgdGhlIGFjdHVhbCBlc3RpbWF0aW9uIHByb2Nlc3MgaXMgaW5pdGlhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHZzX3Byb2NfcnVuX2VzdGltYXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTMzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9uaWNlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NjItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU2MzpzdGF0aWMgaW50IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NjQtXHRcdFx0XHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjY1NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c192YXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MjgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODI5Olx0XHQucHJvY19oYW5kbGVyXHQ9IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODMwLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIEVzdGltYXRvciBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIElQVlMgZXN0aW1hdG9yIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGUgaXMgdGhhdCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYCBpcyBpbmRlZWQgcHJlc2VudCwgYXMgZXhwZWN0ZWQuIE5vdywgd2hhdCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/IExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgb25lIGFwcGVhcnMgdG8gYmUgYElQX1ZTYC4gQXJlIHRoZXJlIGFueSB1bmRlcmx5aW5nIGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTYD8gWWVzLCBpdCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYC4gQW5kIGBJUF9WU2AgaXRzZWxmIGlzIHRyaXN0YXRlLCBzbyB0aGF0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZGVlcCBkaXZlIGludG8gdGhlIHBhdGNoIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm90aGluZyBlbHNlIGlzIGluIHBsYXkuIFRoZSBwYXRjaCB0YXJnZXRzIGBpcF92c19lc3QuY2AsIG1vZGlmeWluZyBrZXkgZnVuY3Rpb25zOiBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgLCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3lgLgoKYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgZnJvbSBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgIGFuZCBgaXBfdnNfZXN0X2FkZF9rdGhyZWFkYC4gRnVydGhlcm1vcmUsIGBpcF92c19lc3RfYWRkX2t0aHJlYWRgIGlzIGludm9rZWQgZnJvbSBgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3JgLCB3aGljaCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgZXN0aW1hdG9ycyBhcmUgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBpcyBjYWxsZWQgd2hlbiBjZXJ0YWluIHN5c2N0bHMgYXJlIG1vZGlmaWVkLiBUaGUgcmVsZXZhbnQgc3lzY3RscyBhcmUgYGVzdF9jcHVsaXN0YCwgYGVzdF9uaWNlYCwgYW5kIGBydW5fZXN0aW1hdGlvbmAuCgpUaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiBhcmU6IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXB2c19wcm9jX2VzdF9jcHVsaXN0YCwgYGlwdnNfcHJvY19lc3RfbmljZWAsIGFuZCwgb2YgY291cnNlLCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGlzIHN0YXRpYyBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz00MDQ9c3RhdGljIGludCBpcF92c19lbnF1ZXVlX2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk2LS8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIHN0YXRzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NDk3OmludCBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkV2b2x2aW5nIENvbmNlcHRzIGluIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbm90IHNlZWluZyB0aGlzIGFzIGEgc3RhdGljIHByb2JsZW0uIEl0JiMzOTtzIGR5bmFtaWMsIGNvbnN0YW50bHkgY2hhbmdpbmcuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgbXkgY3VycmVudCB0aGlua2luZy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgdGhlIHN5c3RlbSYjMzk7cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgdmFyeSwgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgdmFyaWFiaWxpdHkgaW4gbWluZC4KCkFuZCBub3cgSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmcgYWJvdXQgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpcyBsaWtlbHkgY3J1Y2lhbCBoZXJlLCBhbmQgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgaXQgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvdXRwdXRzLCBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3MgcmVzcG9uc2UgdG8gY2hhbmdlcy4gVGhhdCBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzIGEgbHluY2hwaW4uIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NTI4PXN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3koc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQwLS8qIFVubGluayBlc3RpbWF0b3IgZnJvbSBjaGFpbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjU0MTp2b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTU0Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmUsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgTmV0d29yayBMb2FkIEJhbGFuY2luZyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBjb25jZXB0IGlzbiYjMzk7dCBmaXhlZCwgaXQmIzM5O3MgY29uc3RhbnRseSBzaGlmdGluZy4gVGhpcyBwYXJ0aWN1bGFyIGlzc3VlIGRlbWFuZHMgYSBkeW5hbWljIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgaXQuIE5vdywgYXMgSSBkaXZlIGRlZXBlciwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGNvbXBvbmVudCB3aXRoaW4gdGhlIExpbnV4IFZpcnR1YWwgU2VydmVyIChMVlMpIHJlYWxtLiBUaGUgcXVlc3Rpb24gdGhhdCBoYXMgc3BydW5nIHRvIG1pbmQgaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgd2hlbiBjb25zaWRlcmluZyBgaXB2c19wcm9jX2VzdF9jcHVsaXN0YD8gV2hhdCBkb2VzIHRoYXQgaW1wbHkgaW4gdGhpcyBjb250ZXh0PyBMZXQmIzM5O3MgY29uc2lkZXIgdGhlIHBvc3NpYmxlIGF2ZW51ZXMgb2YgaW52ZXN0aWdhdGlvbiBpbiB0aGF0IHJlZ2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2c19wcm9jX2VzdF9jcHVsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ4Mj1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19nZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUwNjpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bGlzdChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MDctXHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjY1NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c192YXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODM1Olx0XHQucHJvY19oYW5kbGVyXHQ9IGlwdnNfcHJvY19lc3RfY3B1bGlzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IFVuZGVyc3RhbmRpbmcgdGhlIEVzdGltYXRvciYjMzk7cyBPcmlnaW5zKioKClJpZ2h0LCBzbyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgZGVmaW5pdGVseSBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHJlYWNoYWJsZSBpdCBpcy4gQWhhLCBpdCYjMzk7cyBhIGBzeXNjdGxgIGhhbmRsZXIsIHNvIGl0ICpzaG91bGQqIGJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYHByb2Nfc3lzX2NhbGxfaGFuZGxlcmAgaW50ZXJmYWNlLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgZ2l2ZXMgbWUgcGF1c2UuIEl0IHJhaXNlcyB0aGUgcG9zc2liaWxpdHkgb2YgaW5saW5pbmcgb3IsIHdvcnNlLCBubyByZWFkaWx5IGlkZW50aWZpYWJsZSBzeW1ib2wgYWRkcmVzcy4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggaXQuIEluc3RlYWQgb2YgZGlnZ2luZyB0b28gZGVlcCByaWdodCBub3csIGxldCBtZSBwaXZvdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgaXBfdnNfYWRkX3NlcnZpY2VgIGFuZCBgaXBfdnNfYWRkX2Rlc3RgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBjcmVhdGluZyB0aGVzZSBlc3RpbWF0b3JzLCByaWdodD8gSXQgbWlnaHQgYmUgZWFzaWVyIGFuZCBjbGVhbmVyIHRvIGdvIHRocm91Z2ggdGhvc2UgcGF0aHMgaWYgcG9zc2libGUuIFRoZXkmIzM5O3JlIHByb2JhYmx5IG1vcmUgd2VsbC1kZWZpbmVkIGFuZCBkb2N1bWVudGVkIGludGVyZmFjZXMuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgaWYgSSBjYW4gbGV2ZXJhZ2UgdGhlbSBpbnN0ZWFkIG9mIHdyZXN0bGluZyB3aXRoIHRoaXMgcG90ZW50aWFsbHkgb3BhcXVlIHN0YXRpYyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2FkZF9zZXJ2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTcwOD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTcwOTppcF92c19hZGRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE3MTAtXHRcdCAgc3RydWN0IGlwX3ZzX3NlcnZpY2UgKipzdmNfcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzQyMz1kb19pcF92c19zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IHB0ciwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUzOC1cdFx0ZWxzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM1Mzk6XHRcdFx0cmV0ID0gaXBfdnNfYWRkX3NlcnZpY2UoaXB2cywgXHUwMDI2dXN2YywgXHUwMDI2c3ZjKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNTQwLVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDYzND1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfc2V0X2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NzMyLVx0XHRpZiAoc3ZjID09IE5VTEwpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDczMzpcdFx0XHRyZXQgPSBpcF92c19hZGRfc2VydmljZShpcHZzLCBcdTAwMjZ1c3ZjLCBcdTAwMjZzdmMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ3MzQtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBpcF92c19hZGRfc2VydmljZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIGBpcF92c19hZGRfc2VydmljZWAgaXMsIGFzIEkgcmVjYWxsLCBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBleHBlY3RhdGlvbiBmb3IgaW50ZXJuYWwsIG1vZHVsZS1zcGVjaWZpYyBmdW5jdGlvbnMg4oCTIGl0IG1ha2VzIHNlbnNlIGZyb20gYW4gZW5jYXBzdWxhdGlvbiBzdGFuZHBvaW50LiBCdXQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBob2xkIG9uLCB3aGF0IGFib3V0IGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgPyBUaGUgbmFtZXMgc291bmQgaW50aW1hdGVseSByZWxhdGVkIHRvIHRoZSBzYW1lIHN1YnN5c3RlbSwgYnV0IEkgKnRoaW5rKiB0aG9zZSBhcmUgZXhwb3NlZCBvdXRzaWRlIHRoZSBtb2R1bGUuIElmIHRoZXkgKmFyZSogZXhwb3J0ZWQsIHRoYXQgaW1wbGllcyBhIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHBvdGVudGlhbGx5IG9mZmVyaW5nIGV4dGVybmFsbHkgY2FsbGFibGUgZnVuY3Rpb25hbGl0eS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBhY3R1YWwgc3ltYm9sIHZpc2liaWxpdHkgb2YgdGhvc2UgbGFzdCB0d28uIE5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGVzdGltYXRvcnMgaW4gSVBWUyBhcmUgc3VwcG9zZWQgdG8gd29yayB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW50byB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIElQVlMgQ29uZmlndXJhdGlvbiBFbnRyeSBQb2ludHMqKgoKQWxyaWdodCwgc28gdGhlIHN5bWJvbHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmVuJiMzOTt0ICpleHBvcnRlZCosIGJ1dCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG5vdCBzdGF0aWMgZWl0aGVyLCB3aGljaCBnaXZlcyB0aGVtIGEgdW5pcXVlIHN5bWJvbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGhvbWUgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIElQVlMgY29uZmlndXJhdGlvbiDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBlbnRyeSBwb2ludHMsIHJpZ2h0PyBMZXQmIzM5O3MgY2hlY2sgYGRvX2lwX3ZzX3NldF9jdGxgIGFuZCBgaXBfdnNfZ2VubF9zZXRfY21kYC4gVGhvc2UgYXJlICpoaWdobHkqIGxpa2VseSB0byBiZSB0aGUgY29yZSBmdW5jdGlvbnMgd2hlcmUgSVBWUyBjb25maWd1cmF0aW9uIGNvbW1hbmRzIHVsdGltYXRlbHkgZ2V0IHByb2Nlc3NlZC4gVGhleSYjMzk7cmUgd2hlcmUgSSYjMzk7ZCBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgc3RhdGUgaXMgYmVpbmcgbWFuaXB1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2lwX3ZzX3NldF9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNDIyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNDIzOmRvX2lwX3ZzX3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgcHRyLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM0MjQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zOTAyPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXBfdnNfc29ja29wdHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MDUtXHQuc2V0X29wdG1heFx0PSBJUF9WU19TT19TRVRfTUFYJiM0MzsxLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM5MDY6XHQuc2V0XHRcdD0gZG9faXBfdnNfc2V0X2N0bCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zOTA3LVx0LmdldF9vcHRtaW5cdD0gSVBfVlNfQkFTRV9DVEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgSVBWUyBDb250cm9sIE1lY2hhbmlzbXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBkb19pcF92c19zZXRfY3RsYCBpcyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgZmluZSwgaXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQuIEhvd2V2ZXIsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBgaXBfdnNfZ2VubF9zZXRfY21kYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSYjMzk7cmUgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zIHdpdGhpbiBJUFZTLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhbnkgZGlzdGluY3Rpb24gb3IgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQXJlIHdlIGNyZWF0aW5nIHJlZHVuZGFuY3k/IElzIHRoZXJlIGEgcmVhc29uIHdoeSBvbmUgaXMgZGVjbGFyZWQgc3RhdGljIGFuZCB0aGUgb3RoZXIgaXNuJiMzOTt0PyBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciBvbmUgYmVpbmcgZ2VuZXJpYyBuZXRsaW5rIGJhc2VkLCB3aGlsc3QgdGhlIG90aGVyIGlzIHN0YXRpY2FsbHkgZGVjbGFyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19nZW5sX3NldF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00NjA5PXN0YXRpYyBpbnQgaXBfdnNfZ2VubF9zZXRfZGFlbW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MzMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDYzNDpzdGF0aWMgaW50IGlwX3ZzX2dlbmxfc2V0X2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MzUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgaXBfdnNfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg2OS1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0ODcwOlx0XHQuZG9pdFx0PSBpcF92c19nZW5sX3NldF9jbWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg3MS1cdH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4NzUtXHRcdC5mbGFnc1x0PSBHRU5MX0FETUlOX1BFUk0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg3NjpcdFx0LmRvaXRcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4NzctXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODgxLVx0XHQuZmxhZ3NcdD0gR0VOTF9BRE1JTl9QRVJNLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ4ODI6XHRcdC5kb2l0XHQ9IGlwX3ZzX2dlbmxfc2V0X2NtZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODgzLVx0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg5NC1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0ODk1Olx0XHQuZG9pdFx0PSBpcF92c19nZW5sX3NldF9jbWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg5Ni1cdH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5MDAtXHRcdC5mbGFnc1x0PSBHRU5MX0FETUlOX1BFUk0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkwMTpcdFx0LmRvaXRcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5MDItXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTA2LVx0XHQuZmxhZ3NcdD0gR0VOTF9BRE1JTl9QRVJNLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ5MDc6XHRcdC5kb2l0XHQ9IGlwX3ZzX2dlbmxfc2V0X2NtZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTA4LVx0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkzNi1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0OTM3Olx0XHQuZG9pdFx0PSBpcF92c19nZW5sX3NldF9jbWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkzOC1cdH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5NTQtXHRcdC5mbGFnc1x0PSBHRU5MX0FETUlOX1BFUk0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk1NTpcdFx0LmRvaXRcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5NTYtXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYwLVx0XHQuZmxhZ3NcdD0gR0VOTF9BRE1JTl9QRVJNLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ5NjE6XHRcdC5kb2l0XHQ9IGlwX3ZzX2dlbmxfc2V0X2NtZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYyLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgZGVzaWduIHJlbGllcyBoZWF2aWx5IG9uIHN0YXRpYyBkZWNsYXJhdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5IGFyZSB0aGUgb25lcyBsaWtlbHkgdG8gYmUgbW9yZSBpbnRlcmVzdGluZyBmcm9tIGEgYnJvYWRlciBkZXNpZ24gcGVyc3BlY3RpdmUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNvZGViYXNlLCB0aGUgb3RoZXIgZnVuY3Rpb25zIGxpc3RlZCBhcmUgaW5oZXJlbnRseSBzdGF0aWMsIHdoaWNoIGxpbWl0cyB0aGVpciB1dGlsaXR5LgoKSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBmdW5jdGlvbnMgYXMgbm9uLXN0YXRpYzogYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLiBJdHMgbm9uLXN0YXRpYyBuYXR1cmUgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLCBwZXJoYXBzIGZvciBjb25maWd1cmF0aW9uIG9yIGNvbnRyb2wuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgZG9pbmcuIERldGVybWluaW5nIGlmIGl0cyBub24tc3RhdGljIHN0YXR1cyBpcyBhIGtleSBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGNvZGUmIzM5O3Mgb3ZlcmFsbCBtYWludGFpbmFiaWxpdHkgYW5kIGV4dGVuc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE3ND1zdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjIzODp2b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTaXR1YXRpb24qKgoKUmlnaHQsIHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIHNpdHVhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgdGhyZWFkcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlcm1pbmF0aW9uIG9mIHRoZXNlIHByb2Nlc3NlcyBpcyBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byBleGFtaW5lIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYCBpbiBkZXRhaWwuIFRoZXNlIGFyZSBsaWtlbHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5vbi1zdGF0aWMgYmVoYXZpb3Igd2UmIzM5O3JlIG9ic2VydmluZy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgdGVhcmRvd24gYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsb2FkIGJhbGFuY2luZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDM9c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODQtXHRcdFx0XHRzdGFydCA9IGtkLVx1MDAzZW5lZWRlZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODU6XHRcdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBpcF92c19lc3Rfa3RocmVhZF9zdGFydChpcHZzLCBrZCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg2LVx0XHRcdFx0cmVwZWF0ID0gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MjM4PXZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTItLyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjUzOmludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTQtXHRcdFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgRm9jdXM6IFN0YXRpYyB2cy4gRHluYW1pYyBJUFZTIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhlIHN5bWJvbHMgaW4gcXVlc3Rpb24gKmFyZSogZHluYW1pYywgbm90IHN0YXRpYy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMgZm9yIGFuYWx5c2lzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgY29yZSBvbmVzOgoKKiAgIGBpcF92c19zdGFydF9lc3RpbWF0b3JgCiogICBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgCiogICBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAKKiAgIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAKKiAgIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYAoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbXVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIGtub3cgYElQX1ZTYCByZWxpZXMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYC4gSSByZWNhbGwgYE5FVEZJTFRFUmAgaXMgdHlwaWNhbGx5IGVuYWJsZWQgaW4gc3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBleHBsaWNpdGx5IGxpc3QgYElQX1ZTYC4gTGV0IG1lIHZlcmlmeSBpZiBgSVBfVlNgIGhhcyBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQmIzM5O3MgYmVzdCB0byBiZSB0aG9yb3VnaCBhdCB0aGlzIHN0YWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yOT1jb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMxOlx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXHRJUF9WU19ORkNUXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQwLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHBlcnNpc3RlbmNlIGVuZ2luZVwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0ODpcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNTQ6XHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzMwCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgRXN0aW1hdG9yIFBhdGNoKioKCk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgZm9jdXNpbmcgb24gYElQX1ZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhpcyBwYXRjaCwgYXQgbGVhc3QgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIGlzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkIHRvIGNvbnNpZGVyLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWwsIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIHRoZSBJUFZTIGVzdGltYXRvciYjMzk7cyBrdGhyZWFkIG1hbmFnZW1lbnQuIExvb2tzIGxpa2UgaXQmIzM5O3MgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHByb2JsZW0gd2hlbiBkZWFsaW5nIHdpdGggYGt0aHJlYWRfc3RvcGAuIFRoZSBmaXggaW5jb3Jwb3JhdGVzIGBnZXRfdGFza19zdHJ1Y3RgIGZvciBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0aGUgYXNzb2NpYXRlZCBga3RocmVhZF9zdG9wX3B1dGAgY2FsbC4gRXhjZWxsZW50LCBjbGFzc2ljIGNvbmN1cnJlbmN5IGZpeC4gV2UmIzM5O3JlIHNlZWluZyBjaGVja3MgZm9yIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIGFuZCBgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpYCBhcyB3ZWxsLCB3aGljaCBpcyBnb29kLiBFbnN1cmVzIHRoZSBrdGhyZWFkIGV4aXRzIHByb3Blcmx5IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVGhpcyBjaGFuZ2UgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IHpvbmUgaW4gb24gdGhlc2Ugc3ltYm9sczogYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYC4gVGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBleGl0IHBvaW50cyBmb3IgZnV6emluZy4gVGhleSYjMzk7cmUgd2hlcmUgd2Ugc2hvdWxkIGJlIHByb2JpbmcgZm9yIHRoZSB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgZml4aW5nIHRoaXMgSVBWUyBlc3RpbWF0b3Iga3RocmVhZCBpc3N1ZS4gVGhlIHNvbHV0aW9uIHJldm9sdmVzIGFyb3VuZCByZWZlcmVuY2UgY291bnRpbmfigJRwcmV2ZW50aW5nIHRoYXQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW/igJRhbmQgYWRkaW5nIGFuIGVhcmx5IGV4aXQgY29uZGl0aW9uIHRvIHRoZSBrdGhyZWFkIGl0c2VsZi4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsLCBjb3JlIGNoYW5nZSB0byBJUFZTLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRoZSB1c3VhbCBuZXRsaW5rIGFuZCBzeXNjdGwgaW50ZXJmYWNlcy4KClRpbWUgdG8gY2FsbCB0aGUgdGVhbSBhbmQgc2V0IHRoZSByZXN1bHRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfc3RvcF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfc3RvcF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA2Ljk0NTg5ODEwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzExODI5NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3RhcnRfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19zdG9wX2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBWUyBlc3RpbWF0b3Iga3RocmVhZCBtYW5hZ2VtZW50IGJ5IGFkZGluZyByZWZlcmVuY2UgY291bnRpbmcgKGdldF90YXNrX3N0cnVjdCBhbmQga3RocmVhZF9zdG9wX3B1dCkgYW5kIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gdGhlIGt0aHJlYWQgZnVuY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUFZTIG5ldGxpbmsgYW5kIHN5c2N0bCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZXN0aW1hdG9yIHN0YXJ0L3N0b3AgYW5kIHJlbG9hZCBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA2Ljk0NTkxNTI5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4NzI4ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTY0MDJmNTNkYWZhMzMxZmM2YTUzM2ZjZWRmYzk3NjkxYjkzNGZmZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMDoyMDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcXG5pbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xcbkBAIC0xOTEsOCArMTkxLDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xcbi1cXHRcXHRpZiAoaXB2cy1cXHUwMDNlZXN0X2NhbGNfcGhhc2UpXFxuK1xcdFxcdGlmIChpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSkge1xcbiBcXHRcXHRcXHRpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTtcXG4rXFx0XFx0XFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXFx1MDAzZWVuYWJsZSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHdoaWxlICgxKSB7XFxuQEAgLTI3MCw2ICsyNzMsNyBAQCBpbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuIFxcdFxcdGtkLVxcdTAwM2V0YXNrID0gTlVMTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4rXFx0Z2V0X3Rhc2tfc3RydWN0KGtkLVxcdTAwM2V0YXNrKTtcXG4gXFxuIFxcdHNldF91c2VyX25pY2Uoa2QtXFx1MDAzZXRhc2ssIHN5c2N0bF9lc3RfbmljZShpcHZzKSk7XFxuIFxcdGlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKVxcbkBAIC0yODYsNyArMjkwLDcgQEAgdm9pZCBpcF92c19lc3Rfa3RocmVhZF9zdG9wKHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuIHtcXG4gXFx0aWYgKGtkLVxcdTAwM2V0YXNrKSB7XFxuIFxcdFxcdHByX2luZm8oXFxcInN0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXFxcblxcXCIsIGtkLVxcdTAwM2VpZCk7XFxuLVxcdFxcdGt0aHJlYWRfc3RvcChrZC1cXHUwMDNldGFzayk7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcF9wdXQoa2QtXFx1MDAzZXRhc2spO1xcbiBcXHRcXHRrZC1cXHUwMDNldGFzayA9IE5VTEw7XFxuIFxcdH1cXG4gfVxcbkBAIC01MjYsNyArNTMwLDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcbiBcXHRpZiAoa2QpIHtcXG4gXFx0XFx0aWYgKGtkLVxcdTAwM2V0YXNrKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcInN0b3AgdW51c2VkIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXFxcblxcXCIsIGtkLVxcdTAwM2VpZCk7XFxuLVxcdFxcdFxcdGt0aHJlYWRfc3RvcChrZC1cXHUwMDNldGFzayk7XFxuK1xcdFxcdFxcdGt0aHJlYWRfc3RvcF9wdXQoa2QtXFx1MDAzZXRhc2spO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwX3ZzX3N0YXRzX2ZyZWUoa2QtXFx1MDAzZWNhbGNfc3RhdHMpO1xcbiBcXHRcXHRrZnJlZShrZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA3LjI3NTQxMDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTgzODIzMDk3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zdGFydF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTY0MDJmNTNkYWZhMzMxZmM2YTUzM2ZjZWRmYzk3NjkxYjkzNGZmZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDIwOjIwOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5pbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcbkBAIC0xOTEsOCArMTkxLDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRcdH1cbiBcbiBcdFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXG4tXHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKVxuK1x0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSkge1xuIFx0XHRcdGlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpO1xuK1x0XHRcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLVx1MDAzZWVuYWJsZSkpXG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0d2hpbGUgKDEpIHtcbkBAIC0yNzAsNiArMjczLDcgQEAgaW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuIFx0XHRrZC1cdTAwM2V0YXNrID0gTlVMTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4rXHRnZXRfdGFza19zdHJ1Y3Qoa2QtXHUwMDNldGFzayk7XG4gXG4gXHRzZXRfdXNlcl9uaWNlKGtkLVx1MDAzZXRhc2ssIHN5c2N0bF9lc3RfbmljZShpcHZzKSk7XG4gXHRpZiAoc3lzY3RsX2VzdF9wcmVmZXJyZWRfY3B1bGlzdChpcHZzKSlcbkBAIC0yODYsNyArMjkwLDcgQEAgdm9pZCBpcF92c19lc3Rfa3RocmVhZF9zdG9wKHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXG4ge1xuIFx0aWYgKGtkLVx1MDAzZXRhc2spIHtcbiBcdFx0cHJfaW5mbyhcInN0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cIiwga2QtXHUwMDNlaWQpO1xuLVx0XHRrdGhyZWFkX3N0b3Aoa2QtXHUwMDNldGFzayk7XG4rXHRcdGt0aHJlYWRfc3RvcF9wdXQoa2QtXHUwMDNldGFzayk7XG4gXHRcdGtkLVx1MDAzZXRhc2sgPSBOVUxMO1xuIFx0fVxuIH1cbkBAIC01MjYsNyArNTMwLDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuIFx0aWYgKGtkKSB7XG4gXHRcdGlmIChrZC1cdTAwM2V0YXNrKSB7XG4gXHRcdFx0cHJfaW5mbyhcInN0b3AgdW51c2VkIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cIiwga2QtXHUwMDNlaWQpO1xuLVx0XHRcdGt0aHJlYWRfc3RvcChrZC1cdTAwM2V0YXNrKTtcbitcdFx0XHRrdGhyZWFkX3N0b3BfcHV0KGtkLVx1MDAzZXRhc2spO1xuIFx0XHR9XG4gXHRcdGlwX3ZzX3N0YXRzX2ZyZWUoa2QtXHUwMDNlY2FsY19zdGF0cyk7XG4gXHRcdGtmcmVlKGtkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA3LjI3NTQxMTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0OTE4MjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNgLCBhbmQgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIGtlcm5lbCB0aHJlYWQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuICBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHJlZmluaW5nIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlc3RpbWF0aW9uIHRocmVhZHMgKGBrZC1cdTAwM2V0YXNrYCBwcmVzdW1hYmx5KSB3aXRoaW4gSVBWUyBhcmUgaGFuZGxlZC5cblxuVGhlIGFkZGl0aW9uIG9mIGBnZXRfdGFza19zdHJ1Y3Qoa2QtXHUwMDNldGFzaylgIGluIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgdGhlIGZpcnN0IHNpZ24uIFRoYXQncyBnb29kIOKAkyBpdCdzIGNydWNpYWwgdG8gYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0YXNrIHN0cnVjdHVyZSB3aGVuIHlvdSdyZSB0YWtpbmcgb3duZXJzaGlwIG9mIGEgcG9pbnRlciB0byBpdC4gIFdlIG5lZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgZ2V0IGZyZWVkIG91dCBmcm9tIHVuZGVyIHVzLiAgVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYnV0IGl0J3MgZ29vZCB0byBzZWUgaXQgYmVpbmcgZXhwbGljaXRseSBhZGRyZXNzZWQuXG5cblRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZXMsIGhvd2V2ZXIsIGFyZSB0aGUgdXNlIG9mIGBrdGhyZWFkX3N0b3BfcHV0KGtkLVx1MDAzZXRhc2spYCBpbnN0ZWFkIG9mIGp1c3QgYGt0aHJlYWRfc3RvcChrZC1cdTAwM2V0YXNrKWAgaW4gYm90aCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9kZXN0cm95YC4gIGBrdGhyZWFkX3N0b3BfcHV0YCBpcyB0aGUgc2FmZXIgd2F5IHRvIHN0b3AgYSBrZXJuZWwgdGhyZWFkLiBJdCBub3Qgb25seSBzaWduYWxzIHRoZSB0aHJlYWQgdG8gdGVybWluYXRlIGJ1dCBhbHNvIHJlbGVhc2VzIHRoZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgdGFzay4gVGhpcyBpcyBhIG11Y2gtbmVlZGVkIGltcHJvdmVtZW50OyBvdGhlcndpc2UsIGl0J3MgdmVyeSBlYXN5IHRvIGxlYWsgdGhyZWFkcyBhbmQgbGVhayBtZW1vcnkuXG5cbkZpbmFsbHksIHRoZSBhZGRlZCBjaGVjayBmb3IgYGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKWAgd2l0aGluIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgIGluZGljYXRlcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHNodXRkb3duIGNvbmRpdGlvbiBmb3IgdGhlc2UgdGhyZWFkcy4gVGhpcyBtYWtlcyBzZW5zZTsgaXQgYWRkcyBhIGxldmVsIG9mIGdyYWNlZnVsIHNodXRkb3duIGlmIHRoZSBzeXN0ZW0gaXMgZGlzYWJsaW5nIElQVlMgb3IgaWYgYSBzdG9wIHNpZ25hbCBpcyBnaXZlbi4gIFRoZSBgUkVBRF9PTkNFYCB1c2FnZSBhbHNvIGltcGxpZXMgdGhhdCBgaXB2cy1cdTAwM2VlbmFibGVgIGlzIGEgc2hhcmVkIHZhcmlhYmxlIGFuZCB3ZSBuZWVkIGF0b21pYyBhY2Nlc3MgdG8gaXQgdG8gbWFrZSBzdXJlIHdlJ3JlIGdldHRpbmcgYW4gdXAtdG8tZGF0ZSB2YWx1ZS5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGZ1bGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBzdXNwZWN0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgYWxsIHJlbGF0ZXMgdG8gb3RoZXIgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoxMi41MjQ1OTY2NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODI2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjEyLjU2NjE4MjU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDY0MzM4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jaWVzIG9mIElQX1ZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgSVBfVlNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBlc3NlbnRpYWwgcHJlcmVxdWlzaXRlcyBvciBzdXBwb3J0aW5nIG1vZHVsZXMgZm9yIGBJUF9WU2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBjYXNjYWRpbmcgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgYmVmb3JlIG1vdmluZyBvbi4gV2UgY2FuJ3QgYWZmb3JkIGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgc28gYSBxdWljayBkZXBlbmRlbmN5IGNoZWNrIGlzIHBhcmFtb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRoYXQgbmVlZHMgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MTUuNzcyNjE5ODc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjM0MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcXHRJUF9WU19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBoZWxwZXJcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cXHRcXHRORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXFx0SVBfVlNfTkZDVFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MTUuODE0ODU2NzM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNTYwMjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNvbmNlcm4gaGVyZSByZXZvbHZlcyBhcm91bmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgSVBfVlNgLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEga2VybmVsIG1vZHVsZSBjb25maWd1cmF0aW9uIG9yIGJ1aWxkIHByb2Nlc3MuIE15IHRob3VnaHQgcHJvY2VzcyBpbW1lZGlhdGVseSBqdW1wcyB0byBcImlzIGBJUF9WU2AgZnVsbHkgcmVsaWFudCBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgP1wiIFRoaXMgaXMgYSBrZXkgZGVwZW5kZW5jeSBhbmFseXNpcyBzdGVwIOKAkyBlbnN1cmluZyBhbGwgcHJlcmVxdWlzaXRlcyBhcmUgbWV0IGlzIGNyaXRpY2FsLiBJJ20gbWVudGFsbHkgZmlsaW5nIHRoYXQgYXdheSBhcyBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVzZSBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSB0aGUgdHdvIHRoYXQgYXJlIG1lbnRpb25lZCwgYXJlIGFjdHVhbGx5ICplbm91Z2gqLiBBcmUgdGhlcmUgYW55IHN1YnRsZSwgaW1wbGllZCBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGNvbnNpZGVyP1xuXG5UaGVuLCB0aGUgZm9jdXMgc2hpZnRzIHRvIHRoZSBwYXRjaCBhdCBoYW5kLiBUaGUgZmFjdCB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFyZ2V0cyBgaXBfdnNfZXN0LmNgIGlzIHNpZ25pZmljYW50LiBUaGF0IHBhcnRpY3VsYXIgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBlc3RhYmxpc2htZW50IGZvciB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIuIE5vdywgSSdtIHRoaW5raW5nLCBcIklzIHRoaXMgY29tcGlsYXRpb24gb2YgYGlwX3ZzX2VzdC5jYCBjb25kaXRpb25hbD9cIiBNZWFuaW5nLCBkb2VzIHNvbWUgb3RoZXIgbWFjcm8gb3IgY29uZmlndXJhdGlvbiBmbGFnIGNvbnRyb2wgaWYgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkPyBBIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvdWxkIGRyYXN0aWNhbGx5IGNoYW5nZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaCBpZiBpdCdzIG5vdCBhbHdheXMgYXBwbGllZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdvdWxkIGFsbG93IG1lIHRvIGtub3cgaWYgdGhpcyBmaXggaXMgcmVsZXZhbnQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gSSBhbSB3b3JraW5nIG9uLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGlkZW50aWZ5IGFsbCBwb3NzaWJsZSBidWlsZCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoxOS40MjA0NjEzODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3NzQwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTY9aXBfdnMtb2JqcyA6PVxcdGlwX3ZzX2Nvbm4ubyBpcF92c19jb3JlLm8gaXBfdnNfY3RsLm8gaXBfdnNfc2NoZWQub1xcdCAgIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTctXFx0XFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1xcdCAgIFxcdFxcdCAgIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTg6XFx0XFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXFx0XFx0XFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOS1cXHRcXHQkKGlwX3ZzX3Byb3RvLW9ianMteSkgJChpcF92cy1leHRyYV9vYmpzLXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjE5LjQ2MjI0MDM1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTc0MDA2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIEVzdGltYXRpb24gVGhyZWFkIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgZGVmaW5pdGVseSB0aWVkIGludG8gdGhlIGBpcF92cy1vYmpzYCBtb2R1bGUsIHdoaWNoIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX0lQX1ZTYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBJUFZTIGlzIHRoZSBjb3JlIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGluIHRoZSBlc3RpbWF0aW9uIHRocmVhZC5cblxuTGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgLCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3lgLiBOb3csIHRoZSBpbXBvcnRhbnQgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyBuZXcgZXN0aW1hdGlvbiBsb2dpYyBpcyBpbnRyb2R1Y2VkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBJUFZTIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCB0aGUgYnVnIGZpeGVzIGltcGxlbWVudGVkLCBvciBhbnkgb3RoZXIgY2hhbmdlcyBpbiBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoyMy4wNzk2NDMzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1OTkzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQzPXN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODQtXFx0XFx0XFx0XFx0c3RhcnQgPSBrZC1cXHUwMDNlbmVlZGVkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODU6XFx0XFx0XFx0aWYgKHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KGlwdnMsIGtkKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4Ni1cXHRcXHRcXHRcXHRyZXBlYXQgPSB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTItLyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI1MzppbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1NC1cXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MjMuMTI3MjQ2ODI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjI2OTg0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IEt0aHJlYWQgU3RhcnR1cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQga3RocmVhZCAoYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCkgd2l0aGluIElQVlMgZ2V0cyBmaXJlZCB1cC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIGJhY2sgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhdGluZyBldmVudC4gSXQgc2VlbXMgbGlrZSBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgIGlzIHRoZSBpbW1lZGlhdGUgcGFyZW50LCBhY2NvcmRpbmcgdG8gdGhlIHNvdXJjZS4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gd2hhdCBleGFjdGx5IHRyaWdnZXJzICp0aGF0KiBoYW5kbGVyLCBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgLCB3aXRoaW4gYGlwX3ZzX2N0bC5jYC4gS25vd2luZyB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc20gd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrdGhyZWFkJ3Mgcm9sZSBhbmQgaG93IGl0IGFsbCBmaXRzIGludG8gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmbG93LiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgcmVsb2FkIGxvZ2ljLCBsaWtlbHkgcmVsYXRlZCB0byBjb25maWd1cmF0aW9uIGNoYW5nZXMgb3IgcmVzb3VyY2UgY29uc3RyYWludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgdG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgbG9hZCBiYWxhbmNpbmcgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoyNi41NDk5NDc1MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODU1MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzdF9yZWxvYWRfd29ya19oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTIzMD1zdGF0aWMgdm9pZCBkZWZlbnNlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDM6c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUxNzk9aW50IF9fbmV0X2luaXQgaXBfdnNfY29udHJvbF9uZXRfaW5pdChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjA3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo1MjA4OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfcmVsb2FkX3dvcmssIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTIwOS1cXHRpcHZzLVxcdTAwM2VzeXNjdGxfc3ZjX2xmYWN0b3IgPSBpcF92c19zdmNfZGVmYXVsdF9sb2FkX2ZhY3RvcihpcHZzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MjYuNTg5ODA3MTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODE3MjcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEZWxheWVkIFdvcmsgUXVldWUqKlxuXG5SaWdodCwgdGhpcyB3b3JrJ3MgYmVlbiBoZWxkIHVwIHNvbWV3aGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQncyBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGluIHRoZSBxdWV1ZSBgZXN0X3JlbG9hZF93b3JrYCBpcyBzaXR0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgY3VycmVudCBzdGF0ZSB3aXRoaW4gdGhlIHN5c3RlbSdzIHNjaGVkdWxpbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb24gaXMgY3JpdGljYWwg4oCTIGlzIGl0IHdhaXRpbmcgb24gYSBzcGVjaWZpYyBkZXBlbmRlbmN5LCBhIHJlc291cmNlIGxvY2ssIG9yIHNpbXBseSByZXNvdXJjZSBhdmFpbGFiaWxpdHk/IEtub3dpbmcgdGhlIHF1ZXVlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBib3R0bGVuZWNrLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZWxheSwgYW5kIHRoZSBxdWV1ZSBsb2NhdGlvbiBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjI5LjQ3MTUzNjM0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2MTkyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXN0X3JlbG9hZF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTIzMD1zdGF0aWMgdm9pZCBkZWZlbnNlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDM6c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDUtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDY6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRuc19pcHZzLCBlc3RfcmVsb2FkX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0Ny1cXHRpbnQgZ2VuaWRfZG9uZSA9IGF0b21pY19yZWFkKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfZ2VuaWRfZG9uZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjkyLVxcdGlmIChyZXBlYXQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI5MzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfcmVsb2FkX3dvcmssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5NC1cXHRcXHRcXHRcXHQgICBkZWxheSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NTE3OT1pbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyMDctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUyMDg6XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yaywgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjA5LVxcdGlwdnMtXFx1MDAzZXN5c2N0bF9zdmNfbGZhY3RvciA9IGlwX3ZzX3N2Y19kZWZhdWx0X2xvYWRfZmFjdG9yKGlwdnMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUyNjQ9dm9pZCBfX25ldF9leGl0IGlwX3ZzX2NvbnRyb2xfbmV0X2NsZWFudXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTI2Ny1cXHRpcF92c19jb250cm9sX25ldF9jbGVhbnVwX3N5c2N0bChpcHZzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTI2ODpcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyNjktI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjAtICAtIHdoZW4gY29uZmlndXJhdGlvbiAoY3B1bGlzdC9uaWNlKSBpcyBjaGFuZ2VkLCB0aGUgdGFza3MgYXJlIHJlc3RhcnRlZFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo2MTogICAgYnkgd29yayAoZXN0X3JlbG9hZF93b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy02Mi0gIC0ga3RocmVhZCB0YXNrcyBhcmUgc3RvcHBlZCB3aGlsZSB0aGUgY3B1bGlzdCBpcyBlbXB0eVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNDgtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X2dlbmlkKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjQ5OlxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yaywgMCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjI5LjUxNDE1Nzg4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU0NDk5MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBGdW5jdGlvbiBDYWxsIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgcmVzcG9uc2libGUgZm9yIHF1ZXVpbmcgc29tZSBraW5kIG9mIHdvcmssIGxpa2VseSByZWxhdGVkIHRvIHJlbG9hZGluZyBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIElQVlMgc2V0dXAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3Mgd2hlcmUgdGhlIGJhbGwgZ2V0cyByb2xsaW5nLlwiIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyAqd2hlcmUqIHRoYXQgd29yayBpcyBpbml0aWF0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBjYWxsZXJzIHRvIGdyYXNwIHRoZSB0cmlnZ2VycyBmb3IgdGhlc2UgcmVsb2Fkcy4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdGltZXIsIGFuIGV4dGVybmFsIHNpZ25hbCwgYSBjaGFuZ2UgaW4gY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgZHVyaW5nIGEgcmVzdGFydD8gVGhpcyB3aWxsIGdpdmUgbWUgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGNhbGxpbmcgY29udGV4dCwgaW5zcGVjdCBhbnkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQsIGFuZCBzZWUgd2hhdCB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zIGFyZS4gSXQgd2lsbCBiZWNvbWUgcHJldHR5IGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MzQuNjY4NjU5NDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDcxMDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg1LVxcdFxcdC8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIGZpcnN0IHRpbWUgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTg4NjpcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg3LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X211dGV4KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDQzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDcxLVxcdGlwdnMtXFx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjQ3MjpcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDczLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI1MzM9c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X25pY2UoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTU0LVxcdFxcdFxcdFxcdCp2YWxwID0gdmFsO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTU1OlxcdFxcdFxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NTYtXFx0XFx0XFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI1NjM9c3RhdGljIGludCBpcHZzX3Byb2NfcnVuX2VzdGltYXRpb24oY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgxLVxcdFxcdFxcdCp2YWxwID0gdmFsO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTgyOlxcdFxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1ODMtXFx0XFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE3ND1zdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzNy0vKiBTY2hlZHVsZSBzdG9wL3N0YXJ0IGZvciBrdGhyZWFkIHRhc2tzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjIzODp2b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjM5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0zMTE9c3RhdGljIGludCBpcF92c19lc3RfYWRkX2t0aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzYyLVxcdC8qIFJlcXVlc3Qga3RocmVhZCB0byBiZSBzdGFydGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjM2MzpcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIGZhbHNlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzY0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTQ5Nz1pbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUxNy1cXHRcXHRrZC1cXHUwMDNlbmVlZGVkID0gMTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTE4OlxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUxOS1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NTQxPXZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjA3LVxcdFxcdFxcdGtkLVxcdTAwM2VuZWVkZWQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo2MDg6XFx0XFx0XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjA5LVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MzQuNzA5Mzc1Mzg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU0Mzk5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgZmxvdywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNvLCBgaXBfdnNfYWRkX3NlcnZpY2VgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKWAuIFRoYXQgZmlyc3QgY2FsbCBzZWVtcyB0byBzZXQgdXAgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiAgVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIHF1ZXVlcyB3b3JrLCBwcmVzdW1hYmx5IGFzeW5jaHJvbm91c2x5LiBOb3csIHRoaXMgcXVldWVkIFwid29ya1wiIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBJIHN1c3BlY3QgaXQgaXMgaGFuZGxlZCBieSB0aGUga2VybmVsIHRocmVhZC4gSSBiZXQgdGhhdCBxdWV1ZWQgd29yayBpcyB3aGF0IGtpY2tzdGFydHMgdGhlIHJlYWwgcHJvY2VzcywgYW5kIEkgdGhpbmsgaXQgY2FsbHMgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YC5cblxuVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIGtlcm5lbCB0aHJlYWQgaXMgbGF1bmNoZWQgdXNpbmcgYGt0aHJlYWRfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZSByZWFsIG1hZ2ljIHdpbGwgYmUgaGFwcGVuaW5nIHRoZXJlLiBMZXQncyBtYWtlIHN1cmUgSSBsb29rIGludG8gdGhhdCBmdW5jdGlvbiBwcm9wZXJseS4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjM4LjQ4NDgxNjk5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdH1cXG4gMjUxOlxcdFxcbiAyNTI6XFx0LyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXFxuIDI1MzpcXHRpbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuIDI1NDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcXG4gMjU1OlxcdHtcXG4gMjU2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm93O1xcbiAyNTc6XFx0XFx0aW50IHJldCA9IDA7XFxuIDI1ODpcXHRcXHRsb25nIGdhcDtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X211dGV4KTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0aWYgKGtkLVxcdTAwM2V0YXNrKVxcbiAyNjM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI2NDpcXHRcXHRub3cgPSBqaWZmaWVzO1xcbiAyNjU6XFx0XFx0Z2FwID0ga2QtXFx1MDAzZWVzdF90aW1lciAtIG5vdztcXG4gMjY2OlxcdFxcdC8qIFN5bmMgZXN0X3RpbWVyIGlmIHRhc2sgaXMgc3RhcnRpbmcgbGF0ZXIgKi9cXG4gMjY3OlxcdFxcdGlmIChhYnMoZ2FwKSBcXHUwMDNlIDQgKiBJUFZTX0VTVF9USUNLKVxcbiAyNjg6XFx0XFx0XFx0a2QtXFx1MDAzZWVzdF90aW1lciA9IG5vdztcXG4gMjY5OlxcdFxcdGtkLVxcdTAwM2V0YXNrID0ga3RocmVhZF9jcmVhdGUoaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkLCBrZCwgXFxcImlwdnMtZTolZDolZFxcXCIsXFxuIDI3MDpcXHRcXHRcXHRcXHRcXHQgIGlwdnMtXFx1MDAzZWdlbiwga2QtXFx1MDAzZWlkKTtcXG4gMjcxOlxcdFxcdGlmIChJU19FUlIoa2QtXFx1MDAzZXRhc2spKSB7XFxuIDI3MjpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGtkLVxcdTAwM2V0YXNrKTtcXG4gMjczOlxcdFxcdFxcdGtkLVxcdTAwM2V0YXNrID0gTlVMTDtcXG4gMjc0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0XFx0Z2V0X3Rhc2tfc3RydWN0KGtkLVxcdTAwM2V0YXNrKTtcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0c2V0X3VzZXJfbmljZShrZC1cXHUwMDNldGFzaywgc3lzY3RsX2VzdF9uaWNlKGlwdnMpKTtcXG4gMjc5OlxcdFxcdGlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKVxcbiAyODA6XFx0XFx0XFx0a3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKGtkLVxcdTAwM2V0YXNrLCBzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0cHJfaW5mbyhcXFwic3RhcnRpbmcgZXN0aW1hdG9yIHRocmVhZCAlZC4uLlxcXFxuXFxcIiwga2QtXFx1MDAzZWlkKTtcXG4gMjgzOlxcdFxcdHdha2VfdXBfcHJvY2VzcyhrZC1cXHUwMDNldGFzayk7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdG91dDpcXG4gMjg2OlxcdFxcdHJldHVybiByZXQ7XFxuIDI4NzpcXHR9XFxuIDI4ODpcXHRcXG4gMjg5OlxcdHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcChzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0aWYgKGtkLVxcdTAwM2V0YXNrKSB7XFxuIDI5MjpcXHRcXHRcXHRwcl9pbmZvKFxcXCJzdG9wcGluZyBlc3RpbWF0b3IgdGhyZWFkICVkLi4uXFxcXG5cXFwiLCBrZC1cXHUwMDNlaWQpO1xcbiAyOTM6XFx0XFx0XFx0a3RocmVhZF9zdG9wX3B1dChrZC1cXHUwMDNldGFzayk7XFxuIDI5NDpcXHRcXHRcXHRrZC1cXHUwMDNldGFzayA9IE5VTEw7XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdC8qIEFwcGx5IHBhcmFtZXRlcnMgdG8ga3RocmVhZCAqL1xcbiAyOTk6XFx0c3RhdGljIHZvaWQgaXBfdnNfZXN0X3NldF9wYXJhbXMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjM4LjQ4NDkxMjA4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzE3MjMzODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBUaHJlYWQgU2FmZXR5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIGNvbmN1cnJlbmN5IHByb2JsZW0gY29ubmVjdGVkIHRvIGBrdGhyZWFkX3N0b3BgLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIGluY29ycG9yYXRlIGBnZXRfdGFza19zdHJ1Y3RgIGFuZCBga3RocmVhZF9zdG9wX3B1dGAgY2FsbHMsIHdoaWNoIGlzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgdGFzayBzdHJ1Y3Qgd2l0aGluIGEga2VybmVsIHRocmVhZCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCBwcmV2ZW50aW5nIGFjY2VzcyBhZnRlciBkZWFsbG9jYXRpb24uXG5cbk5vdywgbGV0J3MgZGlzc2VjdCB0aGUgYWRkaXRpb24gd2l0aGluIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLiBJdCBzZWVtcyBsaWtlIHRoZXkndmUgd2lzZWx5IGFkZGVkIGEgY2hlY2sgdGhhdCBpbmNsdWRlcyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbi4gSXQncyBleGl0aW5nIHRoZSB0aHJlYWQgaWYgYGt0aHJlYWRfc2hvdWxkX3N0b3AoKWAgaXMgdHJ1ZSAod2hpY2ggaXMgdGhlIHNpZ25hbCB0byB0ZXJtaW5hdGUpIG9yLCBjcnVjaWFsbHksIGlmIGAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKWAgaXMgdHJ1ZS4gVGhhdCBsYXN0IGNvbmRpdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlIHRocmVhZCBzaG91bGQgYWxzbyBleGl0IGlmIHRoZSBgaXB2cy1cdTAwM2VlbmFibGVgIGZsYWcgaXMgc2V0IHRvIGZhbHNlLiBVc2luZyBgUkVBRF9PTkNFYCBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlIGVuYWJsaW5nIHZhcmlhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgY29uY3VycmVudGx5IGFuZCBjb3VsZCBiZSBjYWNoZWQgYnkgdGhlIHRocmVhZCBsb2NhbGx5LCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSByYWNlIGNvbmRpdGlvbiBpZiBub3QgYWRkcmVzc2VkIGNvcnJlY3RseS4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHRoZSB0aHJlYWQgY29udGludWluZyB0byBydW4gd2hlbiBpdCBzaG91bGRuJ3QuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpbiB0aGF0IGFyZWEgb2YgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6NDcuMjAyMTQ3Nzg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdG91dDpcXG4gMTcxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAxNzI6XFx0fVxcbiAxNzM6XFx0XFxuIDE3NDpcXHRzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0c3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCA9IGRhdGE7XFxuIDE3NzpcXHRcXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGtkLVxcdTAwM2VpcHZzO1xcbiAxNzg6XFx0XFx0aW50IHJvdyA9IGtkLVxcdTAwM2Vlc3Rfcm93O1xcbiAxNzk6XFx0XFx0dW5zaWduZWQgbG9uZyBub3c7XFxuIDE4MDpcXHRcXHRpbnQgaWQgPSBrZC1cXHUwMDNlaWQ7XFxuIDE4MTpcXHRcXHRsb25nIGdhcDtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKGlkIFxcdTAwM2UgMCkge1xcbiAxODQ6XFx0XFx0XFx0aWYgKCFpcHZzLVxcdTAwM2Vlc3RfY2hhaW5fbWF4KVxcbiAxODU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE4NjpcXHRcXHR9IGVsc2Uge1xcbiAxODc6XFx0XFx0XFx0aWYgKCFpcHZzLVxcdTAwM2Vlc3RfY2hhaW5fbWF4KSB7XFxuIDE4ODpcXHRcXHRcXHRcXHRpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSA9IDE7XFxuIDE4OTpcXHRcXHRcXHRcXHQvKiBjb21taXQgZXN0X2NhbGNfcGhhc2UgYmVmb3JlIHJlYWRpbmcgZXN0X2dlbmlkICovXFxuIDE5MDpcXHRcXHRcXHRcXHRzbXBfbWIoKTtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXFxuIDE5NDpcXHRcXHRcXHRpZiAoaXB2cy1cXHUwMDNlZXN0X2NhbGNfcGhhc2UpIHtcXG4gMTk1OlxcdFxcdFxcdFxcdGlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpO1xcbiAxOTY6XFx0XFx0XFx0XFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXFx1MDAzZWVuYWJsZSkpXFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTk4OlxcdFxcdFxcdH1cXG4gMTk5OlxcdFxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0d2hpbGUgKDEpIHtcXG4gMjAyOlxcdFxcdFxcdGlmICghaWQgXFx1MDAyNlxcdTAwMjYgIWhsaXN0X2VtcHR5KFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfdGVtcF9saXN0KSlcXG4gMjAzOlxcdFxcdFxcdFxcdGlwX3ZzX2VzdF9kcmFpbl90ZW1wX2xpc3QoaXB2cyk7XFxuIDIwNDpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lETEUpO1xcbiAyMDU6XFx0XFx0XFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSlcXG4gMjA2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRcXHQvKiBiZWZvcmUgZXN0aW1hdGlvbiwgY2hlY2sgaWYgd2Ugc2hvdWxkIHNsZWVwICovXFxuIDIwOTpcXHRcXHRcXHRub3cgPSBqaWZmaWVzO1xcbiAyMTA6XFx0XFx0XFx0Z2FwID0ga2QtXFx1MDAzZWVzdF90aW1lciAtIG5vdztcXG4gMjExOlxcdFxcdFxcdGlmIChnYXAgXFx1MDAzZSAwKSB7XFxuIDIxMjpcXHRcXHRcXHRcXHRpZiAoZ2FwIFxcdTAwM2UgSVBWU19FU1RfVElDSykge1xcbiAyMTM6XFx0XFx0XFx0XFx0XFx0a2QtXFx1MDAzZWVzdF90aW1lciA9IG5vdyAtIElQVlNfRVNUX1RJQ0s7XFxuIDIxNDpcXHRcXHRcXHRcXHRcXHRnYXAgPSBJUFZTX0VTVF9USUNLO1xcbiAyMTU6XFx0XFx0XFx0XFx0fVxcbiAyMTY6XFx0XFx0XFx0XFx0c2NoZWR1bGVfdGltZW91dChnYXApO1xcbiAyMTc6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjE4OlxcdFxcdFxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4gMjE5OlxcdFxcdFxcdFxcdGlmIChnYXAgXFx1MDAzYyAtOCAqIElQVlNfRVNUX1RJQ0spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjQ3LjIwMjI1MzEyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODkyMDM1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQVlMgRXN0aW1hdG9yIEt0aHJlYWQgRnVuY3Rpb25hbCBGaXggLSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHNvbWV0aGluZyBoZXJlIHRoYXQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWwgZml4IGZvciB0aG9zZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkcy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGVzZSB0aGluZ3MgYXJlIHVzdWFsbHkgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyBrdGhyZWFkcyBwcmVzZW50IHNvbWUgdW5pcXVlIGNoYWxsZW5nZXMgaW4gaG93IHdlIGFwcHJvYWNoIHRoaXMsIHNvIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuVGhlIG1haW4ga3RocmVhZCBpdHNlbGYsIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLCBpc24ndCBkaXJlY3RseSBjYWxsYWJsZSB0aHJvdWdoIHN5c2NhbGxzLCB3aGljaCBtZWFucyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5kaXJlY3QgY2FsbHMuIFRoZXJlZm9yZSBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0J3Mgc3RhcnRlZCBhbmQgc3RvcHBlZCBhbmQgdGhvc2UgZnVuY3Rpb25zLCBuYW1lbHk6IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYCwgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLCB3aGljaCB3aWxsIGhhdmUgdG8gYmUgbXkgZW50cnkgcG9pbnQuIEknbGwgbmVlZCB0byBsb29rIGF0IGFsbCB0aG9zZSByZWxhdGVkIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBmdW5jdGlvbnMuXG5cbkkgc2hvdWxkIGFsc28gZXhhbWluZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IHRyaWdnZXIgdGhlIGt0aHJlYWQncyBleGVjdXRpb24uIGBpcF92c19hZGRfc2VydmljZWAsIGFuZCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIG1lLiBJIGNhbiBpbnZlc3RpZ2F0ZSB0aGVtIHRvIHNlZSBpZiB0aGV5J3JlIGdvb2QgZm9jdXMgc3ltYm9scy4gRnVuY3Rpb25zIGxpa2UgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYCBhcmUgYWxzbyBjcnVjaWFsIHNpbmNlIHRoZXkgaGFuZGxlIGNsZWFudXAgc2NlbmFyaW9zLiBUaGlzIHdpbGwgcmVxdWlyZSBzb21lIGNhcmVmdWwgYW5hbHlzaXMsIGJ1dCB0aGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMgdG8gc3RhcnQgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDo1Mi4wOTQyOTA4NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjM5ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDAyPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQzNTpcXHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVxcdTAwM2VpcHZzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDM2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE0NzE9aXBfdnNfYWRkX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNTIyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNTIzOlxcdFxcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdmMtXFx1MDAzZWlwdnMsIFxcdTAwMjZkZXN0LVxcdTAwM2VzdGF0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1MjQtXFx0XFx0LyogT24gZXJyb3IgcHV0IGJhY2sgZGVzdCBpbnRvIHRoZSB0cmFzaCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODMzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxODM0OlxcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihpcHZzLCBcXHUwMDI2c3ZjLVxcdTAwM2VzdGF0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE4MzUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDk5NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBfdnNfY29udHJvbF9uZXRfaW5pdF9zeXNjdGwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTEyMy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTEyNDpcXHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3IoaXB2cywgXFx1MDAyNmlwdnMtXFx1MDAzZXRvdF9zdGF0cy1cXHUwMDNlcyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxMjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDA0PXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk2LS8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIHN0YXRzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NzppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy00OTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDo1Mi4xMzQ1MzUxODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NjI4Mzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgRXN0aW1hdG9yIExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBJUFZTIGVzdGltYXRvciBmdW5jdGlvbnMuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHdhdGNoIOKAkyBpdCdzIHRyaWdnZXJlZCB3aGVuIG5ldyBkZXN0aW5hdGlvbnMgb3Igc2VydmljZXMgYXJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0uIENvbnZlcnNlbHksIGBpcF92c19zdG9wX2VzdGltYXRvcmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFuZCBpcyBjYWxsZWQgd2hlbiB0aGV5J3JlIGRlbGV0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19hZGRfc2VydmljZWAsIGFuZCBgaXBfdnNfYWRkX2Rlc3RgIGFyZSBsaWtlbHkgdGhlIG1vc3QgcGVydGluZW50IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29yZSBjb250cm9sIGZsb3cgaGVyZS5cblxuSSBhbHNvIHNlZSB0aGF0IGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgYnkgc3lzY3RsIG1vZGlmaWNhdGlvbnMsIHdoaWNoIGlzIHdvcnRoIGNvbnNpZGVyaW5nIHNpbmNlIGl0IHByb2JhYmx5IGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBHaXZlbiB0aGF0IGl0J3MgdHJpZ2dlcmVkIGJ5IHN5c2N0bHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBlc3RpbWF0b3IsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvbiB0aGF0LiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzeXNjdGwgdmFyaWFibGVzIG5vdyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXN0aW1hdG9yIGlzIGluZmx1ZW5jZWQgYnkgdGhlIHVzZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjU2LjAwMDgyMTIyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NjA4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2c19wcm9jX2VzdF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQyMD1wcm9jX2RvX3N5bmNfcG9ydHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDQzOnN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ0NC1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZmZlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDgxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDgyOnN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX2dldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ4My1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUwNjpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bGlzdChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA3LVxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MTctXFx0XFx0LyogcHJvY19zeXNfY2FsbF9oYW5kbGVyKCkgYXBwZW5kcyB0ZXJtaW5hdG9yICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MTg6XFx0XFx0cmV0ID0gaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldCh0YWJsZSwgYnVmZmVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUxOS1cXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUyMi1cXHRcXHQvKiBwcm9jX3N5c19jYWxsX2hhbmRsZXIoKSBhbGxvY2F0ZXMgMSBieXRlIGZvciB0ZXJtaW5hdG9yICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MjM6XFx0XFx0cmV0ID0gaXB2c19wcm9jX2VzdF9jcHVtYXNrX2dldCh0YWJsZSwgYnVmZmVyLCAqbGVucCArIDEpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTI0LVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MzItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MzM6c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X25pY2UoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUzNC1cXHRcXHRcXHQgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI2NTU9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNfdmFyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4MzU6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gaXB2c19wcm9jX2VzdF9jcHVsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0MC1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mjg0MTpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBpcHZzX3Byb2NfZXN0X25pY2UsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NDItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6NTYuMDQzNzg5MDY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTc3NDkwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJUFZTIEVzdGltYXRvciBNb2R1bGUgLSBLZXkgRnVuY3Rpb25hbGl0eSBhbmQgRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgSSdtIHplcm9pbmcgaW4gb24gdGhlIElQVlMgZXN0aW1hdG9yIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpcHZzX3Byb2NfZXN0X2NwdWxpc3RgIGFuZCBgaXB2c19wcm9jX2VzdF9uaWNlYCBsb29rIGxpa2Ugc29saWQgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbSByZWdhcmRpbmcgdGhlIGVzdGltYXRvci4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLlxuXG5Ob3csIGxldCdzIGNvbnNvbGlkYXRlIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZXN0aW1hdG9yIGZ1bmN0aW9uYWxpdHkuIFdlIG5lZWQgdG8gY3JlYXRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZXN0aW1hdG9yJ3Mgb3BlcmF0aW9uczpcblxuKiAgIEkgbmVlZCB0byBsb29rIGF0IGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBhcyB0aGV5IGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBhbmQgc3RvcHBpbmcgcG9pbnRzLiBUaGVzZSBhcmUgdGhlIGhvb2tzIGZvciB0aGUgb3ZlcmFsbCBlc3RpbWF0b3IgbGlmZWN5Y2xlLlxuKiAgIEkgYWxzbyBzaG91bGQgaW5jbHVkZSBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaW4gdGhlIGZvY3VzIGdyb3VwLiBUaGlzIGlzIGxpa2VseSBob3cgbmV3IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlZ3JhdGVkLlxuKiAgIE9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50cyBmcm9tIGJlZm9yZSwgYGlwdnNfcHJvY19lc3RfY3B1bGlzdGAgYW5kIGBpcHZzX3Byb2NfZXN0X25pY2VgLCBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBDUFUgbGlzdCBhbmQgbmljZSB2YWx1ZXMgYXJlIG1hbmFnZWQgb3IgY29uZmlndXJlZC5cbiogICBGaW5hbGx5LCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgYGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbmAuIElmIGl0J3MgdGhlcmUsIHRoZW4gaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBleHBsb3JpbmcgaG93IHRoZSBhY3R1YWwgZXN0aW1hdGlvbiBwcm9jZXNzIGlzIGluaXRpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MDAuMTAxNTQwODQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA1OTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHZzX3Byb2NfcnVuX2VzdGltYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjUzMz1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfbmljZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NjItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1NjM6c3RhdGljIGludCBpcHZzX3Byb2NfcnVuX2VzdGltYXRpb24oY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU2NC1cXHRcXHRcXHRcXHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNjU1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzX3ZhcnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODI4LVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODI5OlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjgzMC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTowMC4xNDM2MDQyNzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0Nzg3OTAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgRXN0aW1hdG9yIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIElQVlMgZXN0aW1hdG9yIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGUgaXMgdGhhdCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYCBpcyBpbmRlZWQgcHJlc2VudCwgYXMgZXhwZWN0ZWQuIE5vdywgd2hhdCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/IExldCdzIHNlZS4uLiB0aGUgcHJpbWFyeSBvbmUgYXBwZWFycyB0byBiZSBgSVBfVlNgLiBBcmUgdGhlcmUgYW55IHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzIGZvciBgSVBfVlNgPyBZZXMsIGl0IGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUmAuIEFuZCBgSVBfVlNgIGl0c2VsZiBpcyB0cmlzdGF0ZSwgc28gdGhhdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuTGV0J3MgZG8gYSBxdWljayBkZWVwIGRpdmUgaW50byB0aGUgcGF0Y2ggYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBub3RoaW5nIGVsc2UgaXMgaW4gcGxheS4gVGhlIHBhdGNoIHRhcmdldHMgYGlwX3ZzX2VzdC5jYCwgbW9kaWZ5aW5nIGtleSBmdW5jdGlvbnM6IGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAsIGFuZCBgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveWAuXG5cbmBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgdHJpZ2dlcmVkIGZyb20gYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGlwX3ZzX2VzdF9hZGRfa3RocmVhZGAuIEZ1cnRoZXJtb3JlLCBgaXBfdnNfZXN0X2FkZF9rdGhyZWFkYCBpcyBpbnZva2VkIGZyb20gYGlwX3ZzX2VucXVldWVfZXN0aW1hdG9yYCwgd2hpY2ggaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGVzdGltYXRvcnMgYXJlIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLiBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgY2FsbGVkIHdoZW4gY2VydGFpbiBzeXNjdGxzIGFyZSBtb2RpZmllZC4gVGhlIHJlbGV2YW50IHN5c2N0bHMgYXJlIGBlc3RfY3B1bGlzdGAsIGBlc3RfbmljZWAsIGFuZCBgcnVuX2VzdGltYXRpb25gLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiBhcmU6IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXB2c19wcm9jX2VzdF9jcHVsaXN0YCwgYGlwdnNfcHJvY19lc3RfbmljZWAsIGFuZCwgb2YgY291cnNlLCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgaXMgc3RhdGljIG9yIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MDYuNDkxNDg1NDU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI1MzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTQwND1zdGF0aWMgaW50IGlwX3ZzX2VucXVldWVfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5Ni0vKiBTdGFydCBlc3RpbWF0aW9uIGZvciBzdGF0cyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo0OTc6aW50IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MDYuNTM0NzQwNjE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzQzMDQxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRXZvbHZpbmcgQ29uY2VwdHMgaW4gRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbm90IHNlZWluZyB0aGlzIGFzIGEgc3RhdGljIHByb2JsZW0uIEl0J3MgZHluYW1pYywgY29uc3RhbnRseSBjaGFuZ2luZy4gVGhhdCdzIHRoZSBjb3JlIG9mIG15IGN1cnJlbnQgdGhpbmtpbmcuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gaG93IHRoZSBzeXN0ZW0ncyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgdmFyeSwgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgdmFyaWFiaWxpdHkgaW4gbWluZC5cblxuQW5kIG5vdyBJJ20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGFib3V0IGBpcF92c19zdG9wX2VzdGltYXRvcmAuIFRoYXQgZnVuY3Rpb24ncyBiZWhhdmlvciBpcyBsaWtlbHkgY3J1Y2lhbCBoZXJlLCBhbmQgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgaXQgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvdXRwdXRzLCBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyByZXNwb25zZSB0byBjaGFuZ2VzLiBUaGF0IHBhcnRpY3VsYXIgdmFyaWFibGUgaXMgYSBseW5jaHBpbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MTAuNjA5MDQ2NjUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg1ODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTUyOD1zdGF0aWMgdm9pZCBpcF92c19lc3Rfa3RocmVhZF9kZXN0cm95KHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQwLS8qIFVubGluayBlc3RpbWF0b3IgZnJvbSBjaGFpbiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo1NDE6dm9pZCBpcF92c19zdG9wX2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MTAuNjQ5OTA2OTM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzY5MDkxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZSwga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgTmV0d29yayBMb2FkIEJhbGFuY2luZyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmNlcHQgaXNuJ3QgZml4ZWQsIGl0J3MgY29uc3RhbnRseSBzaGlmdGluZy4gVGhpcyBwYXJ0aWN1bGFyIGlzc3VlIGRlbWFuZHMgYSBkeW5hbWljIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgaXQuIE5vdywgYXMgSSBkaXZlIGRlZXBlciwgSSdtIHRoaW5raW5nIGFib3V0IGEgc3BlY2lmaWMgY29tcG9uZW50IHdpdGhpbiB0aGUgTGludXggVmlydHVhbCBTZXJ2ZXIgKExWUykgcmVhbG0uIFRoZSBxdWVzdGlvbiB0aGF0IGhhcyBzcHJ1bmcgdG8gbWluZCBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyB3aGVuIGNvbnNpZGVyaW5nIGBpcHZzX3Byb2NfZXN0X2NwdWxpc3RgPyBXaGF0IGRvZXMgdGhhdCBpbXBseSBpbiB0aGlzIGNvbnRleHQ/IExldCdzIGNvbnNpZGVyIHRoZSBwb3NzaWJsZSBhdmVudWVzIG9mIGludmVzdGlnYXRpb24gaW4gdGhhdCByZWdhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MTMuNDg2ODE4MDk4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDU3ODgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHZzX3Byb2NfZXN0X2NwdWxpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ4Mj1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19nZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUwNjpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bGlzdChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA3LVxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI2NTU9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNfdmFyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4MzU6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gaXB2c19wcm9jX2VzdF9jcHVsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjEzLjUyNzQwMTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzIyNTM3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyB0aGUgRXN0aW1hdG9yJ3MgT3JpZ2lucyoqXG5cblJpZ2h0LCBzbyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgZGVmaW5pdGVseSBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHJlYWNoYWJsZSBpdCBpcy4gQWhhLCBpdCdzIGEgYHN5c2N0bGAgaGFuZGxlciwgc28gaXQgKnNob3VsZCogYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgcHJvY19zeXNfY2FsbF9oYW5kbGVyYCBpbnRlcmZhY2UuIEJ1dCB0aGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIGdpdmVzIG1lIHBhdXNlLiBJdCByYWlzZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGlubGluaW5nIG9yLCB3b3JzZSwgbm8gcmVhZGlseSBpZGVudGlmaWFibGUgc3ltYm9sIGFkZHJlc3MuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggaXQuIEluc3RlYWQgb2YgZGlnZ2luZyB0b28gZGVlcCByaWdodCBub3csIGxldCBtZSBwaXZvdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBpcF92c19hZGRfc2VydmljZWAgYW5kIGBpcF92c19hZGRfZGVzdGAgZnVuY3Rpb25zLiBUaGV5J3JlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgY3JlYXRpbmcgdGhlc2UgZXN0aW1hdG9ycywgcmlnaHQ/IEl0IG1pZ2h0IGJlIGVhc2llciBhbmQgY2xlYW5lciB0byBnbyB0aHJvdWdoIHRob3NlIHBhdGhzIGlmIHBvc3NpYmxlLiBUaGV5J3JlIHByb2JhYmx5IG1vcmUgd2VsbC1kZWZpbmVkIGFuZCBkb2N1bWVudGVkIGludGVyZmFjZXMuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSBpZiBJIGNhbiBsZXZlcmFnZSB0aGVtIGluc3RlYWQgb2Ygd3Jlc3RsaW5nIHdpdGggdGhpcyBwb3RlbnRpYWxseSBvcGFxdWUgc3RhdGljIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToxNy4yNTk2NTc2MTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjM2NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2FkZF9zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNzA5OmlwX3ZzX2FkZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyX2tlcm4gKnUsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE3MTAtXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfc2VydmljZSAqKnN2Y19wKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM0MjM9ZG9faXBfdnNfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBwdHIsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUzOC1cXHRcXHRlbHNlXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM1Mzk6XFx0XFx0XFx0cmV0ID0gaXBfdnNfYWRkX3NlcnZpY2UoaXB2cywgXFx1MDAyNnVzdmMsIFxcdTAwMjZzdmMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNTQwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ2MzQ9c3RhdGljIGludCBpcF92c19nZW5sX3NldF9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NzMyLVxcdFxcdGlmIChzdmMgPT0gTlVMTClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDczMzpcXHRcXHRcXHRyZXQgPSBpcF92c19hZGRfc2VydmljZShpcHZzLCBcXHUwMDI2dXN2YywgXFx1MDAyNnN2Yyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ3MzQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToxNy4zMDQyOTkxNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0NzYxMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpcF92c19hZGRfc2VydmljZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gYGlwX3ZzX2FkZF9zZXJ2aWNlYCBpcywgYXMgSSByZWNhbGwsIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0J3MgdXN1YWxseSB0aGUgZXhwZWN0YXRpb24gZm9yIGludGVybmFsLCBtb2R1bGUtc3BlY2lmaWMgZnVuY3Rpb25zIOKAkyBpdCBtYWtlcyBzZW5zZSBmcm9tIGFuIGVuY2Fwc3VsYXRpb24gc3RhbmRwb2ludC4gQnV0IHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb24gaW4gbXkgbWluZDogaG9sZCBvbiwgd2hhdCBhYm91dCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBhbmQgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYD8gVGhlIG5hbWVzIHNvdW5kIGludGltYXRlbHkgcmVsYXRlZCB0byB0aGUgc2FtZSBzdWJzeXN0ZW0sIGJ1dCBJICp0aGluayogdGhvc2UgYXJlIGV4cG9zZWQgb3V0c2lkZSB0aGUgbW9kdWxlLiBJZiB0aGV5ICphcmUqIGV4cG9ydGVkLCB0aGF0IGltcGxpZXMgYSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCByZWxhdGlvbnNoaXAgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBwb3RlbnRpYWxseSBvZmZlcmluZyBleHRlcm5hbGx5IGNhbGxhYmxlIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgYWN0dWFsIHN5bWJvbCB2aXNpYmlsaXR5IG9mIHRob3NlIGxhc3QgdHdvLiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGVzdGltYXRvcnMgaW4gSVBWUyBhcmUgc3VwcG9zZWQgdG8gd29yayB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCdzIGRpZyBpbnRvIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToyMC44MzkwNjMyMTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI3NDMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MjAuODgxMTk3NDQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjEzNDExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBJUFZTIENvbmZpZ3VyYXRpb24gRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgc28gdGhlIHN5bWJvbHMgd2UncmUgZGVhbGluZyB3aXRoIGFyZW4ndCAqZXhwb3J0ZWQqLCBidXQgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBzdGF0aWMgZWl0aGVyLCB3aGljaCBnaXZlcyB0aGVtIGEgdW5pcXVlIHN5bWJvbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGhvbWUgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIElQVlMgY29uZmlndXJhdGlvbiDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBlbnRyeSBwb2ludHMsIHJpZ2h0PyBMZXQncyBjaGVjayBgZG9faXBfdnNfc2V0X2N0bGAgYW5kIGBpcF92c19nZW5sX3NldF9jbWRgLiBUaG9zZSBhcmUgKmhpZ2hseSogbGlrZWx5IHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aGVyZSBJUFZTIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgdWx0aW1hdGVseSBnZXQgcHJvY2Vzc2VkLiBUaGV5J3JlIHdoZXJlIEknZCBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBzdGF0ZSBpcyBiZWluZyBtYW5pcHVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToyNC4xMDI1NDEzMDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTIzODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2lwX3ZzX3NldF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzQyMj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM0MjM6ZG9faXBfdnNfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBwdHIsIHVuc2lnbmVkIGludCBsZW4pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM0MjQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM5MDI9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBpcF92c19zb2Nrb3B0cyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zOTA1LVxcdC5zZXRfb3B0bWF4XFx0PSBJUF9WU19TT19TRVRfTUFYKzEsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM5MDY6XFx0LnNldFxcdFxcdD0gZG9faXBfdnNfc2V0X2N0bCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkwNy1cXHQuZ2V0X29wdG1pblxcdD0gSVBfVlNfQkFTRV9DVEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjI0LjE0NDQ2OTI5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc1MzI1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBJUFZTIENvbnRyb2wgTWVjaGFuaXNtcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBkb19pcF92c19zZXRfY3RsYCBpcyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQncyBmaW5lLCBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dC4gSG93ZXZlciwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHJlbGF0ZWQgZnVuY3Rpb24sIGBpcF92c19nZW5sX3NldF9jbWRgLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB0aGUgZGlmZmVyZW50IHdheXMgd2UncmUgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zIHdpdGhpbiBJUFZTLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYW55IGRpc3RpbmN0aW9uIG9yIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uIEFyZSB3ZSBjcmVhdGluZyByZWR1bmRhbmN5PyBJcyB0aGVyZSBhIHJlYXNvbiB3aHkgb25lIGlzIGRlY2xhcmVkIHN0YXRpYyBhbmQgdGhlIG90aGVyIGlzbid0PyBQZXJoYXBzIHRoZXJlJ3MgYSByZWFzb24gZm9yIG9uZSBiZWluZyBnZW5lcmljIG5ldGxpbmsgYmFzZWQsIHdoaWxzdCB0aGUgb3RoZXIgaXMgc3RhdGljYWxseSBkZWNsYXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5IGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MjcuNDE5Nzk3NDM0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkxNzEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19nZW5sX3NldF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDYwOT1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfc2V0X2RhZW1vbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ2MzQ6c3RhdGljIGludCBpcF92c19nZW5sX3NldF9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDYzNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGlwX3ZzX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg2OS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg3MDpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODcxLVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg3NS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg3NjpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODc3LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg4MS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg4MjpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODgzLVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg5NC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg5NTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODk2LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkwMC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkwMTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTAyLVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkwNi1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkwNzpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTA4LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkzNi1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkzNzpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTM4LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk1NC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk1NTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTU2LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk2MC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk2MTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYyLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjI3LjQ2MTcxODkwNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgyNzgwMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGNsZWFyIHRoZSBkZXNpZ24gcmVsaWVzIGhlYXZpbHkgb24gc3RhdGljIGRlY2xhcmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgdGhlIG9uZXMgbGlrZWx5IHRvIGJlIG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIGJyb2FkZXIgZGVzaWduIHBlcnNwZWN0aXZlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlYmFzZSwgdGhlIG90aGVyIGZ1bmN0aW9ucyBsaXN0ZWQgYXJlIGluaGVyZW50bHkgc3RhdGljLCB3aGljaCBsaW1pdHMgdGhlaXIgdXRpbGl0eS5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZXNlIGZ1bmN0aW9ucyBhcyBub24tc3RhdGljOiBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYCwgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YC4gSXRzIG5vbi1zdGF0aWMgbmF0dXJlIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbiwgcGVyaGFwcyBmb3IgY29uZmlndXJhdGlvbiBvciBjb250cm9sLiBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgZG9pbmcuIERldGVybWluaW5nIGlmIGl0cyBub24tc3RhdGljIHN0YXR1cyBpcyBhIGtleSBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGNvZGUncyBvdmVyYWxsIG1haW50YWluYWJpbGl0eSBhbmQgZXh0ZW5zaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTozMS4xNDQ1MDE2MTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODYwNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0xNzQ9c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyMzg6dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjMxLjE4NzM2NjY1NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc4OTQ5NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBzdGF0aWMgc2l0dWF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCB0aHJlYWRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVybWluYXRpb24gb2YgdGhlc2UgcHJvY2Vzc2VzIGlzIGJlaW5nIGhhbmRsZWQuIEnigJlsbCBuZWVkIHRvIGV4YW1pbmUgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgIGluIGRldGFpbC4gVGhlc2UgYXJlIGxpa2VseSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbm9uLXN0YXRpYyBiZWhhdmlvciB3ZSdyZSBvYnNlcnZpbmcuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHRlYXJkb3duIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9hZCBiYWxhbmNpbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MzQuMzY2MzE4ODU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE2ODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDM9c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NC1cXHRcXHRcXHRcXHRzdGFydCA9IGtkLVxcdTAwM2VuZWVkZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4NTpcXHRcXHRcXHRpZiAoc3RhcnQgXFx1MDAyNlxcdTAwMjYgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoaXB2cywga2QpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg2LVxcdFxcdFxcdFxcdHJlcGVhdCA9IHRydWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MjM4PXZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1Mi0vKiBTdGFydCBrdGhyZWFkIHRhc2sgd2l0aCBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjUzOmludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjU0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTozNC40MDg0ODk3OTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDQ1NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBTdGF0aWMgdnMuIER5bmFtaWMgSVBWUyBTeW1ib2xzKipcblxuT2theSwgc28gSSd2ZSBlc3RhYmxpc2hlZCB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbiAqYXJlKiBkeW5hbWljLCBub3Qgc3RhdGljLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBmb3IgYW5hbHlzaXMuIExldCdzIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgY29yZSBvbmVzOlxuXG4qICAgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmBcbiogICBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgXG4qICAgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgXG4qICAgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YFxuKiAgIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYFxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBtdXN0IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkga25vdyBgSVBfVlNgIHJlbGllcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLiBJIHJlY2FsbCBgTkVURklMVEVSYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCBpbiBzeXprYWxsZXIsIGJ1dCBpdCdzIGNydWNpYWwgdG8gZXhwbGljaXRseSBsaXN0IGBJUF9WU2AuIExldCBtZSB2ZXJpZnkgaWYgYElQX1ZTYCBoYXMgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIEl0J3MgYmVzdCB0byBiZSB0aG9yb3VnaCBhdCB0aGlzIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTozOC45NzI5NDk2MDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDgxMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcXHRJUF9WU19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBoZWxwZXJcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cXHRcXHRORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXFx0SVBfVlNfTkZDVFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MzkuMDE0MDM1MzE3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjY5NzQxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIEVzdGltYXRvciBQYXRjaCoqXG5cbk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgZm9jdXNpbmcgb24gYElQX1ZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhpcyBwYXRjaCwgYXQgbGVhc3QgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIGlzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkIHRvIGNvbnNpZGVyLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsLCBhZGRyZXNzaW5nIGEgYnVnIHdpdGhpbiB0aGUgSVBWUyBlc3RpbWF0b3IncyBrdGhyZWFkIG1hbmFnZW1lbnQuIExvb2tzIGxpa2UgaXQncyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gcHJvYmxlbSB3aGVuIGRlYWxpbmcgd2l0aCBga3RocmVhZF9zdG9wYC4gVGhlIGZpeCBpbmNvcnBvcmF0ZXMgYGdldF90YXNrX3N0cnVjdGAgZm9yIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRoZSBhc3NvY2lhdGVkIGBrdGhyZWFkX3N0b3BfcHV0YCBjYWxsLiBFeGNlbGxlbnQsIGNsYXNzaWMgY29uY3VycmVuY3kgZml4LiBXZSdyZSBzZWVpbmcgY2hlY2tzIGZvciBga3RocmVhZF9zaG91bGRfc3RvcCgpYCBhbmQgYCFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpYCBhcyB3ZWxsLCB3aGljaCBpcyBnb29kLiBFbnN1cmVzIHRoZSBrdGhyZWFkIGV4aXRzIHByb3Blcmx5IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVGhpcyBjaGFuZ2UgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXG5cbk5vdywgSSdsbCBuZWVkIHRvIHJlYWxseSB6b25lIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAsIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGFuZCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAuIFRob3NlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgZXhpdCBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkncmUgd2hlcmUgd2Ugc2hvdWxkIGJlIHByb2JpbmcgZm9yIHRoZSB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBJUFZTIGVzdGltYXRvciBrdGhyZWFkIGlzc3VlLiBUaGUgc29sdXRpb24gcmV2b2x2ZXMgYXJvdW5kIHJlZmVyZW5jZSBjb3VudGluZ+KAlHByZXZlbnRpbmcgdGhhdCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb+KAlGFuZCBhZGRpbmcgYW4gZWFybHkgZXhpdCBjb25kaXRpb24gdG8gdGhlIGt0aHJlYWQgaXRzZWxmLiBJdCdzIGEgZnVuY3Rpb25hbCwgY29yZSBjaGFuZ2UgdG8gSVBWUywgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRoZSB1c3VhbCBuZXRsaW5rIGFuZCBzeXNjdGwgaW50ZXJmYWNlcy5cblxuVGltZSB0byBjYWxsIHRoZSB0ZWFtIGFuZCBzZXQgdGhlIHJlc3VsdHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzMwLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTo0NS41ODEwMTE2NjJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjcwNTY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zdGFydF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQVlMgZXN0aW1hdG9yIGt0aHJlYWQgbWFuYWdlbWVudCBieSBhZGRpbmcgcmVmZXJlbmNlIGNvdW50aW5nIChnZXRfdGFza19zdHJ1Y3QgYW5kIGt0aHJlYWRfc3RvcF9wdXQpIGFuZCBhbiBlYXJseSBleGl0IGNoZWNrIGluIHRoZSBrdGhyZWFkIGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVBWUyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgSVBWUyBuZXRsaW5rIGFuZCBzeXNjdGwgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGVzdGltYXRvciBzdGFydC9zdG9wIGFuZCByZWxvYWQgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 20:00:43 +0000 UTC FinishedAt: 2026-07-30 20:21:46 +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": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "af4d9143-48fa-4564-9108-cf54fa3d446e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_start_estimator", "ip_vs_stop_estimator", "ip_vs_est_reload_start", "ip_vs_est_kthread_start", "ip_vs_est_kthread_stop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3RhcnRfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgICAmIzM0O2lwX3ZzX2VzdF9yZWxvYWRfc3RhcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBWUyBlc3RpbWF0b3Iga3RocmVhZCBtYW5hZ2VtZW50IGJ5IGFkZGluZyByZWZlcmVuY2UgY291bnRpbmcgKGdldF90YXNrX3N0cnVjdCBhbmQga3RocmVhZF9zdG9wX3B1dCkgYW5kIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gdGhlIGt0aHJlYWQgZnVuY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUFZTIG5ldGxpbmsgYW5kIHN5c2N0bCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZXN0aW1hdG9yIHN0YXJ0L3N0b3AgYW5kIHJlbG9hZCBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NjQwMmY1M2RhZmEzMzFmYzZhNTMzZmNlZGZjOTc2OTFiOTM0ZmZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6MjA6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5pbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcbkBAIC0xOTEsOCAmIzQzOzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHR9XG4gXG4gXHRcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xuLVx0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSlcbiYjNDM7XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gXHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4mIzQzO1x0XHRcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLVx1MDAzZWVuYWJsZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHR3aGlsZSAoMSkge1xuQEAgLTI3MCw2ICYjNDM7MjczLDcgQEAgaW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuIFx0XHRrZC1cdTAwM2V0YXNrID0gTlVMTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4mIzQzO1x0Z2V0X3Rhc2tfc3RydWN0KGtkLVx1MDAzZXRhc2spO1xuIFxuIFx0c2V0X3VzZXJfbmljZShrZC1cdTAwM2V0YXNrLCBzeXNjdGxfZXN0X25pY2UoaXB2cykpO1xuIFx0aWYgKHN5c2N0bF9lc3RfcHJlZmVycmVkX2NwdWxpc3QoaXB2cykpXG5AQCAtMjg2LDcgJiM0MzsyOTAsNyBAQCB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3Aoc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiB7XG4gXHRpZiAoa2QtXHUwMDNldGFzaykge1xuIFx0XHRwcl9pbmZvKFwmIzM0O3N0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cJiMzNDssIGtkLVx1MDAzZWlkKTtcbi1cdFx0a3RocmVhZF9zdG9wKGtkLVx1MDAzZXRhc2spO1xuJiM0MztcdFx0a3RocmVhZF9zdG9wX3B1dChrZC1cdTAwM2V0YXNrKTtcbiBcdFx0a2QtXHUwMDNldGFzayA9IE5VTEw7XG4gXHR9XG4gfVxuQEAgLTUyNiw3ICYjNDM7NTMwLDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuIFx0aWYgKGtkKSB7XG4gXHRcdGlmIChrZC1cdTAwM2V0YXNrKSB7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDtzdG9wIHVudXNlZCBlc3RpbWF0b3IgdGhyZWFkICVkLi4uXFxuXCYjMzQ7LCBrZC1cdTAwM2VpZCk7XG4tXHRcdFx0a3RocmVhZF9zdG9wKGtkLVx1MDAzZXRhc2spO1xuJiM0MztcdFx0XHRrdGhyZWFkX3N0b3BfcHV0KGtkLVx1MDAzZXRhc2spO1xuIFx0XHR9XG4gXHRcdGlwX3ZzX3N0YXRzX2ZyZWUoa2QtXHUwMDNlY2FsY19zdGF0cyk7XG4gXHRcdGtmcmVlKGtkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfc3RvcF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2NDAyZjUzZGFmYTMzMWZjNmE1MzNmY2VkZmM5NzY5MWI5MzRmZmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAyMDoyMDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwppbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xOTEsOCAmIzQzOzE5MSwxMSBAQCBzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKQogCQl9CiAKIAkJLyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovCi0JCWlmIChpcHZzLSZndDtlc3RfY2FsY19waGFzZSkKJiM0MzsJCWlmIChpcHZzLSZndDtlc3RfY2FsY19waGFzZSkgewogCQkJaXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7CiYjNDM7CQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtJmd0O2VuYWJsZSkpCiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJfQogCX0KIAogCXdoaWxlICgxKSB7CkBAIC0yNzAsNiAmIzQzOzI3Myw3IEBAIGludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywKIAkJa2QtJmd0O3Rhc2sgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiYjNDM7CWdldF90YXNrX3N0cnVjdChrZC0mZ3Q7dGFzayk7CiAKIAlzZXRfdXNlcl9uaWNlKGtkLSZndDt0YXNrLCBzeXNjdGxfZXN0X25pY2UoaXB2cykpOwogCWlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKQpAQCAtMjg2LDcgJiM0MzsyOTAsNyBAQCB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3Aoc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCkKIHsKIAlpZiAoa2QtJmd0O3Rhc2spIHsKIAkJcHJfaW5mbygmIzM0O3N0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cbiYjMzQ7LCBrZC0mZ3Q7aWQpOwotCQlrdGhyZWFkX3N0b3Aoa2QtJmd0O3Rhc2spOwomIzQzOwkJa3RocmVhZF9zdG9wX3B1dChrZC0mZ3Q7dGFzayk7CiAJCWtkLSZndDt0YXNrID0gTlVMTDsKIAl9CiB9CkBAIC01MjYsNyAmIzQzOzUzMCw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3koc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCkKIAlpZiAoa2QpIHsKIAkJaWYgKGtkLSZndDt0YXNrKSB7CiAJCQlwcl9pbmZvKCYjMzQ7c3RvcCB1bnVzZWQgZXN0aW1hdG9yIHRocmVhZCAlZC4uLlxuJiMzNDssIGtkLSZndDtpZCk7Ci0JCQlrdGhyZWFkX3N0b3Aoa2QtJmd0O3Rhc2spOwomIzQzOwkJCWt0aHJlYWRfc3RvcF9wdXQoa2QtJmd0O3Rhc2spOwogCQl9CiAJCWlwX3ZzX3N0YXRzX2ZyZWUoa2QtJmd0O2NhbGNfc3RhdHMpOwogCQlrZnJlZShrZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIENvbm5lY3Rpb24gVHJhY2tpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNgLCBhbmQgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIGtlcm5lbCB0aHJlYWQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuICBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHJlZmluaW5nIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlc3RpbWF0aW9uIHRocmVhZHMgKGBrZC0mZ3Q7dGFza2AgcHJlc3VtYWJseSkgd2l0aGluIElQVlMgYXJlIGhhbmRsZWQuCgpUaGUgYWRkaXRpb24gb2YgYGdldF90YXNrX3N0cnVjdChrZC0mZ3Q7dGFzaylgIGluIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgdGhlIGZpcnN0IHNpZ24uIFRoYXQmIzM5O3MgZ29vZCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byBidW1wIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHRhc2sgc3RydWN0dXJlIHdoZW4geW91JiMzOTtyZSB0YWtpbmcgb3duZXJzaGlwIG9mIGEgcG9pbnRlciB0byBpdC4gIFdlIG5lZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGdldCBmcmVlZCBvdXQgZnJvbSB1bmRlciB1cy4gIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIHNlZSBpdCBiZWluZyBleHBsaWNpdGx5IGFkZHJlc3NlZC4KClRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZXMsIGhvd2V2ZXIsIGFyZSB0aGUgdXNlIG9mIGBrdGhyZWFkX3N0b3BfcHV0KGtkLSZndDt0YXNrKWAgaW5zdGVhZCBvZiBqdXN0IGBrdGhyZWFkX3N0b3Aoa2QtJmd0O3Rhc2spYCBpbiBib3RoIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3lgLiAgYGt0aHJlYWRfc3RvcF9wdXRgIGlzIHRoZSBzYWZlciB3YXkgdG8gc3RvcCBhIGtlcm5lbCB0aHJlYWQuIEl0IG5vdCBvbmx5IHNpZ25hbHMgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUgYnV0IGFsc28gcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSBoZWxkIG9uIHRoZSB0YXNrLiBUaGlzIGlzIGEgbXVjaC1uZWVkZWQgaW1wcm92ZW1lbnQ7IG90aGVyd2lzZSwgaXQmIzM5O3MgdmVyeSBlYXN5IHRvIGxlYWsgdGhyZWFkcyBhbmQgbGVhayBtZW1vcnkuCgpGaW5hbGx5LCB0aGUgYWRkZWQgY2hlY2sgZm9yIGBrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpYCB3aXRoaW4gYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAgaW5kaWNhdGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgc2h1dGRvd24gY29uZGl0aW9uIGZvciB0aGVzZSB0aHJlYWRzLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBhZGRzIGEgbGV2ZWwgb2YgZ3JhY2VmdWwgc2h1dGRvd24gaWYgdGhlIHN5c3RlbSBpcyBkaXNhYmxpbmcgSVBWUyBvciBpZiBhIHN0b3Agc2lnbmFsIGlzIGdpdmVuLiAgVGhlIGBSRUFEX09OQ0VgIHVzYWdlIGFsc28gaW1wbGllcyB0aGF0IGBpcHZzLSZndDtlbmFibGVgIGlzIGEgc2hhcmVkIHZhcmlhYmxlIGFuZCB3ZSBuZWVkIGF0b21pYyBhY2Nlc3MgdG8gaXQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBnZXR0aW5nIGFuIHVwLXRvLWRhdGUgdmFsdWUuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgZnVsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBzdXNwZWN0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgYWxsIHJlbGF0ZXMgdG8gb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGVwZW5kZW5jaWVzIG9mIElQX1ZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYElQX1ZTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzIG9yIHN1cHBvcnRpbmcgbW9kdWxlcyBmb3IgYElQX1ZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGNhc2NhZGluZyBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBiZWZvcmUgbW92aW5nIG9uLiBXZSBjYW4mIzM5O3QgYWZmb3JkIGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgc28gYSBxdWljayBkZXBlbmRlbmN5IGNoZWNrIGlzIHBhcmFtb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRoYXQgbmVlZHMgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz01PW1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1x0SVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgSVBWU1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXHRJUF9WU19GVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBoZWxwZXJcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVCBcdTAwMjZcdTAwMjYgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cdFx0TkZfQ09OTlRSQUNLX0ZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMzNz1jb25maWdcdElQX1ZTX05GQ1Rcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmdcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzOTpcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1x0SVBfVlNfUEVfU0lQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcGVyc2lzdGVuY2UgZW5naW5lXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ4Olx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgZm9yIElQVlNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1NS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX1ZTYC4gV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb24gb3IgYnVpbGQgcHJvY2Vzcy4gTXkgdGhvdWdodCBwcm9jZXNzIGltbWVkaWF0ZWx5IGp1bXBzIHRvICYjMzQ7aXMgYElQX1ZTYCBmdWxseSByZWxpYW50IG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmA/JiMzNDsgVGhpcyBpcyBhIGtleSBkZXBlbmRlbmN5IGFuYWx5c2lzIHN0ZXAg4oCTIGVuc3VyaW5nIGFsbCBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgaXMgY3JpdGljYWwuIEkmIzM5O20gbWVudGFsbHkgZmlsaW5nIHRoYXQgYXdheSBhcyBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVzZSBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSB0aGUgdHdvIHRoYXQgYXJlIG1lbnRpb25lZCwgYXJlIGFjdHVhbGx5ICplbm91Z2gqLiBBcmUgdGhlcmUgYW55IHN1YnRsZSwgaW1wbGllZCBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGNvbnNpZGVyPwoKVGhlbiwgdGhlIGZvY3VzIHNoaWZ0cyB0byB0aGUgcGF0Y2ggYXQgaGFuZC4gVGhlIGZhY3QgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYGlwX3ZzX2VzdC5jYCBpcyBzaWduaWZpY2FudC4gVGhhdCBwYXJ0aWN1bGFyIGZpbGUgaXMgcGFydCBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZXN0YWJsaXNobWVudCBmb3IgdGhlIElQIFZpcnR1YWwgU2VydmVyLiBOb3csIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhpcyBjb21waWxhdGlvbiBvZiBgaXBfdnNfZXN0LmNgIGNvbmRpdGlvbmFsPyYjMzQ7IE1lYW5pbmcsIGRvZXMgc29tZSBvdGhlciBtYWNybyBvciBjb25maWd1cmF0aW9uIGZsYWcgY29udHJvbCBpZiB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQ/IEEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhdGNoIGlmIGl0JiMzOTtzIG5vdCBhbHdheXMgYXBwbGllZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdvdWxkIGFsbG93IG1lIHRvIGtub3cgaWYgdGhpcyBmaXggaXMgcmVsZXZhbnQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gSSBhbSB3b3JraW5nIG9uLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGlkZW50aWZ5IGFsbCBwb3NzaWJsZSBidWlsZCBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xNj1pcF92cy1vYmpzIDo9XHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cdCAgIFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTctXHRcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cdCAgIFx0XHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE4Olx0XHRpcF92c19lc3QubyBpcF92c19wcm90by5vIGlwX3ZzX3BlLm9cdFx0XHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE5LVx0XHQkKGlwX3ZzX3Byb3RvLW9ianMteSkgJChpcF92cy1leHRyYV9vYmpzLXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0aW9uIFRocmVhZCBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgdGllZCBpbnRvIHRoZSBgaXBfdnMtb2Jqc2AgbW9kdWxlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBmcmFtZXdvcmssIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfSVBfVlNgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IElQVlMgaXMgdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRoZSBlc3RpbWF0aW9uIHRocmVhZC4KCkxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ6IGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAsIGFuZCBgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveWAuIE5vdywgdGhlIGltcG9ydGFudCBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyBuZXcgZXN0aW1hdGlvbiBsb2dpYyBpcyBpbnRyb2R1Y2VkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBJUFZTIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCB0aGUgYnVnIGZpeGVzIGltcGxlbWVudGVkLCBvciBhbnkgb3RoZXIgY2hhbmdlcyBpbiBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQzPXN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0LVx0XHRcdFx0c3RhcnQgPSBrZC1cdTAwM2VuZWVkZWQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mjg1Olx0XHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoaXB2cywga2QpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4Ni1cdFx0XHRcdHJlcGVhdCA9IHRydWU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjUyLS8qIFN0YXJ0IGt0aHJlYWQgdGFzayB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI1MzppbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjU0LVx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgS3RocmVhZCBTdGFydHVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGt0aHJlYWQgKGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGApIHdpdGhpbiBJUFZTIGdldHMgZmlyZWQgdXAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBzdGFjayBiYWNrIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgZXZlbnQuIEl0IHNlZW1zIGxpa2UgYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCBpcyB0aGUgaW1tZWRpYXRlIHBhcmVudCwgYWNjb3JkaW5nIHRvIHRoZSBzb3VyY2UuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHdoYXQgZXhhY3RseSB0cmlnZ2VycyAqdGhhdCogaGFuZGxlciwgYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCwgd2l0aGluIGBpcF92c19jdGwuY2AuIEtub3dpbmcgdGhlIHRyaWdnZXJpbmcgbWVjaGFuaXNtIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUga3RocmVhZCYjMzk7cyByb2xlIGFuZCBob3cgaXQgYWxsIGZpdHMgaW50byB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZsb3cuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCByZWxvYWQgbG9naWMsIGxpa2VseSByZWxhdGVkIHRvIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciByZXNvdXJjZSBjb25zdHJhaW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB0byB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBsb2FkIGJhbGFuY2luZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXN0X3JlbG9hZF93b3JrX2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yMzA9c3RhdGljIHZvaWQgZGVmZW5zZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjQzOnN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MTc5PWludCBfX25ldF9pbml0IGlwX3ZzX2NvbnRyb2xfbmV0X2luaXQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyMDctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTIwODpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmlwdnMtXHUwMDNlZXN0X3JlbG9hZF93b3JrLCBlc3RfcmVsb2FkX3dvcmtfaGFuZGxlcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTIwOS1cdGlwdnMtXHUwMDNlc3lzY3RsX3N2Y19sZmFjdG9yID0gaXBfdnNfc3ZjX2RlZmF1bHRfbG9hZF9mYWN0b3IoaXB2cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGVsYXllZCBXb3JrIFF1ZXVlKioKClJpZ2h0LCB0aGlzIHdvcmsmIzM5O3MgYmVlbiBoZWxkIHVwIHNvbWV3aGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgcGlucG9pbnQgZXhhY3RseSB3aGVyZSBpbiB0aGUgcXVldWUgYGVzdF9yZWxvYWRfd29ya2AgaXMgc2l0dGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaXRzIGN1cnJlbnQgc3RhdGUgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3Mgc2NoZWR1bGluZyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGl0cyBwb3NpdGlvbiBpcyBjcml0aWNhbCDigJMgaXMgaXQgd2FpdGluZyBvbiBhIHNwZWNpZmljIGRlcGVuZGVuY3ksIGEgcmVzb3VyY2UgbG9jaywgb3Igc2ltcGx5IHJlc291cmNlIGF2YWlsYWJpbGl0eT8gS25vd2luZyB0aGUgcXVldWUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGJvdHRsZW5lY2suIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlbGF5LCBhbmQgdGhlIHF1ZXVlIGxvY2F0aW9uIGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3RfcmVsb2FkX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yMzA9c3RhdGljIHZvaWQgZGVmZW5zZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjQzOnN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NS1cdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDY6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0bnNfaXB2cywgZXN0X3JlbG9hZF93b3JrLndvcmspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0Ny1cdGludCBnZW5pZF9kb25lID0gYXRvbWljX3JlYWQoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfZ2VuaWRfZG9uZSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5Mi1cdGlmIChyZXBlYXQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjkzOlx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmlwdnMtXHUwMDNlZXN0X3JlbG9hZF93b3JrLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5NC1cdFx0XHRcdCAgIGRlbGF5KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NTE3OT1pbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjA3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUyMDg6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZpcHZzLVx1MDAzZWVzdF9yZWxvYWRfd29yaywgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyMDktXHRpcHZzLVx1MDAzZXN5c2N0bF9zdmNfbGZhY3RvciA9IGlwX3ZzX3N2Y19kZWZhdWx0X2xvYWRfZmFjdG9yKGlwdnMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MjY0PXZvaWQgX19uZXRfZXhpdCBpcF92c19jb250cm9sX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjY3LVx0aXBfdnNfY29udHJvbF9uZXRfY2xlYW51cF9zeXNjdGwoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTI2ODpcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZpcHZzLVx1MDAzZWVzdF9yZWxvYWRfd29yayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTI2OS0jaWZkZWYgQ09ORklHX1BST0NfRlNcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjAtICAtIHdoZW4gY29uZmlndXJhdGlvbiAoY3B1bGlzdC9uaWNlKSBpcyBjaGFuZ2VkLCB0aGUgdGFza3MgYXJlIHJlc3RhcnRlZFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjYxOiAgICBieSB3b3JrIChlc3RfcmVsb2FkX3dvcmspXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjItICAtIGt0aHJlYWQgdGFza3MgYXJlIHN0b3BwZWQgd2hpbGUgdGhlIGNwdWxpc3QgaXMgZW1wdHlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MjM4PXZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNDgtXHRcdGF0b21pY19pbmMoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfZ2VuaWQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI0OTpcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2aXB2cy1cdTAwM2Vlc3RfcmVsb2FkX3dvcmssIDApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBGdW5jdGlvbiBDYWxsIEZsb3cqKgoKQWxyaWdodCwgc28gYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIHNvbWUga2luZCBvZiB3b3JrLCBsaWtlbHkgcmVsYXRlZCB0byByZWxvYWRpbmcgZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMgd2l0aGluIHRoZSBJUFZTIHNldHVwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYmFsbCBnZXRzIHJvbGxpbmcuJiMzNDsgTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzICp3aGVyZSogdGhhdCB3b3JrIGlzIGluaXRpYXRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBjYWxsZXJzIHRvIGdyYXNwIHRoZSB0cmlnZ2VycyBmb3IgdGhlc2UgcmVsb2Fkcy4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdGltZXIsIGFuIGV4dGVybmFsIHNpZ25hbCwgYSBjaGFuZ2UgaW4gY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgZHVyaW5nIGEgcmVzdGFydD8gVGhpcyB3aWxsIGdpdmUgbWUgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjYWxsaW5nIGNvbnRleHQsIGluc3BlY3QgYW55IHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkLCBhbmQgc2VlIHdoYXQgdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBhcmUuIEl0IHdpbGwgYmVjb21lIHByZXR0eSBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4NS1cdFx0LyogU3RhcnQgZXN0aW1hdGlvbiBmb3IgZmlyc3QgdGltZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE4ODY6XHRcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTg4Ny1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ0Mz1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19zZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NzEtXHRpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDcyOlx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDczLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTMzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9uaWNlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NTQtXHRcdFx0XHQqdmFscCA9IHZhbDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTU1Olx0XHRcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTU2LVx0XHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjU2Mz1zdGF0aWMgaW50IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgxLVx0XHRcdCp2YWxwID0gdmFsO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1ODI6XHRcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgzLVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE3ND1zdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjIzODp2b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0zMTE9c3RhdGljIGludCBpcF92c19lc3RfYWRkX2t0aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTM2Mi1cdC8qIFJlcXVlc3Qga3RocmVhZCB0byBiZSBzdGFydGVkICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MzYzOlx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCBmYWxzZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzY0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz00OTc9aW50IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTE3LVx0XHRrZC1cdTAwM2VuZWVkZWQgPSAxO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjUxODpcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy01MTktXHRcdG11dGV4X3VubG9jayhcdTAwMjZpcHZzLVx1MDAzZWVzdF9tdXRleCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTU0MT12b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy02MDctXHRcdFx0a2QtXHUwMDNlbmVlZGVkID0gMDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo2MDg6XHRcdFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy02MDktXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlZXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBmbG93LCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU28sIGBpcF92c19hZGRfc2VydmljZWAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKWAuIFRoYXQgZmlyc3QgY2FsbCBzZWVtcyB0byBzZXQgdXAgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiAgVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIHF1ZXVlcyB3b3JrLCBwcmVzdW1hYmx5IGFzeW5jaHJvbm91c2x5LiBOb3csIHRoaXMgcXVldWVkICYjMzQ7d29yayYjMzQ7IGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBJIHN1c3BlY3QgaXQgaXMgaGFuZGxlZCBieSB0aGUga2VybmVsIHRocmVhZC4gSSBiZXQgdGhhdCBxdWV1ZWQgd29yayBpcyB3aGF0IGtpY2tzdGFydHMgdGhlIHJlYWwgcHJvY2VzcywgYW5kIEkgdGhpbmsgaXQgY2FsbHMgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YC4KClRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwga2VybmVsIHRocmVhZCBpcyBsYXVuY2hlZCB1c2luZyBga3RocmVhZF9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlIHJlYWwgbWFnaWMgd2lsbCBiZSBoYXBwZW5pbmcgdGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBsb29rIGludG8gdGhhdCBmdW5jdGlvbiBwcm9wZXJseS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHR9XG4gMjUxOlx0XG4gMjUyOlx0LyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXG4gMjUzOlx0aW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuIDI1NDpcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuIDI1NTpcdHtcbiAyNTY6XHRcdHVuc2lnbmVkIGxvbmcgbm93O1xuIDI1NzpcdFx0aW50IHJldCA9IDA7XG4gMjU4Olx0XHRsb25nIGdhcDtcbiAyNTk6XHRcbiAyNjA6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfbXV0ZXgpO1xuIDI2MTpcdFxuIDI2MjpcdFx0aWYgKGtkLVx1MDAzZXRhc2spXG4gMjYzOlx0XHRcdGdvdG8gb3V0O1xuIDI2NDpcdFx0bm93ID0gamlmZmllcztcbiAyNjU6XHRcdGdhcCA9IGtkLVx1MDAzZWVzdF90aW1lciAtIG5vdztcbiAyNjY6XHRcdC8qIFN5bmMgZXN0X3RpbWVyIGlmIHRhc2sgaXMgc3RhcnRpbmcgbGF0ZXIgKi9cbiAyNjc6XHRcdGlmIChhYnMoZ2FwKSBcdTAwM2UgNCAqIElQVlNfRVNUX1RJQ0spXG4gMjY4Olx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdztcbiAyNjk6XHRcdGtkLVx1MDAzZXRhc2sgPSBrdGhyZWFkX2NyZWF0ZShpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQsIGtkLCBcJiMzNDtpcHZzLWU6JWQ6JWRcJiMzNDssXG4gMjcwOlx0XHRcdFx0XHQgIGlwdnMtXHUwMDNlZ2VuLCBrZC1cdTAwM2VpZCk7XG4gMjcxOlx0XHRpZiAoSVNfRVJSKGtkLVx1MDAzZXRhc2spKSB7XG4gMjcyOlx0XHRcdHJldCA9IFBUUl9FUlIoa2QtXHUwMDNldGFzayk7XG4gMjczOlx0XHRcdGtkLVx1MDAzZXRhc2sgPSBOVUxMO1xuIDI3NDpcdFx0XHRnb3RvIG91dDtcbiAyNzU6XHRcdH1cbiAyNzY6XHRcdGdldF90YXNrX3N0cnVjdChrZC1cdTAwM2V0YXNrKTtcbiAyNzc6XHRcbiAyNzg6XHRcdHNldF91c2VyX25pY2Uoa2QtXHUwMDNldGFzaywgc3lzY3RsX2VzdF9uaWNlKGlwdnMpKTtcbiAyNzk6XHRcdGlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKVxuIDI4MDpcdFx0XHRrdGhyZWFkX2FmZmluZV9wcmVmZXJyZWQoa2QtXHUwMDNldGFzaywgc3lzY3RsX2VzdF9wcmVmZXJyZWRfY3B1bGlzdChpcHZzKSk7XG4gMjgxOlx0XG4gMjgyOlx0XHRwcl9pbmZvKFwmIzM0O3N0YXJ0aW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cJiMzNDssIGtkLVx1MDAzZWlkKTtcbiAyODM6XHRcdHdha2VfdXBfcHJvY2VzcyhrZC1cdTAwM2V0YXNrKTtcbiAyODQ6XHRcbiAyODU6XHRvdXQ6XG4gMjg2Olx0XHRyZXR1cm4gcmV0O1xuIDI4NzpcdH1cbiAyODg6XHRcbiAyODk6XHR2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3Aoc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbiAyOTA6XHR7XG4gMjkxOlx0XHRpZiAoa2QtXHUwMDNldGFzaykge1xuIDI5MjpcdFx0XHRwcl9pbmZvKFwmIzM0O3N0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cJiMzNDssIGtkLVx1MDAzZWlkKTtcbiAyOTM6XHRcdFx0a3RocmVhZF9zdG9wX3B1dChrZC1cdTAwM2V0YXNrKTtcbiAyOTQ6XHRcdFx0a2QtXHUwMDNldGFzayA9IE5VTEw7XG4gMjk1Olx0XHR9XG4gMjk2Olx0fVxuIDI5NzpcdFxuIDI5ODpcdC8qIEFwcGx5IHBhcmFtZXRlcnMgdG8ga3RocmVhZCAqL1xuIDI5OTpcdHN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9zZXRfcGFyYW1zKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIFRocmVhZCBTYWZldHkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIGNvbmN1cnJlbmN5IHByb2JsZW0gY29ubmVjdGVkIHRvIGBrdGhyZWFkX3N0b3BgLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIGluY29ycG9yYXRlIGBnZXRfdGFza19zdHJ1Y3RgIGFuZCBga3RocmVhZF9zdG9wX3B1dGAgY2FsbHMsIHdoaWNoIGlzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgdGFzayBzdHJ1Y3Qgd2l0aGluIGEga2VybmVsIHRocmVhZCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCBwcmV2ZW50aW5nIGFjY2VzcyBhZnRlciBkZWFsbG9jYXRpb24uCgpOb3csIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBhZGRpdGlvbiB3aXRoaW4gYGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZGAuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7dmUgd2lzZWx5IGFkZGVkIGEgY2hlY2sgdGhhdCBpbmNsdWRlcyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbi4gSXQmIzM5O3MgZXhpdGluZyB0aGUgdGhyZWFkIGlmIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIGlzIHRydWUgKHdoaWNoIGlzIHRoZSBzaWduYWwgdG8gdGVybWluYXRlKSBvciwgY3J1Y2lhbGx5LCBpZiBgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpYCBpcyB0cnVlLiBUaGF0IGxhc3QgY29uZGl0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgdGhyZWFkIHNob3VsZCBhbHNvIGV4aXQgaWYgdGhlIGBpcHZzLSZndDtlbmFibGVgIGZsYWcgaXMgc2V0IHRvIGZhbHNlLiBVc2luZyBgUkVBRF9PTkNFYCBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlIGVuYWJsaW5nIHZhcmlhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgY29uY3VycmVudGx5IGFuZCBjb3VsZCBiZSBjYWNoZWQgYnkgdGhlIHRocmVhZCBsb2NhbGx5LCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSByYWNlIGNvbmRpdGlvbiBpZiBub3QgYWRkcmVzc2VkIGNvcnJlY3RseS4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHRoZSB0aHJlYWQgY29udGludWluZyB0byBydW4gd2hlbiBpdCBzaG91bGRuJiMzOTt0LiBNYWtlcyBwZXJmZWN0IHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBhcmVhIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRvdXQ6XG4gMTcxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxNzI6XHR9XG4gMTczOlx0XG4gMTc0Olx0c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcbiAxNzU6XHR7XG4gMTc2Olx0XHRzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkID0gZGF0YTtcbiAxNzc6XHRcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0ga2QtXHUwMDNlaXB2cztcbiAxNzg6XHRcdGludCByb3cgPSBrZC1cdTAwM2Vlc3Rfcm93O1xuIDE3OTpcdFx0dW5zaWduZWQgbG9uZyBub3c7XG4gMTgwOlx0XHRpbnQgaWQgPSBrZC1cdTAwM2VpZDtcbiAxODE6XHRcdGxvbmcgZ2FwO1xuIDE4MjpcdFxuIDE4MzpcdFx0aWYgKGlkIFx1MDAzZSAwKSB7XG4gMTg0Olx0XHRcdGlmICghaXB2cy1cdTAwM2Vlc3RfY2hhaW5fbWF4KVxuIDE4NTpcdFx0XHRcdHJldHVybiAwO1xuIDE4NjpcdFx0fSBlbHNlIHtcbiAxODc6XHRcdFx0aWYgKCFpcHZzLVx1MDAzZWVzdF9jaGFpbl9tYXgpIHtcbiAxODg6XHRcdFx0XHRpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcbiAxODk6XHRcdFx0XHQvKiBjb21taXQgZXN0X2NhbGNfcGhhc2UgYmVmb3JlIHJlYWRpbmcgZXN0X2dlbmlkICovXG4gMTkwOlx0XHRcdFx0c21wX21iKCk7XG4gMTkxOlx0XHRcdH1cbiAxOTI6XHRcbiAxOTM6XHRcdFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXG4gMTk0Olx0XHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKSB7XG4gMTk1Olx0XHRcdFx0aXBfdnNfZXN0X2NhbGNfcGhhc2UoaXB2cyk7XG4gMTk2Olx0XHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKSlcbiAxOTc6XHRcdFx0XHRcdHJldHVybiAwO1xuIDE5ODpcdFx0XHR9XG4gMTk5Olx0XHR9XG4gMjAwOlx0XG4gMjAxOlx0XHR3aGlsZSAoMSkge1xuIDIwMjpcdFx0XHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaGxpc3RfZW1wdHkoXHUwMDI2aXB2cy1cdTAwM2Vlc3RfdGVtcF9saXN0KSlcbiAyMDM6XHRcdFx0XHRpcF92c19lc3RfZHJhaW5fdGVtcF9saXN0KGlwdnMpO1xuIDIwNDpcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lETEUpO1xuIDIwNTpcdFx0XHRpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKVxuIDIwNjpcdFx0XHRcdGJyZWFrO1xuIDIwNzpcdFxuIDIwODpcdFx0XHQvKiBiZWZvcmUgZXN0aW1hdGlvbiwgY2hlY2sgaWYgd2Ugc2hvdWxkIHNsZWVwICovXG4gMjA5Olx0XHRcdG5vdyA9IGppZmZpZXM7XG4gMjEwOlx0XHRcdGdhcCA9IGtkLVx1MDAzZWVzdF90aW1lciAtIG5vdztcbiAyMTE6XHRcdFx0aWYgKGdhcCBcdTAwM2UgMCkge1xuIDIxMjpcdFx0XHRcdGlmIChnYXAgXHUwMDNlIElQVlNfRVNUX1RJQ0spIHtcbiAyMTM6XHRcdFx0XHRcdGtkLVx1MDAzZWVzdF90aW1lciA9IG5vdyAtIElQVlNfRVNUX1RJQ0s7XG4gMjE0Olx0XHRcdFx0XHRnYXAgPSBJUFZTX0VTVF9USUNLO1xuIDIxNTpcdFx0XHRcdH1cbiAyMTY6XHRcdFx0XHRzY2hlZHVsZV90aW1lb3V0KGdhcCk7XG4gMjE3Olx0XHRcdH0gZWxzZSB7XG4gMjE4Olx0XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIDIxOTpcdFx0XHRcdGlmIChnYXAgXHUwMDNjIC04ICogSVBWU19FU1RfVElDSylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSVBWUyBFc3RpbWF0b3IgS3RocmVhZCBGdW5jdGlvbmFsIEZpeCAtIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBzb21ldGhpbmcgaGVyZSB0aGF0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIGZpeCBmb3IgdGhvc2UgSVBWUyBlc3RpbWF0b3Iga3RocmVhZHMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoZXNlIHRoaW5ncyBhcmUgdXN1YWxseSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IGt0aHJlYWRzIHByZXNlbnQgc29tZSB1bmlxdWUgY2hhbGxlbmdlcyBpbiBob3cgd2UgYXBwcm9hY2ggdGhpcywgc28gbGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4KClRoZSBtYWluIGt0aHJlYWQgaXRzZWxmLCBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCwgaXNuJiMzOTt0IGRpcmVjdGx5IGNhbGxhYmxlIHRocm91Z2ggc3lzY2FsbHMsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5kaXJlY3QgY2FsbHMuIFRoZXJlZm9yZSBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0JiMzOTtzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgYW5kIHRob3NlIGZ1bmN0aW9ucywgbmFtZWx5OiBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAsIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgd2hpY2ggd2lsbCBoYXZlIHRvIGJlIG15IGVudHJ5IHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYWxsIHRob3NlIHJlbGF0ZWQgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIGZ1bmN0aW9ucy4KCkkgc2hvdWxkIGFsc28gZXhhbWluZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IHRyaWdnZXIgdGhlIGt0aHJlYWQmIzM5O3MgZXhlY3V0aW9uLiBgaXBfdnNfYWRkX3NlcnZpY2VgLCBhbmQgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBtZS4gSSBjYW4gaW52ZXN0aWdhdGUgdGhlbSB0byBzZWUgaWYgdGhleSYjMzk7cmUgZ29vZCBmb2N1cyBzeW1ib2xzLiBGdW5jdGlvbnMgbGlrZSBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgIGFyZSBhbHNvIGNydWNpYWwgc2luY2UgdGhleSBoYW5kbGUgY2xlYW51cCBzY2VuYXJpb3MuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgY2FyZWZ1bCBhbmFseXNpcywgYnV0IHRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IHBpZWNlcyB0byBzdGFydCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDAyPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0MzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQzNTpcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdmMtXHUwMDNlaXB2cywgXHUwMDI2ZGVzdC1cdTAwM2VzdGF0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE0NzE9aXBfdnNfYWRkX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTUyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNTIzOlx0XHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVx1MDAzZWlwdnMsIFx1MDAyNmRlc3QtXHUwMDNlc3RhdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1MjQtXHRcdC8qIE9uIGVycm9yIHB1dCBiYWNrIGRlc3QgaW50byB0aGUgdHJhc2ggKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTcwOT1pcF92c19hZGRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODMzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE4MzQ6XHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3IoaXB2cywgXHUwMDI2c3ZjLVx1MDAzZXN0YXRzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODM1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDk5NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBfdnNfY29udHJvbF9uZXRfaW5pdF9zeXNjdGwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxMjMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTEyNDpcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihpcHZzLCBcdTAwMjZpcHZzLVx1MDAzZXRvdF9zdGF0cy1cdTAwM2VzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MTI1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDA0PXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5Ni0vKiBTdGFydCBlc3RpbWF0aW9uIGZvciBzdGF0cyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NzppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBFc3RpbWF0b3IgTGlmZWN5Y2xlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgSVBWUyBlc3RpbWF0b3IgZnVuY3Rpb25zLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gd2F0Y2gg4oCTIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIG5ldyBkZXN0aW5hdGlvbnMgb3Igc2VydmljZXMgYXJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0uIENvbnZlcnNlbHksIGBpcF92c19zdG9wX2VzdGltYXRvcmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFuZCBpcyBjYWxsZWQgd2hlbiB0aGV5JiMzOTtyZSBkZWxldGVkLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXBfdnNfYWRkX3NlcnZpY2VgLCBhbmQgYGlwX3ZzX2FkZF9kZXN0YCBhcmUgbGlrZWx5IHRoZSBtb3N0IHBlcnRpbmVudCBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgY29udHJvbCBmbG93IGhlcmUuCgpJIGFsc28gc2VlIHRoYXQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGlzIHRyaWdnZXJlZCBieSBzeXNjdGwgbW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgd29ydGggY29uc2lkZXJpbmcgc2luY2UgaXQgcHJvYmFibHkgaW5kaWNhdGVzIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UuIEdpdmVuIHRoYXQgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHN5c2N0bHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBlc3RpbWF0b3IsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb24gdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIHN5c2N0bCB2YXJpYWJsZXMgbm93IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBlc3RpbWF0b3IgaXMgaW5mbHVlbmNlZCBieSB0aGUgdXNlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2c19wcm9jX2VzdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDIwPXByb2NfZG9fc3luY19wb3J0cyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI0NDM6c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X2NwdW1hc2tfc2V0KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0NDQtXHRcdFx0XHQgICAgIHZvaWQgKmJ1ZmZlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ4MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDgyOnN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX2dldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDgzLVx0XHRcdFx0ICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MDY6c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X2NwdWxpc3QoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA3LVx0XHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MTctXHRcdC8qIHByb2Nfc3lzX2NhbGxfaGFuZGxlcigpIGFwcGVuZHMgdGVybWluYXRvciAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MTg6XHRcdHJldCA9IGlwdnNfcHJvY19lc3RfY3B1bWFza19zZXQodGFibGUsIGJ1ZmZlcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUxOS1cdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MjItXHRcdC8qIHByb2Nfc3lzX2NhbGxfaGFuZGxlcigpIGFsbG9jYXRlcyAxIGJ5dGUgZm9yIHRlcm1pbmF0b3IgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTIzOlx0XHRyZXQgPSBpcHZzX3Byb2NfZXN0X2NwdW1hc2tfZ2V0KHRhYmxlLCBidWZmZXIsICpsZW5wICYjNDM7IDEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MjQtXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MzItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUzMzpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfbmljZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MzQtXHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjY1NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c192YXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODM1Olx0XHQucHJvY19oYW5kbGVyXHQ9IGlwdnNfcHJvY19lc3RfY3B1bGlzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVx0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0MC1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4NDE6XHRcdC5wcm9jX2hhbmRsZXJcdD0gaXB2c19wcm9jX2VzdF9uaWNlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NDItXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSVBWUyBFc3RpbWF0b3IgTW9kdWxlIC0gS2V5IEZ1bmN0aW9uYWxpdHkgYW5kIEVudHJ5IFBvaW50cyoqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIElQVlMgZXN0aW1hdG9yIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpcHZzX3Byb2NfZXN0X2NwdWxpc3RgIGFuZCBgaXB2c19wcm9jX2VzdF9uaWNlYCBsb29rIGxpa2Ugc29saWQgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbSByZWdhcmRpbmcgdGhlIGVzdGltYXRvci4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4KCk5vdywgbGV0JiMzOTtzIGNvbnNvbGlkYXRlIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZXN0aW1hdG9yIGZ1bmN0aW9uYWxpdHkuIFdlIG5lZWQgdG8gY3JlYXRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZXN0aW1hdG9yJiMzOTtzIG9wZXJhdGlvbnM6CgoqICAgSSBuZWVkIHRvIGxvb2sgYXQgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGFzIHRoZXkgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBwb2ludHMuIFRoZXNlIGFyZSB0aGUgaG9va3MgZm9yIHRoZSBvdmVyYWxsIGVzdGltYXRvciBsaWZlY3ljbGUuCiogICBJIGFsc28gc2hvdWxkIGluY2x1ZGUgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGluIHRoZSBmb2N1cyBncm91cC4gVGhpcyBpcyBsaWtlbHkgaG93IG5ldyBjb25maWd1cmF0aW9ucyBhcmUgaW50ZWdyYXRlZC4KKiAgIE9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50cyBmcm9tIGJlZm9yZSwgYGlwdnNfcHJvY19lc3RfY3B1bGlzdGAgYW5kIGBpcHZzX3Byb2NfZXN0X25pY2VgLCBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBDUFUgbGlzdCBhbmQgbmljZSB2YWx1ZXMgYXJlIG1hbmFnZWQgb3IgY29uZmlndXJlZC4KKiAgIEZpbmFsbHksIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgYGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbmAuIElmIGl0JiMzOTtzIHRoZXJlLCB0aGVuIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGV4cGxvcmluZyBob3cgdGhlIGFjdHVhbCBlc3RpbWF0aW9uIHByb2Nlc3MgaXMgaW5pdGlhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHZzX3Byb2NfcnVuX2VzdGltYXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNTMzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9uaWNlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NjItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjU2MzpzdGF0aWMgaW50IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NjQtXHRcdFx0XHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjY1NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c192YXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MjgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODI5Olx0XHQucHJvY19oYW5kbGVyXHQ9IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODMwLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIEVzdGltYXRvciBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIElQVlMgZXN0aW1hdG9yIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGUgaXMgdGhhdCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYCBpcyBpbmRlZWQgcHJlc2VudCwgYXMgZXhwZWN0ZWQuIE5vdywgd2hhdCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/IExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgb25lIGFwcGVhcnMgdG8gYmUgYElQX1ZTYC4gQXJlIHRoZXJlIGFueSB1bmRlcmx5aW5nIGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTYD8gWWVzLCBpdCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYC4gQW5kIGBJUF9WU2AgaXRzZWxmIGlzIHRyaXN0YXRlLCBzbyB0aGF0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZGVlcCBkaXZlIGludG8gdGhlIHBhdGNoIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm90aGluZyBlbHNlIGlzIGluIHBsYXkuIFRoZSBwYXRjaCB0YXJnZXRzIGBpcF92c19lc3QuY2AsIG1vZGlmeWluZyBrZXkgZnVuY3Rpb25zOiBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgLCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3lgLgoKYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgZnJvbSBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgIGFuZCBgaXBfdnNfZXN0X2FkZF9rdGhyZWFkYC4gRnVydGhlcm1vcmUsIGBpcF92c19lc3RfYWRkX2t0aHJlYWRgIGlzIGludm9rZWQgZnJvbSBgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3JgLCB3aGljaCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgZXN0aW1hdG9ycyBhcmUgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgYW5kIGBpcF92c19zdG9wX2VzdGltYXRvcmAuIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBpcyBjYWxsZWQgd2hlbiBjZXJ0YWluIHN5c2N0bHMgYXJlIG1vZGlmaWVkLiBUaGUgcmVsZXZhbnQgc3lzY3RscyBhcmUgYGVzdF9jcHVsaXN0YCwgYGVzdF9uaWNlYCwgYW5kIGBydW5fZXN0aW1hdGlvbmAuCgpUaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiBhcmU6IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXB2c19wcm9jX2VzdF9jcHVsaXN0YCwgYGlwdnNfcHJvY19lc3RfbmljZWAsIGFuZCwgb2YgY291cnNlLCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGlzIHN0YXRpYyBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz00MDQ9c3RhdGljIGludCBpcF92c19lbnF1ZXVlX2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk2LS8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIHN0YXRzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NDk3OmludCBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkV2b2x2aW5nIENvbmNlcHRzIGluIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbm90IHNlZWluZyB0aGlzIGFzIGEgc3RhdGljIHByb2JsZW0uIEl0JiMzOTtzIGR5bmFtaWMsIGNvbnN0YW50bHkgY2hhbmdpbmcuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgbXkgY3VycmVudCB0aGlua2luZy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgdGhlIHN5c3RlbSYjMzk7cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgdmFyeSwgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgdmFyaWFiaWxpdHkgaW4gbWluZC4KCkFuZCBub3cgSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmcgYWJvdXQgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpcyBsaWtlbHkgY3J1Y2lhbCBoZXJlLCBhbmQgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgaXQgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvdXRwdXRzLCBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3MgcmVzcG9uc2UgdG8gY2hhbmdlcy4gVGhhdCBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzIGEgbHluY2hwaW4uIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NTI4PXN0YXRpYyB2b2lkIGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3koc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQwLS8qIFVubGluayBlc3RpbWF0b3IgZnJvbSBjaGFpbiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjU0MTp2b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTU0Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmUsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgTmV0d29yayBMb2FkIEJhbGFuY2luZyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBjb25jZXB0IGlzbiYjMzk7dCBmaXhlZCwgaXQmIzM5O3MgY29uc3RhbnRseSBzaGlmdGluZy4gVGhpcyBwYXJ0aWN1bGFyIGlzc3VlIGRlbWFuZHMgYSBkeW5hbWljIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgaXQuIE5vdywgYXMgSSBkaXZlIGRlZXBlciwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGNvbXBvbmVudCB3aXRoaW4gdGhlIExpbnV4IFZpcnR1YWwgU2VydmVyIChMVlMpIHJlYWxtLiBUaGUgcXVlc3Rpb24gdGhhdCBoYXMgc3BydW5nIHRvIG1pbmQgaXMsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgd2hlbiBjb25zaWRlcmluZyBgaXB2c19wcm9jX2VzdF9jcHVsaXN0YD8gV2hhdCBkb2VzIHRoYXQgaW1wbHkgaW4gdGhpcyBjb250ZXh0PyBMZXQmIzM5O3MgY29uc2lkZXIgdGhlIHBvc3NpYmxlIGF2ZW51ZXMgb2YgaW52ZXN0aWdhdGlvbiBpbiB0aGF0IHJlZ2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2c19wcm9jX2VzdF9jcHVsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ4Mj1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19nZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUwNjpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bGlzdChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MDctXHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjY1NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c192YXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODM1Olx0XHQucHJvY19oYW5kbGVyXHQ9IGlwdnNfcHJvY19lc3RfY3B1bGlzdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IFVuZGVyc3RhbmRpbmcgdGhlIEVzdGltYXRvciYjMzk7cyBPcmlnaW5zKioKClJpZ2h0LCBzbyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgZGVmaW5pdGVseSBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHJlYWNoYWJsZSBpdCBpcy4gQWhhLCBpdCYjMzk7cyBhIGBzeXNjdGxgIGhhbmRsZXIsIHNvIGl0ICpzaG91bGQqIGJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYHByb2Nfc3lzX2NhbGxfaGFuZGxlcmAgaW50ZXJmYWNlLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgZ2l2ZXMgbWUgcGF1c2UuIEl0IHJhaXNlcyB0aGUgcG9zc2liaWxpdHkgb2YgaW5saW5pbmcgb3IsIHdvcnNlLCBubyByZWFkaWx5IGlkZW50aWZpYWJsZSBzeW1ib2wgYWRkcmVzcy4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggaXQuIEluc3RlYWQgb2YgZGlnZ2luZyB0b28gZGVlcCByaWdodCBub3csIGxldCBtZSBwaXZvdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgaXBfdnNfYWRkX3NlcnZpY2VgIGFuZCBgaXBfdnNfYWRkX2Rlc3RgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBjcmVhdGluZyB0aGVzZSBlc3RpbWF0b3JzLCByaWdodD8gSXQgbWlnaHQgYmUgZWFzaWVyIGFuZCBjbGVhbmVyIHRvIGdvIHRocm91Z2ggdGhvc2UgcGF0aHMgaWYgcG9zc2libGUuIFRoZXkmIzM5O3JlIHByb2JhYmx5IG1vcmUgd2VsbC1kZWZpbmVkIGFuZCBkb2N1bWVudGVkIGludGVyZmFjZXMuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgaWYgSSBjYW4gbGV2ZXJhZ2UgdGhlbSBpbnN0ZWFkIG9mIHdyZXN0bGluZyB3aXRoIHRoaXMgcG90ZW50aWFsbHkgb3BhcXVlIHN0YXRpYyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2FkZF9zZXJ2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTcwOD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTcwOTppcF92c19hZGRfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE3MTAtXHRcdCAgc3RydWN0IGlwX3ZzX3NlcnZpY2UgKipzdmNfcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzQyMz1kb19pcF92c19zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IHB0ciwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUzOC1cdFx0ZWxzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM1Mzk6XHRcdFx0cmV0ID0gaXBfdnNfYWRkX3NlcnZpY2UoaXB2cywgXHUwMDI2dXN2YywgXHUwMDI2c3ZjKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNTQwLVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDYzND1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfc2V0X2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NzMyLVx0XHRpZiAoc3ZjID09IE5VTEwpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDczMzpcdFx0XHRyZXQgPSBpcF92c19hZGRfc2VydmljZShpcHZzLCBcdTAwMjZ1c3ZjLCBcdTAwMjZzdmMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ3MzQtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBpcF92c19hZGRfc2VydmljZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIGBpcF92c19hZGRfc2VydmljZWAgaXMsIGFzIEkgcmVjYWxsLCBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBleHBlY3RhdGlvbiBmb3IgaW50ZXJuYWwsIG1vZHVsZS1zcGVjaWZpYyBmdW5jdGlvbnMg4oCTIGl0IG1ha2VzIHNlbnNlIGZyb20gYW4gZW5jYXBzdWxhdGlvbiBzdGFuZHBvaW50LiBCdXQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBob2xkIG9uLCB3aGF0IGFib3V0IGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgPyBUaGUgbmFtZXMgc291bmQgaW50aW1hdGVseSByZWxhdGVkIHRvIHRoZSBzYW1lIHN1YnN5c3RlbSwgYnV0IEkgKnRoaW5rKiB0aG9zZSBhcmUgZXhwb3NlZCBvdXRzaWRlIHRoZSBtb2R1bGUuIElmIHRoZXkgKmFyZSogZXhwb3J0ZWQsIHRoYXQgaW1wbGllcyBhIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHBvdGVudGlhbGx5IG9mZmVyaW5nIGV4dGVybmFsbHkgY2FsbGFibGUgZnVuY3Rpb25hbGl0eS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBhY3R1YWwgc3ltYm9sIHZpc2liaWxpdHkgb2YgdGhvc2UgbGFzdCB0d28uIE5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGVzdGltYXRvcnMgaW4gSVBWUyBhcmUgc3VwcG9zZWQgdG8gd29yayB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW50byB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIElQVlMgQ29uZmlndXJhdGlvbiBFbnRyeSBQb2ludHMqKgoKQWxyaWdodCwgc28gdGhlIHN5bWJvbHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmVuJiMzOTt0ICpleHBvcnRlZCosIGJ1dCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG5vdCBzdGF0aWMgZWl0aGVyLCB3aGljaCBnaXZlcyB0aGVtIGEgdW5pcXVlIHN5bWJvbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGhvbWUgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIElQVlMgY29uZmlndXJhdGlvbiDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBlbnRyeSBwb2ludHMsIHJpZ2h0PyBMZXQmIzM5O3MgY2hlY2sgYGRvX2lwX3ZzX3NldF9jdGxgIGFuZCBgaXBfdnNfZ2VubF9zZXRfY21kYC4gVGhvc2UgYXJlICpoaWdobHkqIGxpa2VseSB0byBiZSB0aGUgY29yZSBmdW5jdGlvbnMgd2hlcmUgSVBWUyBjb25maWd1cmF0aW9uIGNvbW1hbmRzIHVsdGltYXRlbHkgZ2V0IHByb2Nlc3NlZC4gVGhleSYjMzk7cmUgd2hlcmUgSSYjMzk7ZCBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgc3RhdGUgaXMgYmVpbmcgbWFuaXB1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2lwX3ZzX3NldF9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNDIyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNDIzOmRvX2lwX3ZzX3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgcHRyLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM0MjQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zOTAyPXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgaXBfdnNfc29ja29wdHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM5MDUtXHQuc2V0X29wdG1heFx0PSBJUF9WU19TT19TRVRfTUFYJiM0MzsxLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM5MDY6XHQuc2V0XHRcdD0gZG9faXBfdnNfc2V0X2N0bCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zOTA3LVx0LmdldF9vcHRtaW5cdD0gSVBfVlNfQkFTRV9DVEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgSVBWUyBDb250cm9sIE1lY2hhbmlzbXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBkb19pcF92c19zZXRfY3RsYCBpcyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgZmluZSwgaXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQuIEhvd2V2ZXIsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBgaXBfdnNfZ2VubF9zZXRfY21kYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSYjMzk7cmUgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zIHdpdGhpbiBJUFZTLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhbnkgZGlzdGluY3Rpb24gb3IgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQXJlIHdlIGNyZWF0aW5nIHJlZHVuZGFuY3k/IElzIHRoZXJlIGEgcmVhc29uIHdoeSBvbmUgaXMgZGVjbGFyZWQgc3RhdGljIGFuZCB0aGUgb3RoZXIgaXNuJiMzOTt0PyBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciBvbmUgYmVpbmcgZ2VuZXJpYyBuZXRsaW5rIGJhc2VkLCB3aGlsc3QgdGhlIG90aGVyIGlzIHN0YXRpY2FsbHkgZGVjbGFyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19nZW5sX3NldF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00NjA5PXN0YXRpYyBpbnQgaXBfdnNfZ2VubF9zZXRfZGFlbW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MzMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDYzNDpzdGF0aWMgaW50IGlwX3ZzX2dlbmxfc2V0X2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MzUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgaXBfdnNfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg2OS1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0ODcwOlx0XHQuZG9pdFx0PSBpcF92c19nZW5sX3NldF9jbWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg3MS1cdH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4NzUtXHRcdC5mbGFnc1x0PSBHRU5MX0FETUlOX1BFUk0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg3NjpcdFx0LmRvaXRcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ4NzctXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODgxLVx0XHQuZmxhZ3NcdD0gR0VOTF9BRE1JTl9QRVJNLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ4ODI6XHRcdC5kb2l0XHQ9IGlwX3ZzX2dlbmxfc2V0X2NtZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODgzLVx0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg5NC1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0ODk1Olx0XHQuZG9pdFx0PSBpcF92c19nZW5sX3NldF9jbWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg5Ni1cdH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5MDAtXHRcdC5mbGFnc1x0PSBHRU5MX0FETUlOX1BFUk0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkwMTpcdFx0LmRvaXRcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5MDItXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTA2LVx0XHQuZmxhZ3NcdD0gR0VOTF9BRE1JTl9QRVJNLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ5MDc6XHRcdC5kb2l0XHQ9IGlwX3ZzX2dlbmxfc2V0X2NtZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTA4LVx0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkzNi1cdFx0LmZsYWdzXHQ9IEdFTkxfQURNSU5fUEVSTSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0OTM3Olx0XHQuZG9pdFx0PSBpcF92c19nZW5sX3NldF9jbWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkzOC1cdH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5NTQtXHRcdC5mbGFnc1x0PSBHRU5MX0FETUlOX1BFUk0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk1NTpcdFx0LmRvaXRcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ5NTYtXHR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYwLVx0XHQuZmxhZ3NcdD0gR0VOTF9BRE1JTl9QRVJNLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ5NjE6XHRcdC5kb2l0XHQ9IGlwX3ZzX2dlbmxfc2V0X2NtZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYyLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgZGVzaWduIHJlbGllcyBoZWF2aWx5IG9uIHN0YXRpYyBkZWNsYXJhdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5IGFyZSB0aGUgb25lcyBsaWtlbHkgdG8gYmUgbW9yZSBpbnRlcmVzdGluZyBmcm9tIGEgYnJvYWRlciBkZXNpZ24gcGVyc3BlY3RpdmUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNvZGViYXNlLCB0aGUgb3RoZXIgZnVuY3Rpb25zIGxpc3RlZCBhcmUgaW5oZXJlbnRseSBzdGF0aWMsIHdoaWNoIGxpbWl0cyB0aGVpciB1dGlsaXR5LgoKSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBmdW5jdGlvbnMgYXMgbm9uLXN0YXRpYzogYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLiBJdHMgbm9uLXN0YXRpYyBuYXR1cmUgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLCBwZXJoYXBzIGZvciBjb25maWd1cmF0aW9uIG9yIGNvbnRyb2wuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgZG9pbmcuIERldGVybWluaW5nIGlmIGl0cyBub24tc3RhdGljIHN0YXR1cyBpcyBhIGtleSBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGNvZGUmIzM5O3Mgb3ZlcmFsbCBtYWludGFpbmFiaWxpdHkgYW5kIGV4dGVuc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE3ND1zdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjIzODp2b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTaXR1YXRpb24qKgoKUmlnaHQsIHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIHNpdHVhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgdGhyZWFkcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlcm1pbmF0aW9uIG9mIHRoZXNlIHByb2Nlc3NlcyBpcyBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byBleGFtaW5lIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYCBpbiBkZXRhaWwuIFRoZXNlIGFyZSBsaWtlbHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5vbi1zdGF0aWMgYmVoYXZpb3Igd2UmIzM5O3JlIG9ic2VydmluZy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgdGVhcmRvd24gYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsb2FkIGJhbGFuY2luZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDM9c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODQtXHRcdFx0XHRzdGFydCA9IGtkLVx1MDAzZW5lZWRlZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODU6XHRcdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBpcF92c19lc3Rfa3RocmVhZF9zdGFydChpcHZzLCBrZCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg2LVx0XHRcdFx0cmVwZWF0ID0gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MjM4PXZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTItLyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjUzOmludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTQtXHRcdFx0ICAgIHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgRm9jdXM6IFN0YXRpYyB2cy4gRHluYW1pYyBJUFZTIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhlIHN5bWJvbHMgaW4gcXVlc3Rpb24gKmFyZSogZHluYW1pYywgbm90IHN0YXRpYy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMgZm9yIGFuYWx5c2lzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgY29yZSBvbmVzOgoKKiAgIGBpcF92c19zdGFydF9lc3RpbWF0b3JgCiogICBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgCiogICBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAKKiAgIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAKKiAgIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYAoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbXVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIGtub3cgYElQX1ZTYCByZWxpZXMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYC4gSSByZWNhbGwgYE5FVEZJTFRFUmAgaXMgdHlwaWNhbGx5IGVuYWJsZWQgaW4gc3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBleHBsaWNpdGx5IGxpc3QgYElQX1ZTYC4gTGV0IG1lIHZlcmlmeSBpZiBgSVBfVlNgIGhhcyBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQmIzM5O3MgYmVzdCB0byBiZSB0aG9yb3VnaCBhdCB0aGlzIHN0YWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yOT1jb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMxOlx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXHRJUF9WU19ORkNUXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQwLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHBlcnNpc3RlbmNlIGVuZ2luZVwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0ODpcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNTQ6XHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzMwCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgRXN0aW1hdG9yIFBhdGNoKioKCk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgZm9jdXNpbmcgb24gYElQX1ZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhpcyBwYXRjaCwgYXQgbGVhc3QgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIGlzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkIHRvIGNvbnNpZGVyLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWwsIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIHRoZSBJUFZTIGVzdGltYXRvciYjMzk7cyBrdGhyZWFkIG1hbmFnZW1lbnQuIExvb2tzIGxpa2UgaXQmIzM5O3MgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHByb2JsZW0gd2hlbiBkZWFsaW5nIHdpdGggYGt0aHJlYWRfc3RvcGAuIFRoZSBmaXggaW5jb3Jwb3JhdGVzIGBnZXRfdGFza19zdHJ1Y3RgIGZvciBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0aGUgYXNzb2NpYXRlZCBga3RocmVhZF9zdG9wX3B1dGAgY2FsbC4gRXhjZWxsZW50LCBjbGFzc2ljIGNvbmN1cnJlbmN5IGZpeC4gV2UmIzM5O3JlIHNlZWluZyBjaGVja3MgZm9yIGBrdGhyZWFkX3Nob3VsZF9zdG9wKClgIGFuZCBgIVJFQURfT05DRShpcHZzLSZndDtlbmFibGUpYCBhcyB3ZWxsLCB3aGljaCBpcyBnb29kLiBFbnN1cmVzIHRoZSBrdGhyZWFkIGV4aXRzIHByb3Blcmx5IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVGhpcyBjaGFuZ2UgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IHpvbmUgaW4gb24gdGhlc2Ugc3ltYm9sczogYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYC4gVGhvc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBleGl0IHBvaW50cyBmb3IgZnV6emluZy4gVGhleSYjMzk7cmUgd2hlcmUgd2Ugc2hvdWxkIGJlIHByb2JpbmcgZm9yIHRoZSB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgZml4aW5nIHRoaXMgSVBWUyBlc3RpbWF0b3Iga3RocmVhZCBpc3N1ZS4gVGhlIHNvbHV0aW9uIHJldm9sdmVzIGFyb3VuZCByZWZlcmVuY2UgY291bnRpbmfigJRwcmV2ZW50aW5nIHRoYXQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW/igJRhbmQgYWRkaW5nIGFuIGVhcmx5IGV4aXQgY29uZGl0aW9uIHRvIHRoZSBrdGhyZWFkIGl0c2VsZi4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsLCBjb3JlIGNoYW5nZSB0byBJUFZTLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRoZSB1c3VhbCBuZXRsaW5rIGFuZCBzeXNjdGwgaW50ZXJmYWNlcy4KClRpbWUgdG8gY2FsbCB0aGUgdGVhbSBhbmQgc2V0IHRoZSByZXN1bHRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfc3RvcF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zdGFydF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfc3RvcF9lc3RpbWF0b3ImIzM0OywKICAgICYjMzQ7aXBfdnNfZXN0X3JlbG9hZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdGFydCYjMzQ7LAogICAgJiMzNDtpcF92c19lc3Rfa3RocmVhZF9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA2Ljk0NTg5ODEwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzExODI5NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3RhcnRfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19zdG9wX2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSVBWUyBlc3RpbWF0b3Iga3RocmVhZCBtYW5hZ2VtZW50IGJ5IGFkZGluZyByZWZlcmVuY2UgY291bnRpbmcgKGdldF90YXNrX3N0cnVjdCBhbmQga3RocmVhZF9zdG9wX3B1dCkgYW5kIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gdGhlIGt0aHJlYWQgZnVuY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUFZTIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUFZTIG5ldGxpbmsgYW5kIHN5c2N0bCBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZXN0aW1hdG9yIHN0YXJ0L3N0b3AgYW5kIHJlbG9hZCBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA2Ljk0NTkxNTI5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4NzI4ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTY0MDJmNTNkYWZhMzMxZmM2YTUzM2ZjZWRmYzk3NjkxYjkzNGZmZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMDoyMDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcXG5pbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1xcbkBAIC0xOTEsOCArMTkxLDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGt0aHJlYWQgMCB3aWxsIGhhbmRsZSB0aGUgY2FsYyBwaGFzZSAqL1xcbi1cXHRcXHRpZiAoaXB2cy1cXHUwMDNlZXN0X2NhbGNfcGhhc2UpXFxuK1xcdFxcdGlmIChpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSkge1xcbiBcXHRcXHRcXHRpcF92c19lc3RfY2FsY19waGFzZShpcHZzKTtcXG4rXFx0XFx0XFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXFx1MDAzZWVuYWJsZSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHdoaWxlICgxKSB7XFxuQEAgLTI3MCw2ICsyNzMsNyBAQCBpbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuIFxcdFxcdGtkLVxcdTAwM2V0YXNrID0gTlVMTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4rXFx0Z2V0X3Rhc2tfc3RydWN0KGtkLVxcdTAwM2V0YXNrKTtcXG4gXFxuIFxcdHNldF91c2VyX25pY2Uoa2QtXFx1MDAzZXRhc2ssIHN5c2N0bF9lc3RfbmljZShpcHZzKSk7XFxuIFxcdGlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKVxcbkBAIC0yODYsNyArMjkwLDcgQEAgdm9pZCBpcF92c19lc3Rfa3RocmVhZF9zdG9wKHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuIHtcXG4gXFx0aWYgKGtkLVxcdTAwM2V0YXNrKSB7XFxuIFxcdFxcdHByX2luZm8oXFxcInN0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXFxcblxcXCIsIGtkLVxcdTAwM2VpZCk7XFxuLVxcdFxcdGt0aHJlYWRfc3RvcChrZC1cXHUwMDNldGFzayk7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcF9wdXQoa2QtXFx1MDAzZXRhc2spO1xcbiBcXHRcXHRrZC1cXHUwMDNldGFzayA9IE5VTEw7XFxuIFxcdH1cXG4gfVxcbkBAIC01MjYsNyArNTMwLDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcbiBcXHRpZiAoa2QpIHtcXG4gXFx0XFx0aWYgKGtkLVxcdTAwM2V0YXNrKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcInN0b3AgdW51c2VkIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXFxcblxcXCIsIGtkLVxcdTAwM2VpZCk7XFxuLVxcdFxcdFxcdGt0aHJlYWRfc3RvcChrZC1cXHUwMDNldGFzayk7XFxuK1xcdFxcdFxcdGt0aHJlYWRfc3RvcF9wdXQoa2QtXFx1MDAzZXRhc2spO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwX3ZzX3N0YXRzX2ZyZWUoa2QtXFx1MDAzZWNhbGNfc3RhdHMpO1xcbiBcXHRcXHRrZnJlZShrZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA3LjI3NTQxMDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTgzODIzMDk3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zdGFydF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTY0MDJmNTNkYWZhMzMxZmM2YTUzM2ZjZWRmYzk3NjkxYjkzNGZmZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDIwOjIwOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG5pbmRleCBhYjA5ZjUxODI5NTEyLi4wNWEyMTZhNDdiNDVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcbkBAIC0xOTEsOCArMTkxLDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRcdH1cbiBcbiBcdFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXG4tXHRcdGlmIChpcHZzLVx1MDAzZWVzdF9jYWxjX3BoYXNlKVxuK1x0XHRpZiAoaXB2cy1cdTAwM2Vlc3RfY2FsY19waGFzZSkge1xuIFx0XHRcdGlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpO1xuK1x0XHRcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIVJFQURfT05DRShpcHZzLVx1MDAzZWVuYWJsZSkpXG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0d2hpbGUgKDEpIHtcbkBAIC0yNzAsNiArMjczLDcgQEAgaW50IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxuIFx0XHRrZC1cdTAwM2V0YXNrID0gTlVMTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4rXHRnZXRfdGFza19zdHJ1Y3Qoa2QtXHUwMDNldGFzayk7XG4gXG4gXHRzZXRfdXNlcl9uaWNlKGtkLVx1MDAzZXRhc2ssIHN5c2N0bF9lc3RfbmljZShpcHZzKSk7XG4gXHRpZiAoc3lzY3RsX2VzdF9wcmVmZXJyZWRfY3B1bGlzdChpcHZzKSlcbkBAIC0yODYsNyArMjkwLDcgQEAgdm9pZCBpcF92c19lc3Rfa3RocmVhZF9zdG9wKHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXG4ge1xuIFx0aWYgKGtkLVx1MDAzZXRhc2spIHtcbiBcdFx0cHJfaW5mbyhcInN0b3BwaW5nIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cIiwga2QtXHUwMDNlaWQpO1xuLVx0XHRrdGhyZWFkX3N0b3Aoa2QtXHUwMDNldGFzayk7XG4rXHRcdGt0aHJlYWRfc3RvcF9wdXQoa2QtXHUwMDNldGFzayk7XG4gXHRcdGtkLVx1MDAzZXRhc2sgPSBOVUxMO1xuIFx0fVxuIH1cbkBAIC01MjYsNyArNTMwLDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveShzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxuIFx0aWYgKGtkKSB7XG4gXHRcdGlmIChrZC1cdTAwM2V0YXNrKSB7XG4gXHRcdFx0cHJfaW5mbyhcInN0b3AgdW51c2VkIGVzdGltYXRvciB0aHJlYWQgJWQuLi5cXG5cIiwga2QtXHUwMDNlaWQpO1xuLVx0XHRcdGt0aHJlYWRfc3RvcChrZC1cdTAwM2V0YXNrKTtcbitcdFx0XHRrdGhyZWFkX3N0b3BfcHV0KGtkLVx1MDAzZXRhc2spO1xuIFx0XHR9XG4gXHRcdGlwX3ZzX3N0YXRzX2ZyZWUoa2QtXHUwMDNlY2FsY19zdGF0cyk7XG4gXHRcdGtmcmVlKGtkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjA3LjI3NTQxMTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0OTE4MjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNgLCBhbmQgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIGtlcm5lbCB0aHJlYWQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuICBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHJlZmluaW5nIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlc3RpbWF0aW9uIHRocmVhZHMgKGBrZC1cdTAwM2V0YXNrYCBwcmVzdW1hYmx5KSB3aXRoaW4gSVBWUyBhcmUgaGFuZGxlZC5cblxuVGhlIGFkZGl0aW9uIG9mIGBnZXRfdGFza19zdHJ1Y3Qoa2QtXHUwMDNldGFzaylgIGluIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgdGhlIGZpcnN0IHNpZ24uIFRoYXQncyBnb29kIOKAkyBpdCdzIGNydWNpYWwgdG8gYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0YXNrIHN0cnVjdHVyZSB3aGVuIHlvdSdyZSB0YWtpbmcgb3duZXJzaGlwIG9mIGEgcG9pbnRlciB0byBpdC4gIFdlIG5lZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgZ2V0IGZyZWVkIG91dCBmcm9tIHVuZGVyIHVzLiAgVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYnV0IGl0J3MgZ29vZCB0byBzZWUgaXQgYmVpbmcgZXhwbGljaXRseSBhZGRyZXNzZWQuXG5cblRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZXMsIGhvd2V2ZXIsIGFyZSB0aGUgdXNlIG9mIGBrdGhyZWFkX3N0b3BfcHV0KGtkLVx1MDAzZXRhc2spYCBpbnN0ZWFkIG9mIGp1c3QgYGt0aHJlYWRfc3RvcChrZC1cdTAwM2V0YXNrKWAgaW4gYm90aCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAgYW5kIGBpcF92c19lc3Rfa3RocmVhZF9kZXN0cm95YC4gIGBrdGhyZWFkX3N0b3BfcHV0YCBpcyB0aGUgc2FmZXIgd2F5IHRvIHN0b3AgYSBrZXJuZWwgdGhyZWFkLiBJdCBub3Qgb25seSBzaWduYWxzIHRoZSB0aHJlYWQgdG8gdGVybWluYXRlIGJ1dCBhbHNvIHJlbGVhc2VzIHRoZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgdGFzay4gVGhpcyBpcyBhIG11Y2gtbmVlZGVkIGltcHJvdmVtZW50OyBvdGhlcndpc2UsIGl0J3MgdmVyeSBlYXN5IHRvIGxlYWsgdGhyZWFkcyBhbmQgbGVhayBtZW1vcnkuXG5cbkZpbmFsbHksIHRoZSBhZGRlZCBjaGVjayBmb3IgYGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKWAgd2l0aGluIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgIGluZGljYXRlcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHNodXRkb3duIGNvbmRpdGlvbiBmb3IgdGhlc2UgdGhyZWFkcy4gVGhpcyBtYWtlcyBzZW5zZTsgaXQgYWRkcyBhIGxldmVsIG9mIGdyYWNlZnVsIHNodXRkb3duIGlmIHRoZSBzeXN0ZW0gaXMgZGlzYWJsaW5nIElQVlMgb3IgaWYgYSBzdG9wIHNpZ25hbCBpcyBnaXZlbi4gIFRoZSBgUkVBRF9PTkNFYCB1c2FnZSBhbHNvIGltcGxpZXMgdGhhdCBgaXB2cy1cdTAwM2VlbmFibGVgIGlzIGEgc2hhcmVkIHZhcmlhYmxlIGFuZCB3ZSBuZWVkIGF0b21pYyBhY2Nlc3MgdG8gaXQgdG8gbWFrZSBzdXJlIHdlJ3JlIGdldHRpbmcgYW4gdXAtdG8tZGF0ZSB2YWx1ZS5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGZ1bGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBzdXNwZWN0IHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgYWxsIHJlbGF0ZXMgdG8gb3RoZXIgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoxMi41MjQ1OTY2NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODI2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjEyLjU2NjE4MjU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDY0MzM4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jaWVzIG9mIElQX1ZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgSVBfVlNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBlc3NlbnRpYWwgcHJlcmVxdWlzaXRlcyBvciBzdXBwb3J0aW5nIG1vZHVsZXMgZm9yIGBJUF9WU2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBjYXNjYWRpbmcgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgYmVmb3JlIG1vdmluZyBvbi4gV2UgY2FuJ3QgYWZmb3JkIGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgc28gYSBxdWljayBkZXBlbmRlbmN5IGNoZWNrIGlzIHBhcmFtb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRoYXQgbmVlZHMgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MTUuNzcyNjE5ODc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjM0MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcXHRJUF9WU19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBoZWxwZXJcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cXHRcXHRORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXFx0SVBfVlNfTkZDVFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MTUuODE0ODU2NzM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNTYwMjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNvbmNlcm4gaGVyZSByZXZvbHZlcyBhcm91bmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgSVBfVlNgLiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEga2VybmVsIG1vZHVsZSBjb25maWd1cmF0aW9uIG9yIGJ1aWxkIHByb2Nlc3MuIE15IHRob3VnaHQgcHJvY2VzcyBpbW1lZGlhdGVseSBqdW1wcyB0byBcImlzIGBJUF9WU2AgZnVsbHkgcmVsaWFudCBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgP1wiIFRoaXMgaXMgYSBrZXkgZGVwZW5kZW5jeSBhbmFseXNpcyBzdGVwIOKAkyBlbnN1cmluZyBhbGwgcHJlcmVxdWlzaXRlcyBhcmUgbWV0IGlzIGNyaXRpY2FsLiBJJ20gbWVudGFsbHkgZmlsaW5nIHRoYXQgYXdheSBhcyBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVzZSBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSB0aGUgdHdvIHRoYXQgYXJlIG1lbnRpb25lZCwgYXJlIGFjdHVhbGx5ICplbm91Z2gqLiBBcmUgdGhlcmUgYW55IHN1YnRsZSwgaW1wbGllZCBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGNvbnNpZGVyP1xuXG5UaGVuLCB0aGUgZm9jdXMgc2hpZnRzIHRvIHRoZSBwYXRjaCBhdCBoYW5kLiBUaGUgZmFjdCB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFyZ2V0cyBgaXBfdnNfZXN0LmNgIGlzIHNpZ25pZmljYW50LiBUaGF0IHBhcnRpY3VsYXIgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBlc3RhYmxpc2htZW50IGZvciB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIuIE5vdywgSSdtIHRoaW5raW5nLCBcIklzIHRoaXMgY29tcGlsYXRpb24gb2YgYGlwX3ZzX2VzdC5jYCBjb25kaXRpb25hbD9cIiBNZWFuaW5nLCBkb2VzIHNvbWUgb3RoZXIgbWFjcm8gb3IgY29uZmlndXJhdGlvbiBmbGFnIGNvbnRyb2wgaWYgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkPyBBIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvdWxkIGRyYXN0aWNhbGx5IGNoYW5nZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaCBpZiBpdCdzIG5vdCBhbHdheXMgYXBwbGllZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdvdWxkIGFsbG93IG1lIHRvIGtub3cgaWYgdGhpcyBmaXggaXMgcmVsZXZhbnQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gSSBhbSB3b3JraW5nIG9uLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGlkZW50aWZ5IGFsbCBwb3NzaWJsZSBidWlsZCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoxOS40MjA0NjEzODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3NzQwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTY9aXBfdnMtb2JqcyA6PVxcdGlwX3ZzX2Nvbm4ubyBpcF92c19jb3JlLm8gaXBfdnNfY3RsLm8gaXBfdnNfc2NoZWQub1xcdCAgIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTctXFx0XFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1xcdCAgIFxcdFxcdCAgIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTg6XFx0XFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXFx0XFx0XFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOS1cXHRcXHQkKGlwX3ZzX3Byb3RvLW9ianMteSkgJChpcF92cy1leHRyYV9vYmpzLXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjE5LjQ2MjI0MDM1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTc0MDA2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIEVzdGltYXRpb24gVGhyZWFkIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgZGVmaW5pdGVseSB0aWVkIGludG8gdGhlIGBpcF92cy1vYmpzYCBtb2R1bGUsIHdoaWNoIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX0lQX1ZTYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBJUFZTIGlzIHRoZSBjb3JlIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGluIHRoZSBlc3RpbWF0aW9uIHRocmVhZC5cblxuTGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkYCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCwgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgLCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX2Rlc3Ryb3lgLiBOb3csIHRoZSBpbXBvcnRhbnQgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyBuZXcgZXN0aW1hdGlvbiBsb2dpYyBpcyBpbnRyb2R1Y2VkIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBJUFZTIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCB0aGUgYnVnIGZpeGVzIGltcGxlbWVudGVkLCBvciBhbnkgb3RoZXIgY2hhbmdlcyBpbiBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoyMy4wNzk2NDMzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1OTkzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQzPXN0YXRpYyB2b2lkIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODQtXFx0XFx0XFx0XFx0c3RhcnQgPSBrZC1cXHUwMDNlbmVlZGVkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODU6XFx0XFx0XFx0aWYgKHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0KGlwdnMsIGtkKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4Ni1cXHRcXHRcXHRcXHRyZXBlYXQgPSB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNTItLyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjI1MzppbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1NC1cXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MjMuMTI3MjQ2ODI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjI2OTg0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IEt0aHJlYWQgU3RhcnR1cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQga3RocmVhZCAoYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCkgd2l0aGluIElQVlMgZ2V0cyBmaXJlZCB1cC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIGJhY2sgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhdGluZyBldmVudC4gSXQgc2VlbXMgbGlrZSBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgIGlzIHRoZSBpbW1lZGlhdGUgcGFyZW50LCBhY2NvcmRpbmcgdG8gdGhlIHNvdXJjZS4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gd2hhdCBleGFjdGx5IHRyaWdnZXJzICp0aGF0KiBoYW5kbGVyLCBgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXJgLCB3aXRoaW4gYGlwX3ZzX2N0bC5jYC4gS25vd2luZyB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc20gd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrdGhyZWFkJ3Mgcm9sZSBhbmQgaG93IGl0IGFsbCBmaXRzIGludG8gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmbG93LiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgcmVsb2FkIGxvZ2ljLCBsaWtlbHkgcmVsYXRlZCB0byBjb25maWd1cmF0aW9uIGNoYW5nZXMgb3IgcmVzb3VyY2UgY29uc3RyYWludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgdG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgbG9hZCBiYWxhbmNpbmcgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDoyNi41NDk5NDc1MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODU1MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzdF9yZWxvYWRfd29ya19oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTIzMD1zdGF0aWMgdm9pZCBkZWZlbnNlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDM6c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUxNzk9aW50IF9fbmV0X2luaXQgaXBfdnNfY29udHJvbF9uZXRfaW5pdChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjA3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo1MjA4OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfcmVsb2FkX3dvcmssIGVzdF9yZWxvYWRfd29ya19oYW5kbGVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTIwOS1cXHRpcHZzLVxcdTAwM2VzeXNjdGxfc3ZjX2xmYWN0b3IgPSBpcF92c19zdmNfZGVmYXVsdF9sb2FkX2ZhY3RvcihpcHZzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MjYuNTg5ODA3MTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODE3MjcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEZWxheWVkIFdvcmsgUXVldWUqKlxuXG5SaWdodCwgdGhpcyB3b3JrJ3MgYmVlbiBoZWxkIHVwIHNvbWV3aGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQncyBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGluIHRoZSBxdWV1ZSBgZXN0X3JlbG9hZF93b3JrYCBpcyBzaXR0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgY3VycmVudCBzdGF0ZSB3aXRoaW4gdGhlIHN5c3RlbSdzIHNjaGVkdWxpbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb24gaXMgY3JpdGljYWwg4oCTIGlzIGl0IHdhaXRpbmcgb24gYSBzcGVjaWZpYyBkZXBlbmRlbmN5LCBhIHJlc291cmNlIGxvY2ssIG9yIHNpbXBseSByZXNvdXJjZSBhdmFpbGFiaWxpdHk/IEtub3dpbmcgdGhlIHF1ZXVlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBib3R0bGVuZWNrLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZWxheSwgYW5kIHRoZSBxdWV1ZSBsb2NhdGlvbiBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjI5LjQ3MTUzNjM0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2MTkyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXN0X3JlbG9hZF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTIzMD1zdGF0aWMgdm9pZCBkZWZlbnNlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDM6c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDUtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDY6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRuc19pcHZzLCBlc3RfcmVsb2FkX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI0Ny1cXHRpbnQgZ2VuaWRfZG9uZSA9IGF0b21pY19yZWFkKFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfZ2VuaWRfZG9uZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjkyLVxcdGlmIChyZXBlYXQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI5MzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfcmVsb2FkX3dvcmssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5NC1cXHRcXHRcXHRcXHQgICBkZWxheSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NTE3OT1pbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyMDctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUyMDg6XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yaywgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MjA5LVxcdGlwdnMtXFx1MDAzZXN5c2N0bF9zdmNfbGZhY3RvciA9IGlwX3ZzX3N2Y19kZWZhdWx0X2xvYWRfZmFjdG9yKGlwdnMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUyNjQ9dm9pZCBfX25ldF9leGl0IGlwX3ZzX2NvbnRyb2xfbmV0X2NsZWFudXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTI2Ny1cXHRpcF92c19jb250cm9sX25ldF9jbGVhbnVwX3N5c2N0bChpcHZzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTI2ODpcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUyNjktI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjAtICAtIHdoZW4gY29uZmlndXJhdGlvbiAoY3B1bGlzdC9uaWNlKSBpcyBjaGFuZ2VkLCB0aGUgdGFza3MgYXJlIHJlc3RhcnRlZFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo2MTogICAgYnkgd29yayAoZXN0X3JlbG9hZF93b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy02Mi0gIC0ga3RocmVhZCB0YXNrcyBhcmUgc3RvcHBlZCB3aGlsZSB0aGUgY3B1bGlzdCBpcyBlbXB0eVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTIzOD12b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yNDgtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X2dlbmlkKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjQ5OlxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9yZWxvYWRfd29yaywgMCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjI5LjUxNDE1Nzg4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU0NDk5MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBGdW5jdGlvbiBDYWxsIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgcmVzcG9uc2libGUgZm9yIHF1ZXVpbmcgc29tZSBraW5kIG9mIHdvcmssIGxpa2VseSByZWxhdGVkIHRvIHJlbG9hZGluZyBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIElQVlMgc2V0dXAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3Mgd2hlcmUgdGhlIGJhbGwgZ2V0cyByb2xsaW5nLlwiIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyAqd2hlcmUqIHRoYXQgd29yayBpcyBpbml0aWF0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBjYWxsZXJzIHRvIGdyYXNwIHRoZSB0cmlnZ2VycyBmb3IgdGhlc2UgcmVsb2Fkcy4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdGltZXIsIGFuIGV4dGVybmFsIHNpZ25hbCwgYSBjaGFuZ2UgaW4gY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgZHVyaW5nIGEgcmVzdGFydD8gVGhpcyB3aWxsIGdpdmUgbWUgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGNhbGxpbmcgY29udGV4dCwgaW5zcGVjdCBhbnkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQsIGFuZCBzZWUgd2hhdCB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zIGFyZS4gSXQgd2lsbCBiZWNvbWUgcHJldHR5IGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MzQuNjY4NjU5NDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDcxMDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg1LVxcdFxcdC8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIGZpcnN0IHRpbWUgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTg4NjpcXHRcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODg3LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X211dGV4KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDQzPXN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDcxLVxcdGlwdnMtXFx1MDAzZWVzdF9jYWxjX3BoYXNlID0gMTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjQ3MjpcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIHRydWUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDczLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI1MzM9c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X25pY2UoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTU0LVxcdFxcdFxcdFxcdCp2YWxwID0gdmFsO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTU1OlxcdFxcdFxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NTYtXFx0XFx0XFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI1NjM9c3RhdGljIGludCBpcHZzX3Byb2NfcnVuX2VzdGltYXRpb24oY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTgxLVxcdFxcdFxcdCp2YWxwID0gdmFsO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNTgyOlxcdFxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1ODMtXFx0XFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTE3ND1zdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzNy0vKiBTY2hlZHVsZSBzdG9wL3N0YXJ0IGZvciBrdGhyZWFkIHRhc2tzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjIzODp2b2lkIGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGJvb2wgcmVzdGFydClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjM5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0zMTE9c3RhdGljIGludCBpcF92c19lc3RfYWRkX2t0aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzYyLVxcdC8qIFJlcXVlc3Qga3RocmVhZCB0byBiZSBzdGFydGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjM2MzpcXHRpcF92c19lc3RfcmVsb2FkX3N0YXJ0KGlwdnMsIGZhbHNlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMzY0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTQ5Nz1pbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUxNy1cXHRcXHRrZC1cXHUwMDNlbmVlZGVkID0gMTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6NTE4OlxcdFxcdGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnQoaXB2cywgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTUxOS1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZWVzdF9tdXRleCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NTQxPXZvaWQgaXBfdnNfc3RvcF9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zdGF0cyAqc3RhdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjA3LVxcdFxcdFxcdGtkLVxcdTAwM2VuZWVkZWQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo2MDg6XFx0XFx0XFx0aXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNjA5LVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6MzQuNzA5Mzc1Mzg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU0Mzk5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgZmxvdywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNvLCBgaXBfdnNfYWRkX3NlcnZpY2VgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChpcHZzLCB0cnVlKWAuIFRoYXQgZmlyc3QgY2FsbCBzZWVtcyB0byBzZXQgdXAgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiAgVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIHF1ZXVlcyB3b3JrLCBwcmVzdW1hYmx5IGFzeW5jaHJvbm91c2x5LiBOb3csIHRoaXMgcXVldWVkIFwid29ya1wiIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBJIHN1c3BlY3QgaXQgaXMgaGFuZGxlZCBieSB0aGUga2VybmVsIHRocmVhZC4gSSBiZXQgdGhhdCBxdWV1ZWQgd29yayBpcyB3aGF0IGtpY2tzdGFydHMgdGhlIHJlYWwgcHJvY2VzcywgYW5kIEkgdGhpbmsgaXQgY2FsbHMgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YC5cblxuVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIGtlcm5lbCB0aHJlYWQgaXMgbGF1bmNoZWQgdXNpbmcgYGt0aHJlYWRfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZSByZWFsIG1hZ2ljIHdpbGwgYmUgaGFwcGVuaW5nIHRoZXJlLiBMZXQncyBtYWtlIHN1cmUgSSBsb29rIGludG8gdGhhdCBmdW5jdGlvbiBwcm9wZXJseS4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjM4LjQ4NDgxNjk5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdH1cXG4gMjUxOlxcdFxcbiAyNTI6XFx0LyogU3RhcnQga3RocmVhZCB0YXNrIHdpdGggY3VycmVudCBjb25maWd1cmF0aW9uICovXFxuIDI1MzpcXHRpbnQgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuIDI1NDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZClcXG4gMjU1OlxcdHtcXG4gMjU2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm93O1xcbiAyNTc6XFx0XFx0aW50IHJldCA9IDA7XFxuIDI1ODpcXHRcXHRsb25nIGdhcDtcXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2aXB2cy1cXHUwMDNlZXN0X211dGV4KTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0aWYgKGtkLVxcdTAwM2V0YXNrKVxcbiAyNjM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI2NDpcXHRcXHRub3cgPSBqaWZmaWVzO1xcbiAyNjU6XFx0XFx0Z2FwID0ga2QtXFx1MDAzZWVzdF90aW1lciAtIG5vdztcXG4gMjY2OlxcdFxcdC8qIFN5bmMgZXN0X3RpbWVyIGlmIHRhc2sgaXMgc3RhcnRpbmcgbGF0ZXIgKi9cXG4gMjY3OlxcdFxcdGlmIChhYnMoZ2FwKSBcXHUwMDNlIDQgKiBJUFZTX0VTVF9USUNLKVxcbiAyNjg6XFx0XFx0XFx0a2QtXFx1MDAzZWVzdF90aW1lciA9IG5vdztcXG4gMjY5OlxcdFxcdGtkLVxcdTAwM2V0YXNrID0ga3RocmVhZF9jcmVhdGUoaXBfdnNfZXN0aW1hdGlvbl9rdGhyZWFkLCBrZCwgXFxcImlwdnMtZTolZDolZFxcXCIsXFxuIDI3MDpcXHRcXHRcXHRcXHRcXHQgIGlwdnMtXFx1MDAzZWdlbiwga2QtXFx1MDAzZWlkKTtcXG4gMjcxOlxcdFxcdGlmIChJU19FUlIoa2QtXFx1MDAzZXRhc2spKSB7XFxuIDI3MjpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGtkLVxcdTAwM2V0YXNrKTtcXG4gMjczOlxcdFxcdFxcdGtkLVxcdTAwM2V0YXNrID0gTlVMTDtcXG4gMjc0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0XFx0Z2V0X3Rhc2tfc3RydWN0KGtkLVxcdTAwM2V0YXNrKTtcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0c2V0X3VzZXJfbmljZShrZC1cXHUwMDNldGFzaywgc3lzY3RsX2VzdF9uaWNlKGlwdnMpKTtcXG4gMjc5OlxcdFxcdGlmIChzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKVxcbiAyODA6XFx0XFx0XFx0a3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKGtkLVxcdTAwM2V0YXNrLCBzeXNjdGxfZXN0X3ByZWZlcnJlZF9jcHVsaXN0KGlwdnMpKTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0cHJfaW5mbyhcXFwic3RhcnRpbmcgZXN0aW1hdG9yIHRocmVhZCAlZC4uLlxcXFxuXFxcIiwga2QtXFx1MDAzZWlkKTtcXG4gMjgzOlxcdFxcdHdha2VfdXBfcHJvY2VzcyhrZC1cXHUwMDNldGFzayk7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdG91dDpcXG4gMjg2OlxcdFxcdHJldHVybiByZXQ7XFxuIDI4NzpcXHR9XFxuIDI4ODpcXHRcXG4gMjg5OlxcdHZvaWQgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcChzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0aWYgKGtkLVxcdTAwM2V0YXNrKSB7XFxuIDI5MjpcXHRcXHRcXHRwcl9pbmZvKFxcXCJzdG9wcGluZyBlc3RpbWF0b3IgdGhyZWFkICVkLi4uXFxcXG5cXFwiLCBrZC1cXHUwMDNlaWQpO1xcbiAyOTM6XFx0XFx0XFx0a3RocmVhZF9zdG9wX3B1dChrZC1cXHUwMDNldGFzayk7XFxuIDI5NDpcXHRcXHRcXHRrZC1cXHUwMDNldGFzayA9IE5VTEw7XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdC8qIEFwcGx5IHBhcmFtZXRlcnMgdG8ga3RocmVhZCAqL1xcbiAyOTk6XFx0c3RhdGljIHZvaWQgaXBfdnNfZXN0X3NldF9wYXJhbXMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjM4LjQ4NDkxMjA4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzE3MjMzODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBUaHJlYWQgU2FmZXR5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIGNvbmN1cnJlbmN5IHByb2JsZW0gY29ubmVjdGVkIHRvIGBrdGhyZWFkX3N0b3BgLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIGluY29ycG9yYXRlIGBnZXRfdGFza19zdHJ1Y3RgIGFuZCBga3RocmVhZF9zdG9wX3B1dGAgY2FsbHMsIHdoaWNoIGlzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgdGFzayBzdHJ1Y3Qgd2l0aGluIGEga2VybmVsIHRocmVhZCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCBwcmV2ZW50aW5nIGFjY2VzcyBhZnRlciBkZWFsbG9jYXRpb24uXG5cbk5vdywgbGV0J3MgZGlzc2VjdCB0aGUgYWRkaXRpb24gd2l0aGluIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLiBJdCBzZWVtcyBsaWtlIHRoZXkndmUgd2lzZWx5IGFkZGVkIGEgY2hlY2sgdGhhdCBpbmNsdWRlcyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbi4gSXQncyBleGl0aW5nIHRoZSB0aHJlYWQgaWYgYGt0aHJlYWRfc2hvdWxkX3N0b3AoKWAgaXMgdHJ1ZSAod2hpY2ggaXMgdGhlIHNpZ25hbCB0byB0ZXJtaW5hdGUpIG9yLCBjcnVjaWFsbHksIGlmIGAhUkVBRF9PTkNFKGlwdnMtXHUwMDNlZW5hYmxlKWAgaXMgdHJ1ZS4gVGhhdCBsYXN0IGNvbmRpdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlIHRocmVhZCBzaG91bGQgYWxzbyBleGl0IGlmIHRoZSBgaXB2cy1cdTAwM2VlbmFibGVgIGZsYWcgaXMgc2V0IHRvIGZhbHNlLiBVc2luZyBgUkVBRF9PTkNFYCBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlIGVuYWJsaW5nIHZhcmlhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgY29uY3VycmVudGx5IGFuZCBjb3VsZCBiZSBjYWNoZWQgYnkgdGhlIHRocmVhZCBsb2NhbGx5LCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSByYWNlIGNvbmRpdGlvbiBpZiBub3QgYWRkcmVzc2VkIGNvcnJlY3RseS4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHRoZSB0aHJlYWQgY29udGludWluZyB0byBydW4gd2hlbiBpdCBzaG91bGRuJ3QuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpbiB0aGF0IGFyZWEgb2YgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6NDcuMjAyMTQ3Nzg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdG91dDpcXG4gMTcxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAxNzI6XFx0fVxcbiAxNzM6XFx0XFxuIDE3NDpcXHRzdGF0aWMgaW50IGlwX3ZzX2VzdGltYXRpb25fa3RocmVhZCh2b2lkICpkYXRhKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0c3RydWN0IGlwX3ZzX2VzdF9rdF9kYXRhICprZCA9IGRhdGE7XFxuIDE3NzpcXHRcXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGtkLVxcdTAwM2VpcHZzO1xcbiAxNzg6XFx0XFx0aW50IHJvdyA9IGtkLVxcdTAwM2Vlc3Rfcm93O1xcbiAxNzk6XFx0XFx0dW5zaWduZWQgbG9uZyBub3c7XFxuIDE4MDpcXHRcXHRpbnQgaWQgPSBrZC1cXHUwMDNlaWQ7XFxuIDE4MTpcXHRcXHRsb25nIGdhcDtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKGlkIFxcdTAwM2UgMCkge1xcbiAxODQ6XFx0XFx0XFx0aWYgKCFpcHZzLVxcdTAwM2Vlc3RfY2hhaW5fbWF4KVxcbiAxODU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE4NjpcXHRcXHR9IGVsc2Uge1xcbiAxODc6XFx0XFx0XFx0aWYgKCFpcHZzLVxcdTAwM2Vlc3RfY2hhaW5fbWF4KSB7XFxuIDE4ODpcXHRcXHRcXHRcXHRpcHZzLVxcdTAwM2Vlc3RfY2FsY19waGFzZSA9IDE7XFxuIDE4OTpcXHRcXHRcXHRcXHQvKiBjb21taXQgZXN0X2NhbGNfcGhhc2UgYmVmb3JlIHJlYWRpbmcgZXN0X2dlbmlkICovXFxuIDE5MDpcXHRcXHRcXHRcXHRzbXBfbWIoKTtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0Lyoga3RocmVhZCAwIHdpbGwgaGFuZGxlIHRoZSBjYWxjIHBoYXNlICovXFxuIDE5NDpcXHRcXHRcXHRpZiAoaXB2cy1cXHUwMDNlZXN0X2NhbGNfcGhhc2UpIHtcXG4gMTk1OlxcdFxcdFxcdFxcdGlwX3ZzX2VzdF9jYWxjX3BoYXNlKGlwdnMpO1xcbiAxOTY6XFx0XFx0XFx0XFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhUkVBRF9PTkNFKGlwdnMtXFx1MDAzZWVuYWJsZSkpXFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTk4OlxcdFxcdFxcdH1cXG4gMTk5OlxcdFxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0d2hpbGUgKDEpIHtcXG4gMjAyOlxcdFxcdFxcdGlmICghaWQgXFx1MDAyNlxcdTAwMjYgIWhsaXN0X2VtcHR5KFxcdTAwMjZpcHZzLVxcdTAwM2Vlc3RfdGVtcF9saXN0KSlcXG4gMjAzOlxcdFxcdFxcdFxcdGlwX3ZzX2VzdF9kcmFpbl90ZW1wX2xpc3QoaXB2cyk7XFxuIDIwNDpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lETEUpO1xcbiAyMDU6XFx0XFx0XFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSlcXG4gMjA2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRcXHQvKiBiZWZvcmUgZXN0aW1hdGlvbiwgY2hlY2sgaWYgd2Ugc2hvdWxkIHNsZWVwICovXFxuIDIwOTpcXHRcXHRcXHRub3cgPSBqaWZmaWVzO1xcbiAyMTA6XFx0XFx0XFx0Z2FwID0ga2QtXFx1MDAzZWVzdF90aW1lciAtIG5vdztcXG4gMjExOlxcdFxcdFxcdGlmIChnYXAgXFx1MDAzZSAwKSB7XFxuIDIxMjpcXHRcXHRcXHRcXHRpZiAoZ2FwIFxcdTAwM2UgSVBWU19FU1RfVElDSykge1xcbiAyMTM6XFx0XFx0XFx0XFx0XFx0a2QtXFx1MDAzZWVzdF90aW1lciA9IG5vdyAtIElQVlNfRVNUX1RJQ0s7XFxuIDIxNDpcXHRcXHRcXHRcXHRcXHRnYXAgPSBJUFZTX0VTVF9USUNLO1xcbiAyMTU6XFx0XFx0XFx0XFx0fVxcbiAyMTY6XFx0XFx0XFx0XFx0c2NoZWR1bGVfdGltZW91dChnYXApO1xcbiAyMTc6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjE4OlxcdFxcdFxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4gMjE5OlxcdFxcdFxcdFxcdGlmIChnYXAgXFx1MDAzYyAtOCAqIElQVlNfRVNUX1RJQ0spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjQ3LjIwMjI1MzEyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODkyMDM1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQVlMgRXN0aW1hdG9yIEt0aHJlYWQgRnVuY3Rpb25hbCBGaXggLSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHNvbWV0aGluZyBoZXJlIHRoYXQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWwgZml4IGZvciB0aG9zZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkcy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGVzZSB0aGluZ3MgYXJlIHVzdWFsbHkgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyBrdGhyZWFkcyBwcmVzZW50IHNvbWUgdW5pcXVlIGNoYWxsZW5nZXMgaW4gaG93IHdlIGFwcHJvYWNoIHRoaXMsIHNvIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuVGhlIG1haW4ga3RocmVhZCBpdHNlbGYsIGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLCBpc24ndCBkaXJlY3RseSBjYWxsYWJsZSB0aHJvdWdoIHN5c2NhbGxzLCB3aGljaCBtZWFucyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5kaXJlY3QgY2FsbHMuIFRoZXJlZm9yZSBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0J3Mgc3RhcnRlZCBhbmQgc3RvcHBlZCBhbmQgdGhvc2UgZnVuY3Rpb25zLCBuYW1lbHk6IGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYCwgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLCB3aGljaCB3aWxsIGhhdmUgdG8gYmUgbXkgZW50cnkgcG9pbnQuIEknbGwgbmVlZCB0byBsb29rIGF0IGFsbCB0aG9zZSByZWxhdGVkIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBmdW5jdGlvbnMuXG5cbkkgc2hvdWxkIGFsc28gZXhhbWluZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IHRyaWdnZXIgdGhlIGt0aHJlYWQncyBleGVjdXRpb24uIGBpcF92c19hZGRfc2VydmljZWAsIGFuZCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIG1lLiBJIGNhbiBpbnZlc3RpZ2F0ZSB0aGVtIHRvIHNlZSBpZiB0aGV5J3JlIGdvb2QgZm9jdXMgc3ltYm9scy4gRnVuY3Rpb25zIGxpa2UgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYCBhcmUgYWxzbyBjcnVjaWFsIHNpbmNlIHRoZXkgaGFuZGxlIGNsZWFudXAgc2NlbmFyaW9zLiBUaGlzIHdpbGwgcmVxdWlyZSBzb21lIGNhcmVmdWwgYW5hbHlzaXMsIGJ1dCB0aGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMgdG8gc3RhcnQgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDo1Mi4wOTQyOTA4NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjM5ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNDAyPWlwX3ZzX25ld19kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiAqdWRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTQzNTpcXHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3Ioc3ZjLVxcdTAwM2VpcHZzLCBcXHUwMDI2ZGVzdC1cXHUwMDNlc3RhdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDM2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE0NzE9aXBfdnNfYWRkX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX2Rlc3RfdXNlcl9rZXJuICp1ZGVzdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNTIyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNTIzOlxcdFxcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdmMtXFx1MDAzZWlwdnMsIFxcdTAwMjZkZXN0LVxcdTAwM2VzdGF0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE1MjQtXFx0XFx0LyogT24gZXJyb3IgcHV0IGJhY2sgZGVzdCBpbnRvIHRoZSB0cmFzaCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xODMzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxODM0OlxcdHJldCA9IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihpcHZzLCBcXHUwMDI2c3ZjLVxcdTAwM2VzdGF0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE4MzUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDk5NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBfdnNfY29udHJvbF9uZXRfaW5pdF9zeXNjdGwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTEyMy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTEyNDpcXHRyZXQgPSBpcF92c19zdGFydF9lc3RpbWF0b3IoaXB2cywgXFx1MDAyNmlwdnMtXFx1MDAzZXRvdF9zdGF0cy1cXHUwMDNlcyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxMjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9NDA0PXN0YXRpYyBpbnQgaXBfdnNfZW5xdWV1ZV9lc3RpbWF0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk2LS8qIFN0YXJ0IGVzdGltYXRpb24gZm9yIHN0YXRzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jOjQ5NzppbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc3RhdHMgKnN0YXRzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy00OTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMDo1Mi4xMzQ1MzUxODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NjI4Mzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgRXN0aW1hdG9yIExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBJUFZTIGVzdGltYXRvciBmdW5jdGlvbnMuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHdhdGNoIOKAkyBpdCdzIHRyaWdnZXJlZCB3aGVuIG5ldyBkZXN0aW5hdGlvbnMgb3Igc2VydmljZXMgYXJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0uIENvbnZlcnNlbHksIGBpcF92c19zdG9wX2VzdGltYXRvcmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFuZCBpcyBjYWxsZWQgd2hlbiB0aGV5J3JlIGRlbGV0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAsIGBpcF92c19zdG9wX2VzdGltYXRvcmAsIGBpcF92c19hZGRfc2VydmljZWAsIGFuZCBgaXBfdnNfYWRkX2Rlc3RgIGFyZSBsaWtlbHkgdGhlIG1vc3QgcGVydGluZW50IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29yZSBjb250cm9sIGZsb3cgaGVyZS5cblxuSSBhbHNvIHNlZSB0aGF0IGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgYnkgc3lzY3RsIG1vZGlmaWNhdGlvbnMsIHdoaWNoIGlzIHdvcnRoIGNvbnNpZGVyaW5nIHNpbmNlIGl0IHByb2JhYmx5IGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBHaXZlbiB0aGF0IGl0J3MgdHJpZ2dlcmVkIGJ5IHN5c2N0bHMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBlc3RpbWF0b3IsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvbiB0aGF0LiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzeXNjdGwgdmFyaWFibGVzIG5vdyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXN0aW1hdG9yIGlzIGluZmx1ZW5jZWQgYnkgdGhlIHVzZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIwOjU2LjAwMDgyMTIyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NjA4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2c19wcm9jX2VzdF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQyMD1wcm9jX2RvX3N5bmNfcG9ydHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDQzOnN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ0NC1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZmZlcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNDgxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyNDgyOnN0YXRpYyBpbnQgaXB2c19wcm9jX2VzdF9jcHVtYXNrX2dldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjQ4My1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUwNjpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bGlzdChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA3LVxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MTctXFx0XFx0LyogcHJvY19zeXNfY2FsbF9oYW5kbGVyKCkgYXBwZW5kcyB0ZXJtaW5hdG9yICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MTg6XFx0XFx0cmV0ID0gaXB2c19wcm9jX2VzdF9jcHVtYXNrX3NldCh0YWJsZSwgYnVmZmVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUxOS1cXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUyMi1cXHRcXHQvKiBwcm9jX3N5c19jYWxsX2hhbmRsZXIoKSBhbGxvY2F0ZXMgMSBieXRlIGZvciB0ZXJtaW5hdG9yICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MjM6XFx0XFx0cmV0ID0gaXB2c19wcm9jX2VzdF9jcHVtYXNrX2dldCh0YWJsZSwgYnVmZmVyLCAqbGVucCArIDEpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTI0LVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1MzItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1MzM6c3RhdGljIGludCBpcHZzX3Byb2NfZXN0X25pY2UoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUzNC1cXHRcXHRcXHQgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI2NTU9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNfdmFyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4MzU6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gaXB2c19wcm9jX2VzdF9jcHVsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg0MC1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mjg0MTpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBpcHZzX3Byb2NfZXN0X25pY2UsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NDItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjA6NTYuMDQzNzg5MDY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTc3NDkwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJUFZTIEVzdGltYXRvciBNb2R1bGUgLSBLZXkgRnVuY3Rpb25hbGl0eSBhbmQgRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgSSdtIHplcm9pbmcgaW4gb24gdGhlIElQVlMgZXN0aW1hdG9yIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpcHZzX3Byb2NfZXN0X2NwdWxpc3RgIGFuZCBgaXB2c19wcm9jX2VzdF9uaWNlYCBsb29rIGxpa2Ugc29saWQgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbSByZWdhcmRpbmcgdGhlIGVzdGltYXRvci4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLlxuXG5Ob3csIGxldCdzIGNvbnNvbGlkYXRlIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZXN0aW1hdG9yIGZ1bmN0aW9uYWxpdHkuIFdlIG5lZWQgdG8gY3JlYXRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZXN0aW1hdG9yJ3Mgb3BlcmF0aW9uczpcblxuKiAgIEkgbmVlZCB0byBsb29rIGF0IGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBhcyB0aGV5IGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBhbmQgc3RvcHBpbmcgcG9pbnRzLiBUaGVzZSBhcmUgdGhlIGhvb2tzIGZvciB0aGUgb3ZlcmFsbCBlc3RpbWF0b3IgbGlmZWN5Y2xlLlxuKiAgIEkgYWxzbyBzaG91bGQgaW5jbHVkZSBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaW4gdGhlIGZvY3VzIGdyb3VwLiBUaGlzIGlzIGxpa2VseSBob3cgbmV3IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlZ3JhdGVkLlxuKiAgIE9mIGNvdXJzZSwgdGhlIGVudHJ5IHBvaW50cyBmcm9tIGJlZm9yZSwgYGlwdnNfcHJvY19lc3RfY3B1bGlzdGAgYW5kIGBpcHZzX3Byb2NfZXN0X25pY2VgLCBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBDUFUgbGlzdCBhbmQgbmljZSB2YWx1ZXMgYXJlIG1hbmFnZWQgb3IgY29uZmlndXJlZC5cbiogICBGaW5hbGx5LCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgYGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbmAuIElmIGl0J3MgdGhlcmUsIHRoZW4gaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBleHBsb3JpbmcgaG93IHRoZSBhY3R1YWwgZXN0aW1hdGlvbiBwcm9jZXNzIGlzIGluaXRpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MDAuMTAxNTQwODQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA1OTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHZzX3Byb2NfcnVuX2VzdGltYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjUzMz1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfbmljZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI1NjItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI1NjM6c3RhdGljIGludCBpcHZzX3Byb2NfcnVuX2VzdGltYXRpb24oY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjU2NC1cXHRcXHRcXHRcXHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNjU1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzX3ZhcnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODI4LVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyODI5OlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IGlwdnNfcHJvY19ydW5fZXN0aW1hdGlvbixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjgzMC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTowMC4xNDM2MDQyNzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0Nzg3OTAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgRXN0aW1hdG9yIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIElQVlMgZXN0aW1hdG9yIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGUgaXMgdGhhdCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYCBpcyBpbmRlZWQgcHJlc2VudCwgYXMgZXhwZWN0ZWQuIE5vdywgd2hhdCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/IExldCdzIHNlZS4uLiB0aGUgcHJpbWFyeSBvbmUgYXBwZWFycyB0byBiZSBgSVBfVlNgLiBBcmUgdGhlcmUgYW55IHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzIGZvciBgSVBfVlNgPyBZZXMsIGl0IGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUmAuIEFuZCBgSVBfVlNgIGl0c2VsZiBpcyB0cmlzdGF0ZSwgc28gdGhhdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuTGV0J3MgZG8gYSBxdWljayBkZWVwIGRpdmUgaW50byB0aGUgcGF0Y2ggYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBub3RoaW5nIGVsc2UgaXMgaW4gcGxheS4gVGhlIHBhdGNoIHRhcmdldHMgYGlwX3ZzX2VzdC5jYCwgbW9kaWZ5aW5nIGtleSBmdW5jdGlvbnM6IGBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAsIGFuZCBgaXBfdnNfZXN0X2t0aHJlYWRfZGVzdHJveWAuXG5cbmBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAgaXMgdHJpZ2dlcmVkIGZyb20gYGVzdF9yZWxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGlwX3ZzX2VzdF9hZGRfa3RocmVhZGAuIEZ1cnRoZXJtb3JlLCBgaXBfdnNfZXN0X2FkZF9rdGhyZWFkYCBpcyBpbnZva2VkIGZyb20gYGlwX3ZzX2VucXVldWVfZXN0aW1hdG9yYCwgd2hpY2ggaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGVzdGltYXRvcnMgYXJlIGBpcF92c19zdGFydF9lc3RpbWF0b3JgIGFuZCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLiBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgY2FsbGVkIHdoZW4gY2VydGFpbiBzeXNjdGxzIGFyZSBtb2RpZmllZC4gVGhlIHJlbGV2YW50IHN5c2N0bHMgYXJlIGBlc3RfY3B1bGlzdGAsIGBlc3RfbmljZWAsIGFuZCBgcnVuX2VzdGltYXRpb25gLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbiBhcmU6IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXB2c19wcm9jX2VzdF9jcHVsaXN0YCwgYGlwdnNfcHJvY19lc3RfbmljZWAsIGFuZCwgb2YgY291cnNlLCBgaXB2c19wcm9jX3J1bl9lc3RpbWF0aW9uYC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmAgaXMgc3RhdGljIG9yIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MDYuNDkxNDg1NDU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI1MzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaXBfdnNfc3RhcnRfZXN0aW1hdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTQwND1zdGF0aWMgaW50IGlwX3ZzX2VucXVldWVfZXN0aW1hdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTQ5Ni0vKiBTdGFydCBlc3RpbWF0aW9uIGZvciBzdGF0cyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo0OTc6aW50IGlwX3ZzX3N0YXJ0X2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNDk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MDYuNTM0NzQwNjE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzQzMDQxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRXZvbHZpbmcgQ29uY2VwdHMgaW4gRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbm90IHNlZWluZyB0aGlzIGFzIGEgc3RhdGljIHByb2JsZW0uIEl0J3MgZHluYW1pYywgY29uc3RhbnRseSBjaGFuZ2luZy4gVGhhdCdzIHRoZSBjb3JlIG9mIG15IGN1cnJlbnQgdGhpbmtpbmcuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gaG93IHRoZSBzeXN0ZW0ncyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgdmFyeSwgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgdmFyaWFiaWxpdHkgaW4gbWluZC5cblxuQW5kIG5vdyBJJ20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGFib3V0IGBpcF92c19zdG9wX2VzdGltYXRvcmAuIFRoYXQgZnVuY3Rpb24ncyBiZWhhdmlvciBpcyBsaWtlbHkgY3J1Y2lhbCBoZXJlLCBhbmQgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgaXQgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvdXRwdXRzLCBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyByZXNwb25zZSB0byBjaGFuZ2VzLiBUaGF0IHBhcnRpY3VsYXIgdmFyaWFibGUgaXMgYSBseW5jaHBpbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MTAuNjA5MDQ2NjUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg1ODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jPTUyOD1zdGF0aWMgdm9pZCBpcF92c19lc3Rfa3RocmVhZF9kZXN0cm95KHN0cnVjdCBpcF92c19lc3Rfa3RfZGF0YSAqa2QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQwLS8qIFVubGluayBlc3RpbWF0b3IgZnJvbSBjaGFpbiAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzo1NDE6dm9pZCBpcF92c19zdG9wX2VzdGltYXRvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3N0YXRzICpzdGF0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtNTQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MTAuNjQ5OTA2OTM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzY5MDkxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZSwga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgTmV0d29yayBMb2FkIEJhbGFuY2luZyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmNlcHQgaXNuJ3QgZml4ZWQsIGl0J3MgY29uc3RhbnRseSBzaGlmdGluZy4gVGhpcyBwYXJ0aWN1bGFyIGlzc3VlIGRlbWFuZHMgYSBkeW5hbWljIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgaXQuIE5vdywgYXMgSSBkaXZlIGRlZXBlciwgSSdtIHRoaW5raW5nIGFib3V0IGEgc3BlY2lmaWMgY29tcG9uZW50IHdpdGhpbiB0aGUgTGludXggVmlydHVhbCBTZXJ2ZXIgKExWUykgcmVhbG0uIFRoZSBxdWVzdGlvbiB0aGF0IGhhcyBzcHJ1bmcgdG8gbWluZCBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyB3aGVuIGNvbnNpZGVyaW5nIGBpcHZzX3Byb2NfZXN0X2NwdWxpc3RgPyBXaGF0IGRvZXMgdGhhdCBpbXBseSBpbiB0aGlzIGNvbnRleHQ/IExldCdzIGNvbnNpZGVyIHRoZSBwb3NzaWJsZSBhdmVudWVzIG9mIGludmVzdGlnYXRpb24gaW4gdGhhdCByZWdhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MTMuNDg2ODE4MDk4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDU3ODgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHZzX3Byb2NfZXN0X2NwdWxpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MjQ4Mj1zdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bWFza19nZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjUwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MjUwNjpzdGF0aWMgaW50IGlwdnNfcHJvY19lc3RfY3B1bGlzdChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yNTA3LVxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI2NTU9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNfdmFyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4MzQtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4MzU6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gaXB2c19wcm9jX2VzdF9jcHVsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yODM2LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjEzLjUyNzQwMTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzIyNTM3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyB0aGUgRXN0aW1hdG9yJ3MgT3JpZ2lucyoqXG5cblJpZ2h0LCBzbyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgZGVmaW5pdGVseSBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHJlYWNoYWJsZSBpdCBpcy4gQWhhLCBpdCdzIGEgYHN5c2N0bGAgaGFuZGxlciwgc28gaXQgKnNob3VsZCogYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgcHJvY19zeXNfY2FsbF9oYW5kbGVyYCBpbnRlcmZhY2UuIEJ1dCB0aGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIGdpdmVzIG1lIHBhdXNlLiBJdCByYWlzZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGlubGluaW5nIG9yLCB3b3JzZSwgbm8gcmVhZGlseSBpZGVudGlmaWFibGUgc3ltYm9sIGFkZHJlc3MuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggaXQuIEluc3RlYWQgb2YgZGlnZ2luZyB0b28gZGVlcCByaWdodCBub3csIGxldCBtZSBwaXZvdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBpcF92c19hZGRfc2VydmljZWAgYW5kIGBpcF92c19hZGRfZGVzdGAgZnVuY3Rpb25zLiBUaGV5J3JlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgY3JlYXRpbmcgdGhlc2UgZXN0aW1hdG9ycywgcmlnaHQ/IEl0IG1pZ2h0IGJlIGVhc2llciBhbmQgY2xlYW5lciB0byBnbyB0aHJvdWdoIHRob3NlIHBhdGhzIGlmIHBvc3NpYmxlLiBUaGV5J3JlIHByb2JhYmx5IG1vcmUgd2VsbC1kZWZpbmVkIGFuZCBkb2N1bWVudGVkIGludGVyZmFjZXMuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSBpZiBJIGNhbiBsZXZlcmFnZSB0aGVtIGluc3RlYWQgb2Ygd3Jlc3RsaW5nIHdpdGggdGhpcyBwb3RlbnRpYWxseSBvcGFxdWUgc3RhdGljIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToxNy4yNTk2NTc2MTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjM2NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2FkZF9zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDg9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNzA5OmlwX3ZzX2FkZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyX2tlcm4gKnUsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE3MTAtXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfc2VydmljZSAqKnN2Y19wKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM0MjM9ZG9faXBfdnNfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBwdHIsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUzOC1cXHRcXHRlbHNlXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM1Mzk6XFx0XFx0XFx0cmV0ID0gaXBfdnNfYWRkX3NlcnZpY2UoaXB2cywgXFx1MDAyNnVzdmMsIFxcdTAwMjZzdmMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNTQwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ2MzQ9c3RhdGljIGludCBpcF92c19nZW5sX3NldF9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NzMyLVxcdFxcdGlmIChzdmMgPT0gTlVMTClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDczMzpcXHRcXHRcXHRyZXQgPSBpcF92c19hZGRfc2VydmljZShpcHZzLCBcXHUwMDI2dXN2YywgXFx1MDAyNnN2Yyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ3MzQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToxNy4zMDQyOTkxNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0NzYxMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpcF92c19hZGRfc2VydmljZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gYGlwX3ZzX2FkZF9zZXJ2aWNlYCBpcywgYXMgSSByZWNhbGwsIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0J3MgdXN1YWxseSB0aGUgZXhwZWN0YXRpb24gZm9yIGludGVybmFsLCBtb2R1bGUtc3BlY2lmaWMgZnVuY3Rpb25zIOKAkyBpdCBtYWtlcyBzZW5zZSBmcm9tIGFuIGVuY2Fwc3VsYXRpb24gc3RhbmRwb2ludC4gQnV0IHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb24gaW4gbXkgbWluZDogaG9sZCBvbiwgd2hhdCBhYm91dCBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCBhbmQgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYD8gVGhlIG5hbWVzIHNvdW5kIGludGltYXRlbHkgcmVsYXRlZCB0byB0aGUgc2FtZSBzdWJzeXN0ZW0sIGJ1dCBJICp0aGluayogdGhvc2UgYXJlIGV4cG9zZWQgb3V0c2lkZSB0aGUgbW9kdWxlLiBJZiB0aGV5ICphcmUqIGV4cG9ydGVkLCB0aGF0IGltcGxpZXMgYSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCByZWxhdGlvbnNoaXAgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBwb3RlbnRpYWxseSBvZmZlcmluZyBleHRlcm5hbGx5IGNhbGxhYmxlIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgYWN0dWFsIHN5bWJvbCB2aXNpYmlsaXR5IG9mIHRob3NlIGxhc3QgdHdvLiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGVzdGltYXRvcnMgaW4gSVBWUyBhcmUgc3VwcG9zZWQgdG8gd29yayB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCdzIGRpZyBpbnRvIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToyMC44MzkwNjMyMTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI3NDMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MjAuODgxMTk3NDQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjEzNDExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBJUFZTIENvbmZpZ3VyYXRpb24gRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgc28gdGhlIHN5bWJvbHMgd2UncmUgZGVhbGluZyB3aXRoIGFyZW4ndCAqZXhwb3J0ZWQqLCBidXQgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBzdGF0aWMgZWl0aGVyLCB3aGljaCBnaXZlcyB0aGVtIGEgdW5pcXVlIHN5bWJvbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGhvbWUgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIElQVlMgY29uZmlndXJhdGlvbiDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBlbnRyeSBwb2ludHMsIHJpZ2h0PyBMZXQncyBjaGVjayBgZG9faXBfdnNfc2V0X2N0bGAgYW5kIGBpcF92c19nZW5sX3NldF9jbWRgLiBUaG9zZSBhcmUgKmhpZ2hseSogbGlrZWx5IHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aGVyZSBJUFZTIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgdWx0aW1hdGVseSBnZXQgcHJvY2Vzc2VkLiBUaGV5J3JlIHdoZXJlIEknZCBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBzdGF0ZSBpcyBiZWluZyBtYW5pcHVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMToyNC4xMDI1NDEzMDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTIzODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2lwX3ZzX3NldF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzQyMj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM0MjM6ZG9faXBfdnNfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBwdHIsIHVuc2lnbmVkIGludCBsZW4pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM0MjQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM5MDI9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBpcF92c19zb2Nrb3B0cyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zOTA1LVxcdC5zZXRfb3B0bWF4XFx0PSBJUF9WU19TT19TRVRfTUFYKzEsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM5MDY6XFx0LnNldFxcdFxcdD0gZG9faXBfdnNfc2V0X2N0bCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzkwNy1cXHQuZ2V0X29wdG1pblxcdD0gSVBfVlNfQkFTRV9DVEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjI0LjE0NDQ2OTI5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc1MzI1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBJUFZTIENvbnRyb2wgTWVjaGFuaXNtcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBkb19pcF92c19zZXRfY3RsYCBpcyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQncyBmaW5lLCBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dC4gSG93ZXZlciwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHJlbGF0ZWQgZnVuY3Rpb24sIGBpcF92c19nZW5sX3NldF9jbWRgLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB0aGUgZGlmZmVyZW50IHdheXMgd2UncmUgaGFuZGxpbmcgY29udHJvbCBvcGVyYXRpb25zIHdpdGhpbiBJUFZTLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYW55IGRpc3RpbmN0aW9uIG9yIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uIEFyZSB3ZSBjcmVhdGluZyByZWR1bmRhbmN5PyBJcyB0aGVyZSBhIHJlYXNvbiB3aHkgb25lIGlzIGRlY2xhcmVkIHN0YXRpYyBhbmQgdGhlIG90aGVyIGlzbid0PyBQZXJoYXBzIHRoZXJlJ3MgYSByZWFzb24gZm9yIG9uZSBiZWluZyBnZW5lcmljIG5ldGxpbmsgYmFzZWQsIHdoaWxzdCB0aGUgb3RoZXIgaXMgc3RhdGljYWxseSBkZWNsYXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5IGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MjcuNDE5Nzk3NDM0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkxNzEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19nZW5sX3NldF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDYwOT1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfc2V0X2RhZW1vbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ2MzQ6c3RhdGljIGludCBpcF92c19nZW5sX3NldF9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDYzNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGlwX3ZzX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg2OS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg3MDpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODcxLVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg3NS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg3NjpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODc3LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg4MS1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg4MjpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODgzLVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDg5NC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDg5NTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00ODk2LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkwMC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkwMTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTAyLVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkwNi1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkwNzpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTA4LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDkzNi1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDkzNzpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTM4LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk1NC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk1NTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTU2LVxcdH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDk2MC1cXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfQURNSU5fUEVSTSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDk2MTpcXHRcXHQuZG9pdFxcdD0gaXBfdnNfZ2VubF9zZXRfY21kLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00OTYyLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjI3LjQ2MTcxODkwNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgyNzgwMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGNsZWFyIHRoZSBkZXNpZ24gcmVsaWVzIGhlYXZpbHkgb24gc3RhdGljIGRlY2xhcmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgdGhlIG9uZXMgbGlrZWx5IHRvIGJlIG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIGJyb2FkZXIgZGVzaWduIHBlcnNwZWN0aXZlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlYmFzZSwgdGhlIG90aGVyIGZ1bmN0aW9ucyBsaXN0ZWQgYXJlIGluaGVyZW50bHkgc3RhdGljLCB3aGljaCBsaW1pdHMgdGhlaXIgdXRpbGl0eS5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZXNlIGZ1bmN0aW9ucyBhcyBub24tc3RhdGljOiBgaXBfdnNfc3RhcnRfZXN0aW1hdG9yYCwgYGlwX3ZzX3N0b3BfZXN0aW1hdG9yYCwgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgLCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnRgLCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBpcF92c19lc3RfcmVsb2FkX3N0YXJ0YC4gSXRzIG5vbi1zdGF0aWMgbmF0dXJlIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbiwgcGVyaGFwcyBmb3IgY29uZmlndXJhdGlvbiBvciBjb250cm9sLiBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAgaXMgZG9pbmcuIERldGVybWluaW5nIGlmIGl0cyBub24tc3RhdGljIHN0YXR1cyBpcyBhIGtleSBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGNvZGUncyBvdmVyYWxsIG1haW50YWluYWJpbGl0eSBhbmQgZXh0ZW5zaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTozMS4xNDQ1MDE2MTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODYwNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYz0xNzQ9c3RhdGljIGludCBpcF92c19lc3RpbWF0aW9uX2t0aHJlYWQodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYy0yMzctLyogU2NoZWR1bGUgc3RvcC9zdGFydCBmb3Iga3RocmVhZCB0YXNrcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYzoyMzg6dm9pZCBpcF92c19lc3RfcmVsb2FkX3N0YXJ0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBib29sIHJlc3RhcnQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTIzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjIxOjMxLjE4NzM2NjY1NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc4OTQ5NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBzdGF0aWMgc2l0dWF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCB0aHJlYWRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVybWluYXRpb24gb2YgdGhlc2UgcHJvY2Vzc2VzIGlzIGJlaW5nIGhhbmRsZWQuIEnigJlsbCBuZWVkIHRvIGV4YW1pbmUgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YCBhbmQgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0b3BgIGluIGRldGFpbC4gVGhlc2UgYXJlIGxpa2VseSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbm9uLXN0YXRpYyBiZWhhdmlvciB3ZSdyZSBvYnNlcnZpbmcuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHRlYXJkb3duIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9hZCBiYWxhbmNpbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MzQuMzY2MzE4ODU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE2ODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0yNDM9c3RhdGljIHZvaWQgZXN0X3JlbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI4NC1cXHRcXHRcXHRcXHRzdGFydCA9IGtkLVxcdTAwM2VuZWVkZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjI4NTpcXHRcXHRcXHRpZiAoc3RhcnQgXFx1MDAyNlxcdTAwMjYgaXBfdnNfZXN0X2t0aHJlYWRfc3RhcnQoaXB2cywga2QpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMjg2LVxcdFxcdFxcdFxcdHJlcGVhdCA9IHRydWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM9MjM4PXZvaWQgaXBfdnNfZXN0X3JlbG9hZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgYm9vbCByZXN0YXJ0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jLTI1Mi0vKiBTdGFydCBrdGhyZWFkIHRhc2sgd2l0aCBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmM6MjUzOmludCBpcF92c19lc3Rfa3RocmVhZF9zdGFydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMtMjU0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfZXN0X2t0X2RhdGEgKmtkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTozNC40MDg0ODk3OTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDQ1NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBTdGF0aWMgdnMuIER5bmFtaWMgSVBWUyBTeW1ib2xzKipcblxuT2theSwgc28gSSd2ZSBlc3RhYmxpc2hlZCB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbiAqYXJlKiBkeW5hbWljLCBub3Qgc3RhdGljLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBmb3IgYW5hbHlzaXMuIExldCdzIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgY29yZSBvbmVzOlxuXG4qICAgYGlwX3ZzX3N0YXJ0X2VzdGltYXRvcmBcbiogICBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgXG4qICAgYGlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRgXG4qICAgYGlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0YFxuKiAgIGBpcF92c19lc3Rfa3RocmVhZF9zdG9wYFxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBtdXN0IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkga25vdyBgSVBfVlNgIHJlbGllcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLiBJIHJlY2FsbCBgTkVURklMVEVSYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCBpbiBzeXprYWxsZXIsIGJ1dCBpdCdzIGNydWNpYWwgdG8gZXhwbGljaXRseSBsaXN0IGBJUF9WU2AuIExldCBtZSB2ZXJpZnkgaWYgYElQX1ZTYCBoYXMgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIEl0J3MgYmVzdCB0byBiZSB0aG9yb3VnaCBhdCB0aGlzIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTozOC45NzI5NDk2MDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDgxMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcXHRJUF9WU19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBoZWxwZXJcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cXHRcXHRORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXFx0SVBfVlNfTkZDVFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6MjE6MzkuMDE0MDM1MzE3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjY5NzQxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIEVzdGltYXRvciBQYXRjaCoqXG5cbk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgZm9jdXNpbmcgb24gYElQX1ZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhpcyBwYXRjaCwgYXQgbGVhc3QgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIGlzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkIHRvIGNvbnNpZGVyLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsLCBhZGRyZXNzaW5nIGEgYnVnIHdpdGhpbiB0aGUgSVBWUyBlc3RpbWF0b3IncyBrdGhyZWFkIG1hbmFnZW1lbnQuIExvb2tzIGxpa2UgaXQncyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gcHJvYmxlbSB3aGVuIGRlYWxpbmcgd2l0aCBga3RocmVhZF9zdG9wYC4gVGhlIGZpeCBpbmNvcnBvcmF0ZXMgYGdldF90YXNrX3N0cnVjdGAgZm9yIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRoZSBhc3NvY2lhdGVkIGBrdGhyZWFkX3N0b3BfcHV0YCBjYWxsLiBFeGNlbGxlbnQsIGNsYXNzaWMgY29uY3VycmVuY3kgZml4LiBXZSdyZSBzZWVpbmcgY2hlY2tzIGZvciBga3RocmVhZF9zaG91bGRfc3RvcCgpYCBhbmQgYCFSRUFEX09OQ0UoaXB2cy1cdTAwM2VlbmFibGUpYCBhcyB3ZWxsLCB3aGljaCBpcyBnb29kLiBFbnN1cmVzIHRoZSBrdGhyZWFkIGV4aXRzIHByb3Blcmx5IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVGhpcyBjaGFuZ2UgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXG5cbk5vdywgSSdsbCBuZWVkIHRvIHJlYWxseSB6b25lIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBpcF92c19zdGFydF9lc3RpbWF0b3JgLCBgaXBfdnNfc3RvcF9lc3RpbWF0b3JgLCBgaXBfdnNfZXN0X3JlbG9hZF9zdGFydGAsIGBpcF92c19lc3Rfa3RocmVhZF9zdGFydGAsIGFuZCBgaXBfdnNfZXN0X2t0aHJlYWRfc3RvcGAuIFRob3NlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgZXhpdCBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkncmUgd2hlcmUgd2Ugc2hvdWxkIGJlIHByb2JpbmcgZm9yIHRoZSB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBJUFZTIGVzdGltYXRvciBrdGhyZWFkIGlzc3VlLiBUaGUgc29sdXRpb24gcmV2b2x2ZXMgYXJvdW5kIHJlZmVyZW5jZSBjb3VudGluZ+KAlHByZXZlbnRpbmcgdGhhdCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb+KAlGFuZCBhZGRpbmcgYW4gZWFybHkgZXhpdCBjb25kaXRpb24gdG8gdGhlIGt0aHJlYWQgaXRzZWxmLiBJdCdzIGEgZnVuY3Rpb25hbCwgY29yZSBjaGFuZ2UgdG8gSVBWUywgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHRoZSB1c3VhbCBuZXRsaW5rIGFuZCBzeXNjdGwgaW50ZXJmYWNlcy5cblxuVGltZSB0byBjYWxsIHRoZSB0ZWFtIGFuZCBzZXQgdGhlIHJlc3VsdHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzMwLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDoyMTo0NS41ODEwMTE2NjJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjcwNTY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zdGFydF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX3N0b3BfZXN0aW1hdG9yXCIsXG4gICAgXCJpcF92c19lc3RfcmVsb2FkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdGFydFwiLFxuICAgIFwiaXBfdnNfZXN0X2t0aHJlYWRfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBJUFZTIGVzdGltYXRvciBrdGhyZWFkIG1hbmFnZW1lbnQgYnkgYWRkaW5nIHJlZmVyZW5jZSBjb3VudGluZyAoZ2V0X3Rhc2tfc3RydWN0IGFuZCBrdGhyZWFkX3N0b3BfcHV0KSBhbmQgYW4gZWFybHkgZXhpdCBjaGVjayBpbiB0aGUga3RocmVhZCBmdW5jdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQVlMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIElQVlMgbmV0bGluayBhbmQgc3lzY3RsIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlc3RpbWF0b3Igc3RhcnQvc3RvcCBhbmQgcmVsb2FkIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N0YXJ0X2VzdGltYXRvclwiLFxuICAgIFwiaXBfdnNfc3RvcF9lc3RpbWF0b3JcIixcbiAgICBcImlwX3ZzX2VzdF9yZWxvYWRfc3RhcnRcIixcbiAgICBcImlwX3ZzX2VzdF9rdGhyZWFkX3N0YXJ0XCIsXG4gICAgXCJpcF92c19lc3Rfa3RocmVhZF9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIElQVlMgZXN0aW1hdG9yIGt0aHJlYWQgbWFuYWdlbWVudCBieSBhZGRpbmcgcmVmZXJlbmNlIGNvdW50aW5nIChnZXRfdGFza19zdHJ1Y3QgYW5kIGt0aHJlYWRfc3RvcF9wdXQpIGFuZCBhbiBlYXJseSBleGl0IGNoZWNrIGluIHRoZSBrdGhyZWFkIGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVBWUyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgSVBWUyBuZXRsaW5rIGFuZCBzeXNjdGwgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGVzdGltYXRvciBzdGFydC9zdG9wIGFuZCByZWxvYWQgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[1] Phase: Succeeded StartedAt: 2026-07-30 20:21:58 +0000 UTC FinishedAt: 2026-07-30 20:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 20:21:58 +0000 UTC FinishedAt: 2026-07-30 20:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2] Phase: Succeeded StartedAt: 2026-07-30 20:21:58 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:21:59 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:22:00 +0000 UTC FinishedAt: 2026-07-30 20:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:22:00 +0000 UTC FinishedAt: 2026-07-30 20:22:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"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-workflowjzs2b/series-workflowjzs2b-convert-artifact-332367170/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:22:12 +0000 UTC FinishedAt: 2026-07-30 20:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:22:12 +0000 UTC FinishedAt: 2026-07-30 20:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8ca57dd3-b4cc-4eae-af61-41b31cbc07a4,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-workflowjzs2b/series-workflowjzs2b-convert-artifact-332367170/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": "3e4c4bdd-e90b-415e-9228-11f6ab1905b8", "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-workflowjzs2b/series-workflowjzs2b-build-action-4282531840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:22:12 +0000 UTC FinishedAt: 2026-07-30 20:48:17 +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:*8ca57dd3-b4cc-4eae-af61-41b31cbc07a4,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-workflowjzs2b/series-workflowjzs2b-convert-artifact-332367170/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": "3e4c4bdd-e90b-415e-9228-11f6ab1905b8", "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-workflowjzs2b/series-workflowjzs2b-build-action-4282531840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:48:29 +0000 UTC FinishedAt: 2026-07-30 20:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:48:29 +0000 UTC FinishedAt: 2026-07-30 20:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:48:29 +0000 UTC FinishedAt: 2026-07-30 20:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:48:29 +0000 UTC FinishedAt: 2026-07-30 20:48:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-workflowjzs2b/series-workflowjzs2b-convert-artifact-1474161053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:48:54 +0000 UTC FinishedAt: 2026-07-30 20:51:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:48:54 +0000 UTC FinishedAt: 2026-07-30 20:50:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e4c4bdd-e90b-415e-9228-11f6ab1905b8,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-workflowjzs2b/series-workflowjzs2b-build-action-4282531840/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-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:51:00 +0000 UTC FinishedAt: 2026-07-30 20:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:51:01 +0000 UTC FinishedAt: 2026-07-30 20:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:51:01 +0000 UTC FinishedAt: 2026-07-30 21:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:51:01 +0000 UTC FinishedAt: 2026-07-30 21:18:07 +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:*8ca57dd3-b4cc-4eae-af61-41b31cbc07a4,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-workflowjzs2b/series-workflowjzs2b-convert-artifact-1474161053/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": "9b95bd61-7a83-44c7-b8f2-eba47718150e", "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-workflowjzs2b/series-workflowjzs2b-build-action-2736699001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 20:51:01 +0000 UTC FinishedAt: 2026-07-30 21:17:41 +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:*8ca57dd3-b4cc-4eae-af61-41b31cbc07a4,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-workflowjzs2b/series-workflowjzs2b-convert-artifact-1474161053/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": "9b95bd61-7a83-44c7-b8f2-eba47718150e", "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-workflowjzs2b/series-workflowjzs2b-build-action-2736699001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:18:07 +0000 UTC FinishedAt: 2026-07-30 21:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:18:07 +0000 UTC FinishedAt: 2026-07-30 21:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:18:07 +0000 UTC FinishedAt: 2026-07-30 21:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:18:07 +0000 UTC FinishedAt: 2026-07-30 21:19:54 +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:*9b95bd61-7a83-44c7-b8f2-eba47718150e,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-workflowjzs2b/series-workflowjzs2b-build-action-2736699001/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-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"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:*3e4c4bdd-e90b-415e-9228-11f6ab1905b8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b95bd61-7a83-44c7-b8f2-eba47718150e,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-workflowjzs2b/series-workflowjzs2b-build-action-4282531840/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-workflowjzs2b/series-workflowjzs2b-build-action-2736699001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-30 21:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-30 21:20:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"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-workflowjzs2b/series-workflowjzs2b-convert-artifact-172520738/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-30 21:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-30 21:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:08 +0000 UTC FinishedAt: 2026-07-30 21:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:19 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzs2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_start_estimator","ip_vs_stop_estimator","ip_vs_est_reload_start","ip_vs_est_kthread_start","ip_vs_est_kthread_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"af4d9143-48fa-4564-9108-cf54fa3d446e","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-07-30 21:20:19 +0000 UTC FinishedAt: 2026-07-31 00:24:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e4c4bdd-e90b-415e-9228-11f6ab1905b8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b95bd61-7a83-44c7-b8f2-eba47718150e,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-workflowjzs2b/series-workflowjzs2b-build-action-4282531840/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-workflowjzs2b/series-workflowjzs2b-build-action-2736699001/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-workflowjzs2b/series-workflowjzs2b-convert-artifact-172520738/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,}