Name: series-workflowst2r9 Phase: Succeeded StartedAt: 2026-08-21 17:09:34 +0000 UTC FinishedAt: 2026-08-21 21:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[0] Phase: Succeeded StartedAt: 2026-08-21 17:09:34 +0000 UTC FinishedAt: 2026-08-21 17:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 17:09:34 +0000 UTC FinishedAt: 2026-08-21 17:41:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "575152a248b8192994b64d0b746a93890373715c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "575152a248b8192994b64d0b746a93890373715c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "dbff0c1a-80f5-4dea-abf2-db3c044cc6bd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgKHdoaWNoIGlzIGl0c2VsZiBmdWxseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uKSBvciBhIGxvb3AgdGhhdCBzZXRzIGFsbCBlbGVtZW50cyB0byAxLiBUaHVzLCB0aGUgYHdlaWdodHNgIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb2YgaXRzIGVsZW1lbnRzIGFyZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGM1YmYyMzE4ZWQwMzY1OWFmNzBjODFjNzlkNGIwODE2NjY5YTY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6Mzg6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTAxZTBiODBkN2RhMS4uMWVmNTBjYTM3ZDQyYiAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTI2ODgsNyAmIzQzOzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbiBcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKTtcbiBcdGlmICghd2VpZ2h0cylcbiBcdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNGM1YmYyMzE4ZWQwMzY1OWFmNzBjODFjNzlkNGIwODE2NjY5YTY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTc6Mzg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jCkBAIC0yNjg4LDcgJiM0MzsyNjg4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAlwcmV2X25vZGUgPSBub2RlOwogCiAJLyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqLwotCXdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTsKJiM0MzsJd2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCAmYW1wOyBHRlBfUkVDTEFJTV9NQVNLKTsKIAlpZiAoIXdlaWdodHMpCiAJCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjaGFuZ2VzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2Vzcy4KCioqRXhhbWluaW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlIGluIG1lbXBvbGljeS5jKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgYG1tL21lbXBvbGljeS5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHNvbWVvbmUmIzM5O3MgbWFraW5nIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhleSYjMzk7cmUgc2hpZnRpbmcgZnJvbSB1c2luZyBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSylgIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gU28sIGl0JiMzOTtzIGEgc3dhcCBmcm9tIHplcm9pbmcgYW5kIGtlcm5lbC1zcGVjaWZpYyBtZW1vcnkgdG8gYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGNodW5rLCBidXQgd2l0aCBtb3JlIG51YW5jZWQgcmVjbGFpbSBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGl0c2VsZi4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBXaGF0JiMzOTtzIGl0IGJlaW5nIHVzZWQgZm9yPyBUaGlzIGZ1bmN0aW9uIGxpa2VseSBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIG1lbW9yeSBwb2xpY3kgaW50ZXJhY3RzIHdpdGggcGFnZSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggTlVNQSBzeXN0ZW1zLiBUaGF0IGNoYW5nZSBmcm9tIGBremFsbG9jYCB0byBga21hbGxvY2AgaXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZS4gSXMgaXQgcGVyZm9ybWFuY2UtZHJpdmVuPyBNZW1vcnkgZm9vdHByaW50PyBPciBpcyB0aGVyZSBhIG1vcmUgZnVuZGFtZW50YWwgaXNzdWUgdGhpcyBpcyBhZGRyZXNzaW5nLCBwZXJoYXBzIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0gdW5kZXIgc3BlY2lmaWMgd29ya2xvYWRzIG9yIGNvbmZpZ3VyYXRpb25zPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGBHRlBfUkVDTEFJTV9NQVNLYCB3aGljaCBtYXkgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgY29kZSBhbmQgZmlndXJlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTI2MDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjM0LVxubW0vbWVtcG9saWN5LmM6MjYzNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYzNi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jPTI3Nzk9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3OTMtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc5NDpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI3OTUtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdlaWdodGVkIEludGVybGVhdmUgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgICp3aGVuKiB0aGUgbWVtb3J5IHBvbGljeSBpcyBzZXQgdG8gYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IGNvbnRleHQuCgpUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIGlzIHRoYXQgd2UmIzM5O3JlIHN3aXRjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbWV0aG9kLiBXZSYjMzk7cmUgZ29pbmcgZnJvbSBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSylgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgYWxsb2NhdGlvbiBmbGFncyBhcmUgYmVpbmcgYWx0ZXJlZCwgd2UmIzM5O3JlIGxvc2luZyB0aGUgemVyb2luZyBvZiB0aGUgbWVtb3J5LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGZpbmUuIE9mdGVuIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgbGF0ZXIuCgpCdXQgd2FpdC4gKklzKiB0aGUgbWVtb3J5IGluaXRpYWxpemVkIGxhdGVyIGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgPyBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzbiYjMzk7dCBnb2luZyB0byBpbnRyb2R1Y2Ugc29tZSBzb3J0IG9mIHNlY3VyaXR5IGxlYWsgb3IgdW5pbml0aWFsaXplZCBkYXRhIHJlYWQuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZnVuY3Rpb24gaXRzZWxmIHRvIHZlcmlmeSB0aGF0IGl0IGRvZXMsIGluIGZhY3QsIGhhbmRsZSB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2ODA6XHRcdFx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xuMjY4MTpcdFx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjgyOlx0XHRcdH1cbjI2ODM6XHRcdFx0LyogT3RoZXJ3aXNlIHdlIGFkanVzdCByZW1haW5pbmcgcGFnZXMsIGNvbnRpbnVlIGZyb20gdGhlcmUgKi9cbjI2ODQ6XHRcdFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcbjI2ODU6XHRcdH1cbjI2ODY6XHRcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbjI2ODc6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4yNjg4Olx0XHRwcmV2X25vZGUgPSBub2RlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuMjY5MTpcdFx0d2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XG4yNjkyOlx0XHRpZiAoIXdlaWdodHMpXG4yNjkzOlx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjk0Olx0XG4yNjk1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjk2Olx0XHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XG4yNjk3Olx0XHRpZiAoc3RhdGUpIHtcbjI2OTg6XHRcdFx0bWVtY3B5KHdlaWdodHMsIHN0YXRlLVx1MDAzZWl3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMjY5OTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3MDA6XHRcdH0gZWxzZSB7XG4yNzAxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjcwMjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4yNzAzOlx0XHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4yNzA0Olx0XHR9XG4yNzA1Olx0XG4yNzA2Olx0XHQvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqL1xuMjcwNzpcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxuMjcwODpcdFx0XHR3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07XG4yNzA5Olx0XG4yNzEwOlx0XHQvKlxuMjcxMTpcdFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4yNzEyOlx0XHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuMjcxMzpcdFx0ICpcbjI3MTQ6XHRcdCAqIGlmIChyb3VuZHMgXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXG4yNzE1Olx0XHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxuMjcxNjpcdFx0ICovXG4yNzE3Olx0XHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XG4yNzE4Olx0XHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcbjI3MTk6XHRcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMDpcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xuMjcyMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm5vZGVzOyBpJiM0MzsmIzQzOykge1xuMjcyMjpcdFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMzpcdFx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuMjcyNDpcdFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuMjcyNTpcdFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuMjcyNjpcdFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuMjcyNzpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IHdlaWdodDtcbjI3Mjg6XHRcdFx0XHRkZWx0YSAtPSB3ZWlnaHQ7XG4yNzI5Olx0XHRcdH0gZWxzZSBpZiAoZGVsdGEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqaXMqIGRlZmVycmVkLCBoYW5kbGVkIGxhdGVyIGluIHRoZSBwcm9jZXNzLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfZGVyZWZlcmVuY2UoKWAgY29uZmlybXMgdGhhdCB0aGUgd2VpZ2h0cyBhcmUgZWl0aGVyIGNvcGllZCBmcm9tIGEgcHJlLWV4aXN0aW5nIHN0YXRlIG9yLCBpZiB0aGF0IHN0YXRlIGlzbiYjMzk7dCBhdmFpbGFibGUsIGluaXRpYWxpemVkIHRvIGFsbCBvbmVzLiBUaGlzIG1ha2VzIHRoZSBga21hbGxvY2AgY2FsbCwgYXMgdXNlZCwgcGVyZmVjdGx5IHZhbGlkIGluIHRoaXMgY29udGV4dC4KClRoZSBzdWJzZXF1ZW50IGNoYW5nZSwgd2hlcmUgYGdmcGAgaXMgYml0d2lzZS1BTkRlZCB3aXRoIGBHRlBfUkVDTEFJTV9NQVNLYCwgaXMgYWxzbyBmdW5jdGlvbmFsbHkgc291bmQuIEl0JiMzOTtzIGEgcHJ1ZGVudCBtb3ZlLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYEdGUF9LRVJORUxgIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgYmxvY2tpbmcgb3IgcHJvYmxlbXMgaWYgdGhlIGNhbGxpbmcgY29kZSBpbmFkdmVydGVudGx5IHBhc3NlcyBhdG9taWMgR0ZQIGZsYWdzLiBUaGlzIGlzIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpbiBgbW0vbWVtcG9saWN5LmNgLgoKSSBiZWxpZXZlIHRoaXMgaXMgYSBmdW5jdGlvbmFsbHkgaW1wb3J0YW50IGNoYW5nZSB3b3J0aHkgb2YgYXR0ZW50aW9uLCBzbyBJIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZz10cnVlYCBmb3IgdGhpcyBjb2RlLgoKTm93IEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGUgY2FsbGVyIGlzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHdoaWNoIGlzIGV4cG9ydGVkLiBJIGFtIG5vdCBjZXJ0YWluIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGEgbWFjcm8sIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgZWxzZS4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc3OC0gKi9cbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc4MC1cdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIEV4cG9ydCBTdGF0dXMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gR2l2ZW4gdGhhdCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB3aGV0aGVyIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyB0aGlzIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGJlIHVzZWQgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0PyBEZXRlcm1pbmluZyBpdHMgZXhwb3J0IHN0YXR1cyBpcyBjcnVjaWFsLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBpdCYjMzk7cyB0cmVhdGVkIGJ5IHRoZSBsaW5rZXIgYW5kIGl0cyB2aXNpYmlsaXR5IGFjcm9zcyBtb2R1bGVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gdGhlIHN5bWJvbCB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphbGxvY19wYWdlc19idWxrX21lbXBvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdHJhY2UgaXRzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIFdoZXJlIGlzIGl0IGxvY2F0ZWQ/IElzIGl0IGEgaGVhZGVyIGZpbGU/IEEgc3RhdGljIGlubGluZSBmdW5jdGlvbj8gT3IgaXMgaXQgZGVmaW5lZCBpbiBzb21lIHNwZWNpZmljIGAuY2AgZmlsZSBzb21ld2hlcmU/IEtub3dpbmcgdGhlIGV4YWN0IGRlY2xhcmF0aW9uIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUsIHRoZSB0eXBlcyBvZiBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCBwb3RlbnRpYWxseSB3aGV0aGVyIGl0JiMzOTtzIHN1YmplY3QgdG8gY2VydGFpbiBidWlsZC10aW1lIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNzZWN0aW5nIGFueSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhpcyBkZWNsYXJhdGlvbiBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMS0jZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc4LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3OTp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxubW0vdm1hbGxvYy5jPTM2Njk9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vdm1hbGxvYy5jLTM3MzYtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxubW0vdm1hbGxvYy5jOjM3Mzc6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXG5tbS92bWFsbG9jLmMtMzczOC1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSB2bWFsbG9jIGFyZWEuIFRoZSBjYWxsIHN0YWNrIHN0YXJ0cyB3aXRoIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpbiBgbW0vdm1hbGxvYy5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSwgaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGJ1bGsgb2YgdGhlIHdvcmsgaXMgZG9uZS4gQnV0LCBoYW5nIG9uLi4uIGlzIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBhbHNvIHdvcnRoIGEgbG9vaz8gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBzbyBkZWZpbml0ZWx5LiBXYWl0IGEgbWludXRlLi4uIGlzbiYjMzk7dCB0aGF0IHN0YXRpYz8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgc28gSSBkb24mIzM5O3Qgd2FzdGUgdGltZSBvbiBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXh0ZXJuYWxseSB2aXNpYmxlLiBPa2F5LCB0aW1lIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzbyBJIGNhbiBkZWNpZGUgaWYgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bV9hcmVhX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zNjY4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG5tbS92bWFsbG9jLmM6MzY2OTp2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbm1tL3ZtYWxsb2MuYy0zNjcwLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcylcbi0tXG5tbS92bWFsbG9jLmM9Mzg2Nj1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtMzkxNC1cdCAqL1xubW0vdm1hbGxvYy5jOjM5MTU6XHRhcmVhLVx1MDAzZW5yX3BhZ2VzID0gdm1fYXJlYV9hbGxvY19wYWdlcyhcbm1tL3ZtYWxsb2MuYy0zOTE2LVx0XHRcdHZtYWxsb2NfZ2ZwX2FkanVzdChnZnBfbWFzaywgcGFnZV9vcmRlciksIG5vZGUsXG4tLVxubW0vdm1hbGxvYy5jLTM5MjQtXHRcdC8qXG5tbS92bWFsbG9jLmM6MzkyNTpcdFx0ICogdm1fYXJlYV9hbGxvY19wYWdlcygpIGNhbiBmYWlsIGR1ZSB0byBpbnN1ZmZpY2llbnQgbWVtb3J5IGJ1dFxubW0vdm1hbGxvYy5jLTM5MjYtXHRcdCAqIGFsc286LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgSSBwcm9iYWJseSB3b24mIzM5O3QgZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZSBkaXJlY3RseSwgc28gbGV0JiMzOTtzIHNoaWZ0IG91ciBmb2N1cy4gTG9va3MgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgc3ltYm9sIHRvIGV4YW1pbmUuIFRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgY2FsbGVycyBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYD8gTGV0IG1lIHNlZS4uLiBub3BlLCB0aGUgb25seSBwbGFjZSBpdCYjMzk7cyBjYWxsZWQgaXMgZnJvbSBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaW4gYG1tL3ZtYWxsb2MuY2AuIFdhaXQgYSBtaW51dGUsIGhvbGQgdXAhIEkmIzM5O20gZm9yZ2V0dGluZyBzb21ldGhpbmcuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgaXMgYSBtYWNybywgbm90IGEgZnVuY3Rpb24sIHNvIGl0IG1pZ2h0IGJlIGV4cGFuZGVkIGFuZCBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMuIEFscmlnaHQsIGxldCYjMzk7cyBiYWNrIHVwIGFuZCBjaGVjayBob3cgdGhhdCBtYWNybyBpdHNlbGYgaXMgdXNlZC4gTmVlZCB0byBzZWUgd2hhdCBwbGFjZXMgaW4gdGhlIGNvZGUgdGhhdCBtYWNybyBpcyBhY3R1YWxseSBleHBhbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxuLS1cbm1tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc3OC0gKi9cbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc4MC1cdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuLS1cbm1tL3ZtYWxsb2MuYz0zNjY5PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzM2LVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzM3Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3MzgtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCBNYWNybyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIEkmIzM5O20gZXhhbWluaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZywgZ29vZCB0byBrbm93IHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UuIE5vdywgdGhlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgbWFjcm8gaXMgdGhlIG5leHQgdGhpbmcgSSYjMzk7bSBmb2N1c2VkIG9uIGFuZCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGVyZSB0aGF0JiMzOTtzIGJlaW5nIGludm9rZWQuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgbWFjcm8gaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGltZSB0byBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyB1c2VkLCBpZiBhdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yNzUzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NzgtICovXG5tbS9tZW1wb2xpY3kuYzoyNzc5OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3ODAtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS92bWFsbG9jLmM9MzY2OT12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS92bWFsbG9jLmMtMzczNi1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXHUwMDI2XHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXG5tbS92bWFsbG9jLmM6MzczNzpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbm1tL3ZtYWxsb2MuYy0zNzM4LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGh1bmNoIHdhcyByaWdodDsgaXQgYXBwZWFycyBvbmx5IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGRpcmVjdGx5IGVtcGxveWVkIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gSW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGUuLi4gV2h5IGlzIGBtbS92bWFsbG9jLmNgIHVzaW5nIHRoZSAqZnVuY3Rpb24qIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIG1hY3JvPyBTaG91bGRuJiMzOTt0IGl0IGJlIGdvaW5nIHRocm91Z2ggdGhlIHN0YW5kYXJkIGFic3RyYWN0aW9uPyBUaGlzIGlzIHVudXN1YWwuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vdm1hbGxvYy5jYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzczMDpcdFxuMzczMTpcdFx0XHRcdC8qIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBtZW1wb2xpY3ksIHdlIGNhbiYjMzk7dFxuMzczMjpcdFx0XHRcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG4zNzMzOlx0XHRcdFx0ICogb3RoZXJ3aXNlIG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGluIG9ubHkgb25lIG5vZGUsXG4zNzM0Olx0XHRcdFx0ICogYnV0IG1lbXBvbGljeSB3YW50cyB0byBhbGxvYyBtZW1vcnkgYnkgaW50ZXJsZWF2aW5nLlxuMzczNTpcdFx0XHRcdCAqL1xuMzczNjpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbjM3Mzc6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbjM3Mzg6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzM5Olx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc0MDpcdFx0XHRcdGVsc2VcbjM3NDE6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcbjM3NDI6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzQzOlx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc0NDpcdFxuMzc0NTpcdFx0XHRcdGZvciAoaSA9IG5yX2FsbG9jYXRlZDsgaSBcdTAwM2MgbnJfYWxsb2NhdGVkICYjNDM7IG5yOyBpJiM0MzsmIzQzOylcbjM3NDY6XHRcdFx0XHRcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XG4zNzQ3Olx0XG4zNzQ4Olx0XHRcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBucjtcbjM3NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gY29kZSwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQgZGlyZWN0bHkgdXRpbGl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoYXQgZnVuY3Rpb24sIHRoZXJlZm9yZSwgaXMgZGVmaW5pdGVseSBhIGtleSBmb2NhbCBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBhbGxvY2F0aW9uIHByb2Nlc3MuCgpOb3csIHdoYXQgYWJvdXQgYF9fdm1hbGxvY19hcmVhX25vZGVgPyBBaCwgcmlnaHQsIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgd2hpbGUgaW1wb3J0YW50IGludGVybmFsbHksIGl0IHdvbiYjMzk7dCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBpdHMgc2NvcGUuIEJ1dCwgYF9fdm1hbGxvY19ub2RlYCBpcyBleHBvcnRlZCwgYW5kIGl0IGNhbGxzIHRoYXQgc3RhdGljIGZ1bmN0aW9uLiBXb3J0aCBrZWVwaW5nIHRoYXQgaW4gbWluZCBhcyBhIHBvaW50IG9mIGNvbXBhcmlzb24uCgpXYWl0LCBiYWNrIHRvIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLi4uaXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQ/IE5vLCBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiByZXNpZGluZyB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0sIGFzc3VtaW5nIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBjb25maWd1cmF0aW9uLgoKV2hpY2ggYnJpbmdzIG1lIHRvIHRoZSBuZXh0IHF1ZXN0aW9uOiBpcyBgQ09ORklHX05VTUFgIGEgcmVxdWlyZW1lbnQgaGVyZT8gWWVzLCBhYnNvbHV0ZWx5LiBgQ09ORklHX05VTUFgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSBjb21waWxhdGlvbiBvZiBgbW0vbWVtcG9saWN5LmNgIGFuZCB0aGF0IHRoZSBgSVNfRU5BQkxFRChDT05GSUdfTlVNQSlgIG1hY3JvIGV2YWx1YXRlcyB0byB0cnVlLiBXaXRob3V0IHRoYXQsIHdlIHdvdWxkbiYjMzk7dCBldmVuIGJlIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbi4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgZGVwZW5kZW5jeSBpbiBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGUtdGltZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc2MQoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX05VTUFgIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGhlcmUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gbWVtcG9saWN5LCBzcGVjaWZpY2FsbHkgaW4gaG93IGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgd2l0aCBhIHdlaWdodGVkIGludGVybGVhdmUgcG9saWN5LiBUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3Mgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLCBzaGlmdGluZyBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwICZhbXA7IEdGUF9SRUNMQUlNX01BU0spYC4gVGhpcyBzY3JlYW1zIGZ1enppbmcgb3Bwb3J0dW5pdHkuCgpUaGVyZWZvcmUsIGZvciBteSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBUaGUgZm9jdXMgc3ltYm9sIEkmIzM5O3ZlIGNob3NlbiBpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgZXhwbGljaXRseSBzZXQgdG8gYE5VTUFgIGJlY2F1c2UgdGhhdCYjMzk7cyBlc3NlbnRpYWwgZm9yIHRoaXMgY2hhbmdlLiBUaGUgcmF0aW9uYWxlIGlzIHByZWNpc2VseSB0aGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYWx0ZXJhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygd2VpZ2h0ZWQgaW50ZXJsZWF2ZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb2N1cyBzeW1ib2wuIENoZWNraW5nLi4uIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLCB3aGVyZWFzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBJIG1hZGUgdGhlIHJpZ2h0IGNob2ljZS4gTXkgcmVhc29uaW5nIGlzIHNvdW5kLiAgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXQgaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtZW1wb2xpY3kpIHRoYXQgYWZmZWN0cyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24gd2l0aCB3ZWlnaHRlZCBpbnRlcmxlYXZlIHBvbGljeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYGt6YWxsb2NgIHdpdGggYGttYWxsb2NgIGZvciB0aGUgYHdlaWdodHNgIGFycmF5IGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBXaGlsZSB0aGlzIHJlbW92ZXMgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnksIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGFsbG9jYXRpb24gd2l0aCBlaXRoZXIgYSBgbWVtY3B5YCB0aGF0IGZ1bGx5IHBvcHVsYXRlcyB0aGUgYXJyYXkgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDRjNWJmMjMxOGVkMDM2NTlhZjcwYzgxYzc5ZDRiMDgxNjY2OWE2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDE3OjM4OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA1MDFlMGI4MGQ3ZGExLi4xZWY1MGNhMzdkNDJiIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMjY4OCw3ICYjNDM7MjY4OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJcHJldl9ub2RlID0gbm9kZTsKIAogCS8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi8KLQl3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7CiYjNDM7CXdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSyk7CiAJaWYgKCF3ZWlnaHRzKQogCQlyZXR1cm4gdG90YWxfYWxsb2NhdGVkOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggaG93IHdlIGFsbG9jYXRlIG1lbW9yeSBpbiBgbW0vbWVtcG9saWN5LmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCBga3phbGxvY2AgZm9yIGBrbWFsbG9jYCB3aGVuIGFsbG9jYXRpbmcgYG5yX25vZGVfaWRzYCBieXRlcy4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZS4gQmFzaWNhbGx5LCBgd2VpZ2h0c2AgaXMgbm8gbG9uZ2VyIGdvaW5nIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB3ZSYjMzk7cmUgbm93IHVzaW5nIGBrbWFsbG9jYCB3aXRoIGBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTS2AgaW5zdGVhZC4KClRoYXQmIzM5O3MgYW4gaW1tZWRpYXRlIHJlZCBmbGFnLiBNeSBicmFpbiBpcyBzY3JlYW1pbmcsICYjMzQ7VW5pbml0aWFsaXplZCBtZW1vcnkhIFBvdGVudGlhbCBidWdzISYjMzQ7LiBUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHdlICphY3R1YWxseSogaW5pdGlhbGl6aW5nIHRoZSBgd2VpZ2h0c2AgYXJyYXkgYmVmb3JlIGl0cyBmaXJzdCB1c2U/IFRoaXMgaXMgY3JpdGljYWwuIElmIHdlJiMzOTtyZSBub3QsIHdlIGNvdWxkIGhhdmUgc2VyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGRhdGEgbGVha3MsIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGNvZGUgcmlnaHQgYXdheSBhbmQgdHJhY2UgYWxsIHVzZXMgb2YgYHdlaWdodHNgIHRvIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLCBhbmQgaXMgc2FmZS4gSSBtdXN0IGNvbmZpcm0gdGhlIGltcGFjdCBvZiB0aGlzIGBrbWFsbG9jYCBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTI2MDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjM0LVxubW0vbWVtcG9saWN5LmM6MjYzNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYzNi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jPTI3Nzk9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3OTMtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc5NDpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI3OTUtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nIGlzIGltcGxlbWVudGVkIGF0IHRoZSBjb3JlIGFsbG9jYXRpb24gbGV2ZWwsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGNvb3JkaW5hdGluZyBwYWdlIGRpc3RyaWJ1dGlvbiBhY3Jvc3MgTlVNQSBub2RlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHdlaWdodHMuIE15IGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gbGV2ZXJhZ2VzIHRoZSBleGlzdGluZyBtZW1vcnkgcG9saWN5IGluZnJhc3RydWN0dXJlLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgaXQgZXh0ZW5kcyBhbmQgb3B0aW1pemVzIGl0IGZvciBidWxrIG9wZXJhdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgaWYgaXQgaW1wbGVtZW50cyBhbnkgZm9ybSBvZiBmYWlybmVzcyBvciByZXRyeSBtZWNoYW5pc21zIHRvIGRlYWwgd2l0aCByZXNvdXJjZSBjb250ZW50aW9uLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgb3B0aW1pemF0aW9ucyBzcGVjaWZpYyB0byBidWxrIGFsbG9jYXRpb24gY29tcGFyZWQgdG8gc2luZ2xlLXBhZ2UgYWxsb2NhdGlvbiDigJMgcGVyaGFwcyBiYXRjaGluZyBvZiBub2RlIHNlbGVjdGlvbiBvciBwcmUtY2FsY3VsYXRpb24gb2YgYWxsb2NhdGlvbiB0YXJnZXRzLiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBsaW5lcyB1cCB3aXRoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYzNTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4yNjM2Olx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjI2Mzc6XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuMjYzODpcdHtcbjI2Mzk6XHRcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbjI2NDA6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50O1xuMjY0MTpcdFx0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbjI2NDI6XHRcdHVuc2lnbmVkIGxvbmcgdG90YWxfYWxsb2NhdGVkID0gMDtcbjI2NDM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcbjI2NDQ6XHRcdHVuc2lnbmVkIGxvbmcgcm91bmRzO1xuMjY0NTpcdFx0dW5zaWduZWQgbG9uZyBub2RlX3BhZ2VzLCBkZWx0YTtcbjI2NDY6XHRcdHU4ICp3ZWlnaHRzLCB3ZWlnaHQ7XG4yNjQ3Olx0XHR1bnNpZ25lZCBpbnQgd2VpZ2h0X3RvdGFsID0gMDtcbjI2NDg6XHRcdHVuc2lnbmVkIGxvbmcgcmVtX3BhZ2VzID0gbnJfcGFnZXM7XG4yNjQ5Olx0XHRub2RlbWFza190IG5vZGVzO1xuMjY1MDpcdFx0aW50IG5ub2Rlcywgbm9kZTtcbjI2NTE6XHRcdGludCByZXN1bWVfbm9kZSA9IE1BWF9OVU1OT0RFUyAtIDE7XG4yNjUyOlx0XHR1OCByZXN1bWVfd2VpZ2h0ID0gMDtcbjI2NTM6XHRcdGludCBwcmV2X25vZGU7XG4yNjU0Olx0XHRpbnQgaTtcbjI2NTU6XHRcbjI2NTY6XHRcdGlmICghbnJfcGFnZXMpXG4yNjU3Olx0XHRcdHJldHVybiAwO1xuMjY1ODpcdFxuMjY1OTpcdFx0LyogcmVhZCB0aGUgbm9kZXMgb250byB0aGUgc3RhY2ssIHJldHJ5IGlmIGRvbmUgZHVyaW5nIHJlYmluZCAqL1xuMjY2MDpcdFx0ZG8ge1xuMjY2MTpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuMjY2MjpcdFx0XHRubm9kZXMgPSByZWFkX29uY2VfcG9saWN5X25vZGVtYXNrKHBvbCwgXHUwMDI2bm9kZXMpO1xuMjY2MzpcdFx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG4yNjY0Olx0XG4yNjY1Olx0XHQvKiBpZiB0aGUgbm9kZW1hc2sgaGFzIGJlY29tZSBpbnZhbGlkLCB3ZSBjYW5ub3QgZG8gYW55dGhpbmcgKi9cbjI2NjY6XHRcdGlmICghbm5vZGVzKVxuMjY2NzpcdFx0XHRyZXR1cm4gMDtcbjI2Njg6XHRcbjI2Njk6XHRcdC8qIENvbnRpbnVlIGFsbG9jYXRpbmcgZnJvbSBtb3N0IHJlY2VudCBub2RlIGFuZCBhZGp1c3QgdGhlIG5yX3BhZ2VzICovXG4yNjcwOlx0XHRub2RlID0gbWUtXHUwMDNlaWxfcHJldjtcbjI2NzE6XHRcdHdlaWdodCA9IG1lLVx1MDAzZWlsX3dlaWdodDtcbjI2NzI6XHRcdGlmICh3ZWlnaHQgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgbm9kZXMpKSB7XG4yNjczOlx0XHRcdG5vZGVfcGFnZXMgPSBtaW4ocmVtX3BhZ2VzLCB3ZWlnaHQpO1xuMjY3NDpcdFx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxuMjY3NTpcdFx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4yNjc2Olx0XHRcdHBhZ2VfYXJyYXkgJiM0Mzs9IG5yX2FsbG9jYXRlZDtcbjI2Nzc6XHRcdFx0dG90YWxfYWxsb2NhdGVkICYjNDM7PSBucl9hbGxvY2F0ZWQ7XG4yNjc4Olx0XHRcdC8qIGlmIHRoYXQmIzM5O3MgYWxsIHRoZSBwYWdlcywgbm8gbmVlZCB0byBpbnRlcmxlYXZlICovXG4yNjc5Olx0XHRcdGlmIChyZW1fcGFnZXMgXHUwMDNjPSB3ZWlnaHQpIHtcbjI2ODA6XHRcdFx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xuMjY4MTpcdFx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjgyOlx0XHRcdH1cbjI2ODM6XHRcdFx0LyogT3RoZXJ3aXNlIHdlIGFkanVzdCByZW1haW5pbmcgcGFnZXMsIGNvbnRpbnVlIGZyb20gdGhlcmUgKi9cbjI2ODQ6XHRcdFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcbjI2ODU6XHRcdH1cbjI2ODY6XHRcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbjI2ODc6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4yNjg4Olx0XHRwcmV2X25vZGUgPSBub2RlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuMjY5MTpcdFx0d2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XG4yNjkyOlx0XHRpZiAoIXdlaWdodHMpXG4yNjkzOlx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjk0Olx0XG4yNjk1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjk2Olx0XHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XG4yNjk3Olx0XHRpZiAoc3RhdGUpIHtcbjI2OTg6XHRcdFx0bWVtY3B5KHdlaWdodHMsIHN0YXRlLVx1MDAzZWl3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMjY5OTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3MDA6XHRcdH0gZWxzZSB7XG4yNzAxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjcwMjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4yNzAzOlx0XHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4yNzA0Olx0XHR9XG4yNzA1Olx0XG4yNzA2Olx0XHQvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqL1xuMjcwNzpcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxuMjcwODpcdFx0XHR3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07XG4yNzA5Olx0XG4yNzEwOlx0XHQvKlxuMjcxMTpcdFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4yNzEyOlx0XHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuMjcxMzpcdFx0ICpcbjI3MTQ6XHRcdCAqIGlmIChyb3VuZHMgXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXG4yNzE1Olx0XHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxuMjcxNjpcdFx0ICovXG4yNzE3Olx0XHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XG4yNzE4Olx0XHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcbjI3MTk6XHRcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMDpcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xuMjcyMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm5vZGVzOyBpJiM0MzsmIzQzOykge1xuMjcyMjpcdFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMzpcdFx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuMjcyNDpcdFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuMjcyNTpcdFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuMjcyNjpcdFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuMjcyNzpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IHdlaWdodDtcbjI3Mjg6XHRcdFx0XHRkZWx0YSAtPSB3ZWlnaHQ7XG4yNzI5Olx0XHRcdH0gZWxzZSBpZiAoZGVsdGEpIHtcbjI3MzA6XHRcdFx0XHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cbjI3MzE6XHRcdFx0XHRub2RlX3BhZ2VzICYjNDM7PSBkZWx0YTtcbjI3MzI6XHRcdFx0XHRyZXN1bWVfbm9kZSA9IG5vZGU7XG4yNzMzOlx0XHRcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xuMjczNDpcdFx0XHRcdGRlbHRhID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIENvZGUgU25pcHBldCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBncmFiYmluZyBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzLCBgd2VpZ2h0c2AuIEkmIzM5O20gdXNpbmcgYGttYWxsb2NgIHRvIGFsbG9jYXRlIHRoZSBuZWNlc3NhcnkgbWVtb3J5LCBhIGNvbW1vbiBwcmFjdGljZSB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgbWFuYWdpbmcgbWVtb3J5IGR5bmFtaWNhbGx5LiBUaGVuIEkmIzM5O20gY2hlY2tpbmcgaWYgbWVtb3J5IGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGlmIG5vdCwgSSYjMzk7bGwgYmFpbCBvdXQgYW5kIHJldHVybiB0aGUgdG90YWwgYWxsb2NhdGVkLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBjbGV2ZXIgcGFydC4gSSYjMzk7bSB1c2luZyBhbiBSQ1UgcmVhZCBsb2NrLCB3aGljaCBtZWFucyBJJiMzOTttIGFjY2Vzc2luZyBzaGFyZWQgZGF0YSAoYHdpX3N0YXRlYCkgd2l0aCBhIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBJIGRlcmVmZXJlbmNlIGB3aV9zdGF0ZWAgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAsIHdoaWNoIGlzIGhvdyB3ZSBzYWZlbHkgYWNjZXNzIGRhdGEgcHJvdGVjdGVkIGJ5IFJDVS4gSSYjMzk7bSBjaGVja2luZyBpZiB0aGUgc3RhdGUgaXMgbm9uLU5VTEwuIElmIGl0IGlzLCBJIGNvcHkgdGhlIGNvbnRlbnRzIG9mIGBzdGF0ZS0mZ3Q7aXdfdGFibGVgIGludG8gbXkgbG9jYWwgYHdlaWdodHNgIGFycmF5LiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgSSYjMzk7bSBjb3B5aW5nIGBucl9ub2RlX2lkcyAqIHNpemVvZih1OClgIGJ5dGVzLCBpbXBseWluZyB0aGF0IGBzdGF0ZS0mZ3Q7aXdfdGFibGVgIGlzIGFuIGFycmF5IG9mIHNpemUgYG5yX25vZGVfaWRzYCwgd2hpY2ggY29udGFpbnMgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMuIEkmIzM5O20gcmVsZWFzaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIGFmdGVyIHRoaXMgY29weSBpcyBkb25lLCBjb21wbGV0aW5nIHRoZSBzYWZlIHJlYWQuCgpJZiBgc3RhdGVgICppcyogTlVMTCwgaW5kaWNhdGluZyBpdCYjMzk7cyB1bmluaXRpYWxpemVkLCBJIHJlbGVhc2UgdGhlIGxvY2sgYW5kIHRoZW4gaW5pdGlhbGl6ZSBhbGwgZWxlbWVudHMgb2YgdGhlIGB3ZWlnaHRzYCBhcnJheSB0byAxLiBUaGlzIGVuc3VyZXMgdGhhdCBgd2VpZ2h0c2AgYWx3YXlzIGhhcyB2YWxpZCBkYXRhLgoKU28sIGluIGJvdGggc2NlbmFyaW9zIOKAkyB3aGV0aGVyIHRoZSBzdGF0ZSBpcyBpbml0aWFsaXplZCBvciBub3Qg4oCTIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheSBpcyBlaXRoZXIgcG9wdWxhdGVkIGJ5IGEgbWVtY3B5LCBpZiB0aGUgc3RhdGUgZXhpc3RzLCBvciBieSBhIGxvb3AgdGhhdCBpbml0aWFsaXplcyBlYWNoIGVsZW1lbnQgdG8gMS4gSXQgc2VlbXMgbGlrZSB0aGUgc3RhdGUgYmVpbmcgTlVMTCBpcyBoYW5kbGVkIGdyYWNlZnVsbHkgaGVyZS4KCkkmIzM5O2xsIGp1c3QgcXVpY2tseSBkb3VibGUgY2hlY2sgdGhhdCBgc3RhdGUtJmd0O2l3X3RhYmxlYCBpcyBpbmRlZWQgYW4gYXJyYXkgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUsIGdpdmVuIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAuIEdvb2QgcHJhY3RpY2UgdG8gYWx3YXlzIHZlcmlmeSBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIHN0cnVjdHVyZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTE1Mj1zdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4tLVxubW0vbWVtcG9saWN5LmMtMTU3LSAqL1xubW0vbWVtcG9saWN5LmM6MTU4OnN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcbm1tL21lbXBvbGljeS5jLTE1OS1cdGJvb2wgbW9kZV9hdXRvO1xuLS1cbm1tL21lbXBvbGljeS5jLTE2MS19O1xubW0vbWVtcG9saWN5LmM6MTYyOnN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0xNjMtc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNzE9c3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xubW0vbWVtcG9saWN5LmM6MTczOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMTc0LVx0dTggd2VpZ2h0ID0gMTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMjE9aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTIyMi17XG5tbS9tZW1wb2xpY3kuYzoyMjM6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTIyNC1cdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xuLS1cbm1tL21lbXBvbGljeS5jPTIyMDY9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHBnb2ZmX3QgaWx4KVxubW0vbWVtcG9saWN5LmMtMjIwNy17XG5tbS9tZW1wb2xpY3kuYzoyMjA4Olx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMjIwOS1cdG5vZGVtYXNrX3Qgbm9kZW1hc2s7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYzNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2Mzgte1xubW0vbWVtcG9saWN5LmM6MjYzOTpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbm1tL21lbXBvbGljeS5jLTI2NDAtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNjQzPXN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjQ1LXtcbm1tL21lbXBvbGljeS5jOjM2NDY6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTM2NDctXHRzdHJ1Y3QgaXdfbm9kZV9hdHRyICpub2RlX2F0dHI7XG4tLVxubW0vbWVtcG9saWN5LmM9MzY4Mj1zdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjg0LXtcbm1tL21lbXBvbGljeS5jOjM2ODU6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNjg2LVx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNjk3PXN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjk5LXtcbm1tL21lbXBvbGljeS5jOjM3MDA6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTM3MDEtXHR1bnNpZ25lZCBpbnQgKmJ3O1xuLS1cbm1tL21lbXBvbGljeS5jPTM3ODE9c3RhdGljIHZvaWQgd2lfc3RhdGVfZnJlZSh2b2lkKVxubW0vbWVtcG9saWN5LmMtMzc4Mi17XG5tbS9tZW1wb2xpY3kuYzozNzgzOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKm9sZF93aV9zdGF0ZTtcbm1tL21lbXBvbGljeS5jLTM3ODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgZGVmaW5pdGlvbiBpbiBgbW0vbWVtcG9saWN5LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGlzIGltcGxlbWVudGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdHJ1Y3R1cmUgZm9yIHRoZSBgTVBPTF9JTlRFUkxFQVZFYCBwb2xpY3ksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcG9uZW50cyB0byBncmFzcCB0aGUgaW50cmljYWNpZXMgb2YgaG93IHBhZ2VzIGFyZSBkaXN0cmlidXRlZCBhY3Jvc3MgTlVNQSBub2RlcywgZXNwZWNpYWxseSB3aGVuIHdlaWdodHMgYXJlIGludm9sdmVkLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBydW50aW1lIHN0YXRlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBtYW5hZ2UgdGhlIGludGVybGVhdmluZyBwcm9jZXNzLiBUaGluZ3MgbGlrZSB3aGljaCBub2RlIHRoZSBjdXJyZW50IHBhZ2UgYWxsb2NhdGlvbiBpcyAmIzM0O3BvaW50aW5nIHRvJiMzNDsgYW5kIG1heWJlIHNvbWUgc29ydCBvZiB3ZWlnaHRpbmcgbWVjaGFuaXNtIHRvIGNvbnNpZGVyIHdoZW4gdGhlIHdlaWdodHMgYXJlIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0LCBJIHN1c3BlY3QgdGhleSBoYXZlIGRpZmZlcmVudCBsb2dpYyBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB0eXBlLCBub3JtYWwgbWVtb3J5LCBodWdlIHBhZ2VzLCBldGMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYWN0dWFsbHkgbWFrZSB0aGUgZGVjaXNpb24gZm9yIGludGVybGVhdmluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0ICogYmVlbiBmb3VuZCB0byBwZXJmb3JtIGF0IGEgcmVhc29uYWJsZSBjb21wcm9taXNlIGJldHdlZW4gdGhlIHR3byBnb2Fscy5cbiAxNTE6XHQgKi9cbiAxNTI6XHRzdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4gMTUzOlx0XG4gMTU0Olx0LypcbiAxNTU6XHQgKiBBIG51bGwgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBpcyBpbnRlcnByZXRlZCBhcyBoYXZpbmcgLm1vZGU9XCYjMzQ7YXV0b1wmIzM0OyxcbiAxNTY6XHQgKiBhbmQgLml3X3RhYmxlIGlzIGludGVycHJldGVkIGFzIGFuIGFycmF5IG9mIDFzIHdpdGggbGVuZ3RoIG5yX25vZGVfaWRzLlxuIDE1NzpcdCAqL1xuIDE1ODpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcbiAxNTk6XHRcdGJvb2wgbW9kZV9hdXRvO1xuIDE2MDpcdFx0dTggaXdfdGFibGVbXTtcbiAxNjE6XHR9O1xuIDE2MjpcdHN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XG4gMTYzOlx0c3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcbiAxNjQ6XHRcbiAxNjU6XHQvKlxuIDE2NjpcdCAqIHdpX3N0YXRlX2xvY2sgcHJvdGVjdHMgYm90aCB3aV9zdGF0ZSBhbmQgbm9kZV9id190YWJsZS5cbiAxNjc6XHQgKiBub2RlX2J3X3RhYmxlIGlzIG9ubHkgdXNlZCBieSB3cml0ZXJzIHRvIHVwZGF0ZSB3aV9zdGF0ZS5cbiAxNjg6XHQgKi9cbiAxNjk6XHRzdGF0aWMgREVGSU5FX01VVEVYKHdpX3N0YXRlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIGBpd190YWJsZWAgYW5kIGB3aV9zdGF0ZWAqKgoKUmlnaHQsIGBpd190YWJsZWAuIFRoYXQmIzM5O3MgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGlzbiYjMzk7dCBpdD8gT2theSwgbm8gcHJvYmxlbSwgdGhhdCBtZWFucyBpdHMgc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIGxpa2VseSBhcyBwYXJ0IG9mIHNvbWUgbGFyZ2VyIHN0cnVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IGFycmF5IGFyZSBtYW5hZ2VkLiBUaGlzIGlzbiYjMzk7dCBuZWNlc3NhcmlseSBhIGJhZCBkZXNpZ24sIGl0IGFsbG93cyBmb3IgZHluYW1pYyBzaXppbmcsIHdoaWNoIGNhbiBiZSB1c2VmdWwuCgpOb3csIGxldCYjMzk7cyB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoaXMgYGl3X3RhYmxlYCBpcyBpbnN0YW50aWF0ZWQsIGFuZCBmb2xsb3cgdGhhdCB0byB1bmRlcnN0YW5kIGhvdyBgd2lfc3RhdGVgIGlzIGFsbG9jYXRlZC4gSSBuZWVkIHRvIHNlZSBpZiBgd2lfc3RhdGVgIGlzIGEgcGFydCBvZiB0aGF0IHBhcmVudCBzdHJ1Y3QsIGFuZCB0aGVyZWZvcmUgbGlrZWx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0b28sIG9yIGlmIGl0IGhhcyBzb21lIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3RyYXRlZ3kuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbC4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGUgYHdpX3N0YXRlYCB2YXJpYWJsZSBleGlzdHMgaW4gbWVtb3J5IHJlbGF0aXZlIHRvIHRoYXQgYGl3X3RhYmxlYCBmbGV4aWJsZSBhcnJheSBtZW1iZXIuIFRoaXMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIG1lbW9yeSBsZWFrcywgYW5kIG92ZXJhbGwgY29kZSByb2J1c3RuZXNzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBzaXplZCBhbmQgaW5pdGlhbGl6ZWQ7IEkgc2VlIHNvbWUgcG90ZW50aWFsIGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvYy4qc2l6ZW9mLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBXaS1GaSBTdGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIGEgcG90ZW50aWFsIG1lbW9yeS1yZWxhdGVkIGlzc3VlLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyByZWxhdGVkIHRvIGhvdyB0aGUgV2ktRmkgZHJpdmVyIGlzIG1hbmFnaW5nIGl0cyBzdGF0ZSAoYHdpX3N0YXRlYCkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdHlwaWNhbCBkZWJ1Z2dpbmcgYXBwcm9hY2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIG1lbW9yeSBhbGxvY2F0aW9ucyBzdXJyb3VuZGluZyB0aGF0IHN0cnVjdHVyZS4gTXkgZ3V0IHNheXMgdGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgaW4gaG93IHRoZSBgd2lfc3RhdGVgIGlzIGJlaW5nIGluaXRpYWxpemVkLCBhbGxvY2F0ZWQsIG9yIGRlYWxsb2NhdGVkLgoKVGhlcmVmb3JlLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgYW5kIGVmZmljaWVudGx5IGlkZW50aWZ5IHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBpbnN0YW5jZXMgb2YgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgY291bGQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBgd2lfc3RhdGVgLiBJJiMzOTtsbCBmb2N1cyBvbiBhIGZldyBrZXkgb25lczogYHN0cnVjdF9zaXplYCwgdG8gc2VlIGhvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIGFyZSBjYWxjdWxhdGVkOyBga3phbGxvY2AsIHNpbmNlIGEgemVyb2VkIGFsbG9jYXRpb24gaXMgb2Z0ZW4gdXNlZCBhdCBzdGF0ZSBpbml0aWFsaXphdGlvbjsgYW5kIGBrbWFsbG9jYCwgYmVjYXVzZSBpdCYjMzk7cyBhIGNvbW1vbiBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSBhcmUgdXNlZCBpbiBjbG9zZSBwcm94aW1pdHkgdG8gYHdpX3N0YXRlYC4gVGhhdCYjMzk7cyBnb2luZyB0byBnaXZlIG1lIHRoZSBzdGFydGluZyBwb2ludCB0byBpbnZlc3RpZ2F0ZSBhbGxvY2F0aW9uIHNpemVzIGFuZCBtZW1vcnkgZGVwZW5kZW5jaWVzLiBCeSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbiBjYWxscywgSSBjYW4gemVybyBpbiBvbiB0aGUgZXhhY3QgbGluZXMgb2YgY29kZSB3aGVyZSB0aGUgc3RhdGUgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYW5kIHRoZXJlZm9yZSBxdWlja2x5IHN0YXJ0IGV2YWx1YXRpbmcgdGhlIGxvZ2ljIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdF9zaXplLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbW0vbWVtcG9saWN5LmNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHBvbGljaWVzIGFnYWluLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggc3RydWN0dXJlIHNpemVzLiBNeSBpbml0aWFsIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyB3b3VsZCBiZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGBtbS9tZW1wb2xpY3kuY2AgZmlsZSBmb3IgaW5zdGFuY2VzIG9mIGBzdHJ1Y3Rfc2l6ZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCYjMzk7bGwgcHJvYmFibHkgaGlnaGxpZ2h0IHdoZXJlIGFuZCBob3cgYHN0cnVjdF9zaXplYCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBoYW5kbGluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBtZW1vcnkgcG9saWN5IGZyYW1ld29yay4gSSBzdXNwZWN0IEkgbWlnaHQgZmluZCBpdCBpbiBwbGFjZXMgcmVsYXRlZCB0byByZXNpemluZyBkYXRhIHN0cnVjdHVyZXMgYmFzZWQgb24gdGhlIHBvbGljeSBpbiBlZmZlY3QuIFRoaXMgZ3JlcCBpcyBhIHF1aWNrIHdheSB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgY29udGV4dCwgZ2l2aW5nIG1lIGEgc29saWQgYmFzaXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgcmVhc29uaW5nLiBJdCBpcyBhIHF1aWNrIGFuZCBkaXJ0eSBhcHByb2FjaCB0byBnZXQgc3RhcnRlZC4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdXAgd2l0aCBjYXJlZnVsIGV4YW1pbmF0aW9uIG9mIHRoZSBhZGphY2VudCBjb2RlLCBidXQgdGhpcyBncmVwIHdpbGwgYmUgaW5zdHJ1bWVudGFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdF9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzE4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBgbW0vbWVtcG9saWN5LmNgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHplcm9pbmcgaW4gb24gaG93IG1lbW9yeSBhbGxvY2F0aW9uIHBsYXlzIG91dCBhcm91bmQgdGhlIGBuZXdfd2lfc3RhdGVgIHZhcmlhYmxlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IEkgbmVlZCB0byBsb29rIGF0IGhvdyBkaWZmZXJlbnQgbWVtb3J5IHBvbGljaWVzIGludGVyYWN0IHdpdGggYWxsb2NhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBncmVwcGluZyB0aGUgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBga21hbGxvY2AgYW5kIGBremFsbG9jYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgd2hlbiBpdCBjb21lcyB0byBhbGxvY2F0aW5nIG1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljaWVzLCBJIGZpZ3VyZSB0aGV5IGFyZSBnb2luZyB0byBwbGF5IGEga2V5IHJvbGUgaW4gc2V0dGluZyB1cCB0aGlzIG5ldyBzdGF0ZS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBhbGxvY2F0aW9uIHBvaW50cyBhbmQgaG93IHRoZSBtZW1wb2xpY3kgaXMgYXBwbGllZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlaXIgdXNhZ2UgdGhhdCBpbmZsdWVuY2UgcG9saWN5IGRlY2lzaW9ucywgb3IgcGVyaGFwcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIGFsbG9jYXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X3dpX3N0YXRlLiphbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTIyMT1pbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxuLS1cbm1tL21lbXBvbGljeS5jLTIzMi1cbm1tL21lbXBvbGljeS5jOjIzMzpcdG5ld193aV9zdGF0ZSA9IGttYWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xubW0vbWVtcG9saWN5LmMtMjM0LVx0aWYgKCFuZXdfd2lfc3RhdGUpIHtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNjQzPXN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjU1LVxubW0vbWVtcG9saWN5LmM6MzY1NjpcdG5ld193aV9zdGF0ZSA9IGt6YWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xubW0vbWVtcG9saWN5LmMtMzY1Ny1cdGlmICghbmV3X3dpX3N0YXRlKVxuLS1cbm1tL21lbXBvbGljeS5jPTM2OTc9c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL21lbXBvbGljeS5jLTM3MDctXG5tbS9tZW1wb2xpY3kuYzozNzA4Olx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG5tbS9tZW1wb2xpY3kuYy0zNzA5LVx0aWYgKCFuZXdfd2lfc3RhdGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoaXMgQ29udGV4dCoqCgpSaWdodCwgc28gSSBzZWUgdGhleSYjMzk7cmUgdXRpbGl6aW5nIGBrbWFsbG9jX2ZsZXhgIGFuZCBga3phbGxvY19mbGV4YCBoZXJlLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZm9jdXMgb24gZmxleGlibGUgYWxsb2NhdGlvbiBzaXplcywgcG90ZW50aWFsbHkgZm9yIHNtYWxsZXIgb2JqZWN0cyBvciBzdHJ1Y3R1cmVzLiBOb3csIHdoYXQmIzM5O3MgZ290IG15IGF0dGVudGlvbiBpcyBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIHVzaW5nIGBrbWFsbG9jX2ZsZXhgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgZGVhbHMgd2l0aCBtZW1vcnkgbm9kZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHBvbGljaWVzLCBzbyB0aGUgY2hvaWNlIG9mIGBrbWFsbG9jX2ZsZXhgIHRoZXJlIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTt2ZSBjaG9zZW4gdGhpcyBhbGxvY2F0aW9uIG1lY2hhbmlzbSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IHBvbGljaWVzLiBXaGF0IGlzIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgYW5kIGRvZXMgaXQgYWxpZ24gd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIGFuZCBkaXNzZWN0IHRoYXQgbGluZSB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIxOlx0aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbiAyMjQ6XHRcdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xuIDIyNTpcdFx0dW5zaWduZWQgaW50IGJ3X3ZhbDtcbiAyMjY6XHRcdGludCBpO1xuIDIyNzpcdFxuIDIyODpcdFx0YndfdmFsID0gbWluKGNvb3Jkcy1cdTAwM2VyZWFkX2JhbmR3aWR0aCwgY29vcmRzLVx1MDAzZXdyaXRlX2JhbmR3aWR0aCk7XG4gMjI5Olx0XHRuZXdfYncgPSBrY2FsbG9jKG5yX25vZGVfaWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7XG4gMjMwOlx0XHRpZiAoIW5ld19idylcbiAyMzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjMyOlx0XG4gMjMzOlx0XHRuZXdfd2lfc3RhdGUgPSBrbWFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbiAyMzQ6XHRcdGlmICghbmV3X3dpX3N0YXRlKSB7XG4gMjM1Olx0XHRcdGtmcmVlKG5ld19idyk7XG4gMjM2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIzNzpcdFx0fVxuIDIzODpcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZW1vZGVfYXV0byA9IHRydWU7XG4gMjM5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4gMjQwOlx0XHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gMjQxOlx0XG4gMjQyOlx0XHQvKlxuIDI0MzpcdFx0ICogVXBkYXRlIGJhbmR3aWR0aCBpbmZvLCBldmVuIGluIG1hbnVhbCBtb2RlLiBUaGF0IHdheSwgd2hlbiBzd2l0Y2hpbmdcbiAyNDQ6XHRcdCAqIHRvIGF1dG8gbW9kZSBpbiB0aGUgZnV0dXJlLCBpd190YWJsZSBjYW4gYmUgb3ZlcndyaXR0ZW4gdXNpbmdcbiAyNDU6XHRcdCAqIGFjY3VyYXRlIGJ3IGRhdGEuXG4gMjQ2Olx0XHQgKi9cbiAyNDc6XHRcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRvbGRfYncgPSBub2RlX2J3X3RhYmxlO1xuIDI1MDpcdFx0aWYgKG9sZF9idylcbiAyNTE6XHRcdFx0bWVtY3B5KG5ld19idywgb2xkX2J3LCBucl9ub2RlX2lkcyAqIHNpemVvZigqb2xkX2J3KSk7XG4gMjUyOlx0XHRuZXdfYndbbm9kZV0gPSBid192YWw7XG4gMjUzOlx0XHRub2RlX2J3X3RhYmxlID0gbmV3X2J3O1xuIDI1NDpcdFxuIDI1NTpcdFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbiAyNTY6XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbiAyNTc6XHRcdGlmIChvbGRfd2lfc3RhdGUgXHUwMDI2XHUwMDI2ICFvbGRfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvKSB7XG4gMjU4Olx0XHRcdC8qIE1hbnVhbCBtb2RlOyBza2lwIHJlZHVjaW5nIHdlaWdodHMgYW5kIHVwZGF0aW5nIHdpX3N0YXRlICovXG4gMjU5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbiAyNjA6XHRcdFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcbiAyNjE6XHRcdFx0Z290byBvdXQ7XG4gMjYyOlx0XHR9XG4gMjYzOlx0XG4gMjY0Olx0XHQvKiBOVUxMIHdpX3N0YXRlIGFzc3VtZXMgYXV0bz10cnVlOyByZWR1Y2Ugd2VpZ2h0cyBhbmQgdXBkYXRlIHdpX3N0YXRlKi9cbiAyNjU6XHRcdHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHMobmV3X2J3LCBuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUpO1xuIDI2NjpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIDI2NzpcdFxuIDI2ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIDI2OTpcdFx0aWYgKG9sZF93aV9zdGF0ZSkge1xuIDI3MDpcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIGluIFdlaWdodGVkIEludGVybGVhdmUgU3RhdGUqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YC4gUmlnaHQgYXdheSwgaXQgc2V0cyBgbmV3X3dpX3N0YXRlLSZndDttb2RlX2F1dG9gIHRvIGB0cnVlYCwgYW5kIHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCBgbnJfbm9kZV9pZHNgIHRvIGluaXRpYWxpemUgYG5ld193aV9zdGF0ZS0mZ3Q7aXdfdGFibGVgIHdpdGggdGhlIHZhbHVlIDEuIFNvLCBiYXNlZCBvbiB0aGF0LCBgbmV3X3dpX3N0YXRlYCBzaG91bGQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHJpZ2h0PwoKQnV0IHdhaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWJvdXQgdGhhdCBga21hbGxvY19mbGV4YCBhbGxvY2F0aW9uLiBJdCYjMzk7cyBkb2luZyBgc2l6ZW9mKHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlKSAmIzQzOyBucl9ub2RlX2lkcyAqIHNpemVvZih1OClgLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBpbiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgpgYGBjCnN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHsKCWJvb2wgbW9kZV9hdXRvOwoJdTggaXdfdGFibGVbXTsKfTsKYGBgCgpBIGBib29sYCBpcyBvbmUgYnl0ZSwgYW5kIGEgYHU4YCBpcyBvbmUgYnl0ZSBhcyB3ZWxsLCBzbyB0aGVyZSYjMzk7cyAqbm8qIHBhZGRpbmcuIFRoaXMgY29uZmlybXMgdGhhdCBgbmV3X3dpX3N0YXRlYCBpcyBpbmRlZWQgZnVsbHkgaW5pdGlhbGl6ZWQuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIHBhdGNoIG1vcmUgYnJvYWRseS4gSSBzZWUgYHdlaWdodHNgIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYC4gSXQmIzM5O3MgZ2V0dGluZyBhc3NpZ25lZCBgbnJfbm9kZV9pZHNgIGJ5dGVzLgoKYGBgYwoJcmN1X3JlYWRfbG9jaygpOwoJc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpOwoJaWYgKHN0YXRlKSB7CgkJbWVtY3B5KHdlaWdodHMsIHN0YXRlLSZndDtpd190YWJsZSwgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTsKCQlyY3VfcmVhZF91bmxvY2soKTsKCX0gZWxzZSB7CgkJcmN1X3JlYWRfdW5sb2NrKCk7CgkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKCQkJd2VpZ2h0c1tpXSA9IDE7Cgl9CmBgYAoKSW4gZWl0aGVyIGJyYW5jaCBvZiB0aGlzIGBpZmAgc3RhdGVtZW50LCBgd2VpZ2h0c2AgZ2V0cyBmdWxseSBpbml0aWFsaXplZC4gRWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSBgc3RhdGUtJmd0O2l3X3RhYmxlYCBvciBieSBzZXR0aW5nIGV2ZXJ5dGhpbmcgdG8gMS4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYG5yX25vZGVfaWRzYCBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIHNpemUgb2YgYHN0YXRlLSZndDtpd190YWJsZWAuIFllcywgYHN0YXRlLSZndDtpd190YWJsZWAgaXMgYWxsb2NhdGVkIHdpdGggYG5yX25vZGVfaWRzYCBlbGVtZW50cywgYW5kIGB3ZWlnaHRzYCBhcmUgYWxzbyBhbGxvY2F0ZWQgd2l0aCBgbnJfbm9kZV9pZHNgIGJ5dGVzLiBTbyBgd2VpZ2h0c2Agc2hvdWxkIGJlIGZ1bGx5IGluaXRpYWxpemVkLgoKSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IEl0IGxvb2tzIGxpa2UgYHdlaWdodHNgIGlzIGZ1bGx5IGluaXRpYWxpemVkICpiZWZvcmUqIGl0IGdldHMgdXNlZC4gSG93ZXZlciwgd2hhdCBpZiBgc3RhdGUtJmd0O2l3X3RhYmxlYCBpdHNlbGYgY29udGFpbnMgdW5pbml0aWFsaXplZCBtZW1vcnk/IEdvaW5nIGJhY2ssIEkgbmVlZCB0byBjaGVjayBob3cgYGl3X3RhYmxlYCBpcyBpbml0aWFsaXplZCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlLiBGcm9tIHdoYXQgSSBjYW4gcmVjYWxsLCB0aGUgZnVuY3Rpb24gYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCAqZG9lcyogaW5pdGlhbGl6ZSBgaXdfdGFibGVgIHRvIDEsIGFuZCB0aGVuIGNhbGxzIGByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKG5ld19idywgbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZSlgLiBTbyBJIG5lZWQgdG8gZ28gb3ZlciBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDE3NzpcdFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuIDE3ODpcdFx0aWYgKHN0YXRlKVxuIDE3OTpcdFx0XHR3ZWlnaHQgPSBzdGF0ZS1cdTAwM2Vpd190YWJsZVtub2RlXTtcbiAxODA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDE4MTpcdFx0cmV0dXJuIHdlaWdodDtcbiAxODI6XHR9XG4gMTgzOlx0XG4gMTg0Olx0LypcbiAxODU6XHQgKiBDb252ZXJ0IGJhbmR3aWR0aCB2YWx1ZXMgaW50byB3ZWlnaHRlZCBpbnRlcmxlYXZlIHdlaWdodHMuXG4gMTg2Olx0ICogQ2FsbCB3aXRoIHdpX3N0YXRlX2xvY2suXG4gMTg3Olx0ICovXG4gMTg4Olx0c3RhdGljIHZvaWQgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyh1bnNpZ25lZCBpbnQgKmJ3LCB1OCAqbmV3X2l3KVxuIDE4OTpcdHtcbiAxOTA6XHRcdHU2NCBzdW1fYncgPSAwO1xuIDE5MTpcdFx0dW5zaWduZWQgaW50IGNhc3Rfc3VtX2J3LCBzY2FsaW5nX2ZhY3RvciA9IDEsIGl3X2djZCA9IDA7XG4gMTkyOlx0XHRpbnQgbmlkO1xuIDE5MzpcdFxuIDE5NDpcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxuIDE5NTpcdFx0XHRzdW1fYncgJiM0Mzs9IGJ3W25pZF07XG4gMTk2Olx0XG4gMTk3Olx0XHQvKiBTY2FsZSBiYW5kd2lkdGhzIHRvIHdob2xlIG51bWJlcnMgaW4gdGhlIHJhbmdlIFsxLCB3ZWlnaHRpbmVzc10gKi9cbiAxOTg6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuIDE5OTpcdFx0XHQvKlxuIDIwMDpcdFx0XHQgKiBUcnkgbm90IHRvIHBlcmZvcm0gNjQtYml0IGRpdmlzaW9uLlxuIDIwMTpcdFx0XHQgKiBJZiBzdW1fYncgXHUwMDNjIHNjYWxpbmdfZmFjdG9yLCB0aGVuIHN1bV9idyBcdTAwM2MgVTMyX01BWC5cbiAyMDI6XHRcdFx0ICogSWYgc3VtX2J3IFx1MDAzZSBzY2FsaW5nX2ZhY3RvciwgdGhlbiByb3VuZCB0aGUgd2VpZ2h0IHVwIHRvIDEuXG4gMjAzOlx0XHRcdCAqL1xuIDIwNDpcdFx0XHRzY2FsaW5nX2ZhY3RvciA9IHdlaWdodGluZXNzICogYndbbmlkXTtcbiAyMDU6XHRcdFx0aWYgKGJ3W25pZF0gXHUwMDI2XHUwMDI2IHN1bV9idyBcdTAwM2Mgc2NhbGluZ19mYWN0b3IpIHtcbiAyMDY6XHRcdFx0XHRjYXN0X3N1bV9idyA9ICh1bnNpZ25lZCBpbnQpc3VtX2J3O1xuIDIwNzpcdFx0XHRcdG5ld19pd1tuaWRdID0gc2NhbGluZ19mYWN0b3IgLyBjYXN0X3N1bV9idztcbiAyMDg6XHRcdFx0fSBlbHNlIHtcbiAyMDk6XHRcdFx0XHRuZXdfaXdbbmlkXSA9IDE7XG4gMjEwOlx0XHRcdH1cbiAyMTE6XHRcdFx0aWYgKCFpd19nY2QpXG4gMjEyOlx0XHRcdFx0aXdfZ2NkID0gbmV3X2l3W25pZF07XG4gMjEzOlx0XHRcdGl3X2djZCA9IGdjZChpd19nY2QsIG5ld19pd1tuaWRdKTtcbiAyMTQ6XHRcdH1cbiAyMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSW50ZXJsZWF2ZSBXZWlnaHQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgZnVuY3Rpb24uLi4gaXQgc2VlbXMgdG8gb25seSBiZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbm9kZSBzdGF0ZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKWAuICBUaGF0JiMzOTtzIGZvY3VzZWQgb24gbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGludGVybGVhdmUgd2VpZ2h0cy4gTXkgY29uY2VybiBpcyB0aGF0IGBuZXdfaXdgLCB3aGljaCByZWZlcnMgdG8gdGhlIGBuZXdfd2lfc3RhdGUtJmd0O2l3X3RhYmxlYCwgaGFzIGEgc2l6ZSBkZWZpbmVkIGJ5IGBucl9ub2RlX2lkc2AuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIuLi4gd2hhdCBhYm91dCB0aGUgbm9kZXMgKm5vdCogY3VycmVudGx5IHByZXNlbnQgd2l0aGluIGBOX01FTU9SWWA/CgpUaGVuIEkgc2F3IHRoaXMgaW5pdGlhbGl6YXRpb24gaW4gYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYDoKCmBgYGMKCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspCgkJbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZVtpXSA9IDE7CmBgYAoKQWhhISBJdCYjMzk7cyAqaW5pdGlhbGl6aW5nKiBhbGwgYG5yX25vZGVfaWRzYCBlbGVtZW50cyBvZiB0aGUgaW50ZXJsZWF2ZSB3ZWlnaHRzIHRvIDEsIHJlZ2FyZGxlc3MuIEFuZCAqdGhlbiogYHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHNgIHNlbGVjdGl2ZWx5IG92ZXJ3cml0ZXMgdGhlIHZhbHVlcyBmb3IgdGhlIG5vZGVzIHRoYXQgKmFyZSogaW4gYE5fTUVNT1JZYC4gIFNvLCAqYWxsKiBlbGVtZW50cyBpbiBgaXdfdGFibGVgIHN0YXJ0IGF0IDEgYW5kIGFyZSB0aGVuIChwb3RlbnRpYWxseSkgbW9kaWZpZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBvcHRpbWl6aW5nLCBhcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgaW50ZXJsZWF2ZSB3ZWlnaHRzIGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZS4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBhbGxvY2F0aW9uIHBvaW50cyB0aGF0IHdvdWxkIGNoYW5nZSB0aGlzIGJlaGF2aW9yLiBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgYG5ld193aV9zdGF0ZWAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3MgbG9vayBhdCBgbm9kZV9zdG9yZWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY0MzpcdHN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbjM2NDQ6XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMzY0NTpcdHtcbjM2NDY6XHRcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xuMzY0NzpcdFx0c3RydWN0IGl3X25vZGVfYXR0ciAqbm9kZV9hdHRyO1xuMzY0ODpcdFx0dTggd2VpZ2h0ID0gMDtcbjM2NDk6XHRcdGludCBpO1xuMzY1MDpcdFxuMzY1MTpcdFx0bm9kZV9hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBpd19ub2RlX2F0dHIsIGtvYmpfYXR0cik7XG4zNjUyOlx0XHRpZiAoY291bnQgPT0gMCB8fCBzeXNmc19zdHJlcShidWYsIFwmIzM0O1wmIzM0OykgfHxcbjM2NTM6XHRcdCAgICBrc3RydG91OChidWYsIDAsIFx1MDAyNndlaWdodCkgfHwgd2VpZ2h0ID09IDApXG4zNjU0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzY1NTpcdFxuMzY1NjpcdFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4zNjU3Olx0XHRpZiAoIW5ld193aV9zdGF0ZSlcbjM2NTg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zNjU5Olx0XG4zNjYwOlx0XHRtdXRleF9sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuMzY2MTpcdFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbjM2NjI6XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbjM2NjM6XHRcdGlmIChvbGRfd2lfc3RhdGUpIHtcbjM2NjQ6XHRcdFx0bWVtY3B5KG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZSwgb2xkX3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLFxuMzY2NTpcdFx0XHRcdFx0XHRucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMzY2NjpcdFx0fSBlbHNlIHtcbjM2Njc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuMzY2ODpcdFx0XHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4zNjY5Olx0XHR9XG4zNjcwOlx0XHRuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGVbbm9kZV9hdHRyLVx1MDAzZW5pZF0gPSB3ZWlnaHQ7XG4zNjcxOlx0XHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gZmFsc2U7XG4zNjcyOlx0XG4zNjczOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4zNjc0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4zNjc1Olx0XHRpZiAob2xkX3dpX3N0YXRlKSB7XG4zNjc2Olx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMzY3NzpcdFx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuMzY3ODpcdFx0fVxuMzY3OTpcdFx0cmV0dXJuIGNvdW50O1xuMzY4MDpcdH1cbjM2ODE6XHRcbjM2ODI6XHRzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3OTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIHNuaXBwZXQ6CgoqKkluaXRpYWxpemF0aW9uIG9mIGBuZXdfd2lfc3RhdGVgIGFuZCBpdHMgV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBUYWJsZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19mbGV4YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IGl0IG1lYW5zIHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYWxsIGl0cyBtZW1iZXJzLCBnZXRzIHplcm9lZCBvdXQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFdlJiMzOTtyZSBnZXR0aW5nIGEgY2xlYW4gc2xhdGUgaGVyZSwgYW5kIHRoYXQgemVyby1pbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLgoKTm93LCB3ZSYjMzk7cmUgZWl0aGVyIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIGBvbGRfd2lfc3RhdGUtJmd0O2l3X3RhYmxlYCBpbnRvIHRoZSBuZXcgb25lLCBvciwgaWYgd2UgZG9uJiMzOTt0IGNvcHksIHdlIHNldCBhbGwgZWxlbWVudHMgb2YgdGhlIHRhYmxlIHRvIDEuIEluIGJvdGggc2NlbmFyaW9zLCB0aGUgYGl3X3RhYmxlYCBpcyBnZXR0aW5nIGZ1bGx5IGFuZCBkZXRlcm1pbmlzdGljYWxseSBpbml0aWFsaXplZC4gVGhpcyBtYWtlcyBzZW5zZS4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgaW50ZXJsZWF2ZSB0YWJsZSBpcyBpbiBhIGtub3duLCBjb25zaXN0ZW50IHN0YXRlIGJlZm9yZSBhbnl0aGluZyBlbHNlIGhhcHBlbnMuIFRoZSBjaG9pY2Ugb2YgY29weWluZyB2ZXJzdXMgaW5pdGlhbGl6aW5nIHdpdGggb25lcyBsaWtlbHkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgbG9naWMgYW5kIHdoYXQgcmVwcmVzZW50cyBhIHZhbGlkIHN0YXJ0aW5nIHBvaW50IGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGtleSBuZXh0IHN0ZXAgdG8gYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2OTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY5NzpcdHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbjM2OTg6XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbjM2OTk6XHR7XG4zNzAwOlx0XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbjM3MDE6XHRcdHVuc2lnbmVkIGludCAqYnc7XG4zNzAyOlx0XHRib29sIGlucHV0O1xuMzcwMzpcdFx0aW50IGk7XG4zNzA0Olx0XG4zNzA1Olx0XHRpZiAoa3N0cnRvYm9vbChidWYsIFx1MDAyNmlucHV0KSlcbjM3MDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNzA3Olx0XG4zNzA4Olx0XHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbjM3MDk6XHRcdGlmICghbmV3X3dpX3N0YXRlKVxuMzcxMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjM3MTE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbjM3MTI6XHRcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbjM3MTM6XHRcbjM3MTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4zNzE1Olx0XHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxuMzcxNjpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbjM3MTc6XHRcbjM3MTg6XHRcdGlmIChvbGRfd2lfc3RhdGUgXHUwMDI2XHUwMDI2IGlucHV0ID09IG9sZF93aV9zdGF0ZS1cdTAwM2Vtb2RlX2F1dG8pIHtcbjM3MTk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuMzcyMDpcdFx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xuMzcyMTpcdFx0XHRyZXR1cm4gY291bnQ7XG4zNzIyOlx0XHR9XG4zNzIzOlx0XG4zNzI0Olx0XHRpZiAoIWlucHV0KSB7XG4zNzI1Olx0XHRcdGlmIChvbGRfd2lfc3RhdGUpXG4zNzI2Olx0XHRcdFx0bWVtY3B5KG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZSwgb2xkX3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLFxuMzcyNzpcdFx0XHRcdFx0XHRcdCAgICAgICBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMzcyODpcdFx0XHRnb3RvIHVwZGF0ZV93aV9zdGF0ZTtcbjM3Mjk6XHRcdH1cbjM3MzA6XHRcbjM3MzE6XHRcdGJ3ID0gbm9kZV9id190YWJsZTtcbjM3MzI6XHRcdGlmICghYncpIHtcbjM3MzM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuMzczNDpcdFx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xuMzczNTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjM3MzY6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXZWlnaHQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYG5ld193aV9zdGF0ZWAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NfZmxleGAg4oCTIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0IGJlY2F1c2UgYGt6YWxsb2NgIHplcm9lcyB0aGUgbWVtb3J5LiBUaGVuIGFsbCBlbGVtZW50cyBhcmUgZXhwbGljaXRseSBzZXQgdG8gMS4gIFNvLCBpbiB0aGlzIGNvbnRleHQsIHdlIGNhbiBzYXkgaXQmIzM5O3MgZnVsbHkgaW5pdGlhbGl6ZWQuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQsIHRoaXMgcGF0Y2ggY2hhbmdlZCBga3phbGxvY2AgdG8gYGttYWxsb2NgIGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGZvciB0aGUgYHdlaWdodHNgIHZhcmlhYmxlOgoKYGBgYwovKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovCi0Jd2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpOwomIzQzOwl3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwICZhbXA7IEdGUF9SRUNMQUlNX01BU0spOwpgYGAKCkFuZCB0aGVuIHRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgY29kZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgd2VpZ2h0cyBmcm9tIGEgY29weToKCmBgYGMKCXJjdV9yZWFkX2xvY2soKTsKCXN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTsKCWlmIChzdGF0ZSkgewoJCW1lbWNweSh3ZWlnaHRzLCBzdGF0ZS0mZ3Q7aXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7CgkJcmN1X3JlYWRfdW5sb2NrKCk7Cgl9IGVsc2UgewoJCXJjdV9yZWFkX3VubG9jaygpOwoJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspCgkJCXdlaWdodHNbaV0gPSAxOwoJfQpgYGAKCk15IGZpcnN0IHRob3VnaHQ6IGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBgd2VpZ2h0c2AgZ2V0cyB1c2VkIHVuaW5pdGlhbGl6ZWQ/ICBObywgaXQgY2FuJiMzOTt0IGJlLiAgRWl0aGVyIHRoZSBgbWVtY3B5YCB3aWxsIGNvcHkgYG5yX25vZGVfaWRzYCBieXRlcyBmcm9tIGBzdGF0ZS0mZ3Q7aXdfdGFibGVgIHRvIGB3ZWlnaHRzYCwgd2hpY2ggaW1wbGljaXRseSBndWFyYW50ZWVzIGluaXRpYWxpemF0aW9uLCBvciB0aGUgbG9vcCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBgbnJfbm9kZV9pZHNgIGJ5dGVzIHRvIDEuCgpCdXQsIHdhaXQsIHdoYXQgaWYgYHN0YXRlLSZndDtpd190YWJsZWAgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgd2UmIzM5O3ZlIGp1c3QgZXN0YWJsaXNoZWQgdGhhdCBgc3RhdGUtJmd0O2l3X3RhYmxlYCBfaXNfIGZ1bGx5IGluaXRpYWxpemVkIGluIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGl0IGlzIGFsbG9jYXRlZC4gU28gYHdlaWdodHNgIHNob3VsZCBiZSBndWFyYW50ZWVkIGZ1bGx5IGluaXRpYWxpemVkLgoKT2theSwgbGV0JiMzOTtzIGNvbnNpZGVyIHBhZGRpbmcuIElzIHRoZXJlIGFueSBwYWRkaW5nIGluIGB3ZWlnaHRzYD8gIEl0JiMzOTtzIGFuIGFycmF5IG9mIGB1OGAgKHVuc2lnbmVkIDgtYml0IGludGVnZXJzKS4gTm8gcGFkZGluZyB0aGVyZS4KCk5vdywgY29uc2lkZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczogYW55IGluZm8tbGVhayB0byB1c2VyIHNwYWNlPyBgd2VpZ2h0c2AgaXMgdXNlZCBsb2NhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB0byBjYWxjdWxhdGUgYHdlaWdodF90b3RhbGAgYW5kIGByb3VuZHNgIGFuZCB0aGVuLi4uIHdoZXJlIGlzIGl0IGZyZWVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjczMDpcdFx0XHRcdC8qIHdoZW4gZGVsdGEgaXMgZGVwbGV0ZWQsIHJlc3VtZSBmcm9tIHRoYXQgbm9kZSAqL1xuMjczMTpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IGRlbHRhO1xuMjczMjpcdFx0XHRcdHJlc3VtZV9ub2RlID0gbm9kZTtcbjI3MzM6XHRcdFx0XHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0IC0gZGVsdGE7XG4yNzM0Olx0XHRcdFx0ZGVsdGEgPSAwO1xuMjczNTpcdFx0XHR9XG4yNzM2Olx0XHRcdC8qIG5vZGVfcGFnZXMgY2FuIGJlIDAgaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBhbmQgcm91bmRzID09IDAgKi9cbjI3Mzc6XHRcdFx0aWYgKCFub2RlX3BhZ2VzKVxuMjczODpcdFx0XHRcdGJyZWFrO1xuMjczOTpcdFx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxuMjc0MDpcdFx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4yNzQxOlx0XHRcdHBhZ2VfYXJyYXkgJiM0Mzs9IG5yX2FsbG9jYXRlZDtcbjI3NDI6XHRcdFx0dG90YWxfYWxsb2NhdGVkICYjNDM7PSBucl9hbGxvY2F0ZWQ7XG4yNzQzOlx0XHRcdGlmICh0b3RhbF9hbGxvY2F0ZWQgPT0gbnJfcGFnZXMpXG4yNzQ0Olx0XHRcdFx0YnJlYWs7XG4yNzQ1Olx0XHRcdHByZXZfbm9kZSA9IG5vZGU7XG4yNzQ2Olx0XHR9XG4yNzQ3Olx0XHRtZS1cdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XG4yNzQ4Olx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xuMjc0OTpcdFx0a2ZyZWUod2VpZ2h0cyk7XG4yNzUwOlx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjc1MTpcdH1cbjI3NTI6XHRcbjI3NTM6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbjI3NTQ6XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuMjc1NTpcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4yNzU2Olx0e1xuMjc1NzpcdFx0Z2ZwX3QgcHJlZmVycmVkX2dmcDtcbjI3NTg6XHRcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcbjI3NTk6XHRcbjI3NjA6XHRcdHByZWZlcnJlZF9nZnAgPSBnZnAgfCBfX0dGUF9OT1dBUk47XG4yNzYxOlx0XHRwcmVmZXJyZWRfZ2ZwIFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XG4yNzYyOlx0XG4yNzYzOlx0XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG4yNzY0Olx0XHRcdFx0XHRcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbjI3NjU6XHRcbjI3NjY6XHRcdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxuMjc2NzpcdFx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG4yNzY4Olx0XHRcdFx0XHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcbjI3Njk6XHRcdFx0XHRcdHBhZ2VfYXJyYXkgJiM0MzsgbnJfYWxsb2NhdGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MjcKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga3phbGxvYyB0byBrbWFsbG9jIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcywgYGtmcmVlKHdlaWdodHMpYCAqaXMqIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiYjMzQ7IEJ1dCB3YWl0IGEgbWludXRlLCB3aGF0IGlmIHRoZSBmdW5jdGlvbiBleGl0cyBlYXJseSwgZHVlIHRvIGEgZmFpbHVyZSBpbiBwYWdlIGFsbG9jYXRpb24/IENoZWNraW5nIHRoZSBjb2RlLCBJIHNlZSBhIGJyZWFrIHN0YXRlbWVudDoKCmBgYGMKCQkvKiBub2RlX3BhZ2VzIGNhbiBiZSAwIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgYW5kIHJvdW5kcyA9PSAwICovCgkJaWYgKCFub2RlX3BhZ2VzKQoJCQlicmVhazsKYGBgCgpSaWdodCwgaWYgaXQgYnJlYWtzIG91dCBlYXJseSwgdGhlIGNvZGUgcHJvY2VlZHMgdG86CgpgYGBjCgltZS0mZ3Q7aWxfcHJldiA9IHJlc3VtZV9ub2RlOwoJbWUtJmd0O2lsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7CglrZnJlZSh3ZWlnaHRzKTsKCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CmBgYAoKU28sIGB3ZWlnaHRzYCBpcyBwcm9wZXJseSBmcmVlZCBldmVuIGluIGFuIGVhcmx5IGV4aXQsIHdoaWNoIGlzIGdvb2QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNoYW5nZSBpcyBga3phbGxvY2AgdG8gYGttYWxsb2NgLCBtZWFuaW5nIHdlIGFyZW4mIzM5O3QgemVyby1pbml0aWFsaXppbmcgdGhlIGB3ZWlnaHRzYCBhcnJheSBhbnltb3JlLiBCdXQgaG9sZCBvbiwgdGhlIGNvZGUgKmltbWVkaWF0ZWx5KiBhZnRlciB0aGUgYWxsb2NhdGlvbiBlaXRoZXIgZG9lcyBhIGBtZW1jcHlgIGZyb20gYHN0YXRlLSZndDtpd190YWJsZWAsIHdoaWNoIGl0c2VsZiBpcyBmdWxseSBpbml0aWFsaXplZCwgb3IgaXQgc2V0cyBhbGwgZWxlbWVudHMgaW4gdGhlIGB3ZWlnaHRzYCBhcnJheSB0byAxLiBTbywgYHdlaWdodHNgICppcyogZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSByZWFkLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uLCBhdm9pZGluZyByZWR1bmRhbnQgemVyb2luZy4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLCBzbyBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSBzb21ldGhpbmcgZGlmZmVyZW50LiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCAqaXMqIG9ubHkgdGhpcyBvbmUgY2hhbmdlOgoKYGBgYwogCS8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi8KLQl3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7CiYjNDM7CXdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSyk7CiAJaWYgKCF3ZWlnaHRzKQpgYGAKCll1cCwganVzdCB0aGUgb25lLiBCZWNhdXNlIGB3ZWlnaHRzYCBpcyBmdWxseSBpbml0aWFsaXplZCBkaXJlY3RseSBhZnRlciBhbGxvY2F0aW9uIHZpYSBlaXRoZXIgYG1lbWNweWAgb3IgdGhlIGxvb3AsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY29ycnVwdGlvbiwgYW5kIGNhdGNoIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhbmQgbm8gc3BlY2lhbCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYGt6YWxsb2NgIHdpdGggYGttYWxsb2NgIGZvciB0aGUgYHdlaWdodHNgIGFycmF5IGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBXaGlsZSB0aGlzIHJlbW92ZXMgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnksIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGFsbG9jYXRpb24gd2l0aCBlaXRoZXIgYSBgbWVtY3B5YCB0aGF0IGZ1bGx5IHBvcHVsYXRlcyB0aGUgYXJyYXkgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBremFsbG9jYCB3aXRoIGBrbWFsbG9jYCBmb3IgdGhlIGB3ZWlnaHRzYCBhcnJheSBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gV2hpbGUgdGhpcyByZW1vdmVzIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29kZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBhbGxvY2F0aW9uIHdpdGggZWl0aGVyIGEgYG1lbWNweWAgdGhhdCBmdWxseSBwb3B1bGF0ZXMgdGhlIGFycmF5IGZyb20gYHN0YXRlLVx1MDAzZWl3X3RhYmxlYCAod2hpY2ggaXMgaXRzZWxmIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24pIG9yIGEgbG9vcCB0aGF0IHNldHMgYWxsIGVsZW1lbnRzIHRvIDEuIFRodXMsIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvZiBpdHMgZWxlbWVudHMgYXJlIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjIyLjg5NjM0MjcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA3ODk3OTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbXBvbGljeSkgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiB3aXRoIHdlaWdodGVkIGludGVybGVhdmUgcG9saWN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODoyMi44OTYzNDc4NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjgwMTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0YzViZjIzMThlZDAzNjU5YWY3MGM4MWM3OWQ0YjA4MTY2NjlhNjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6Mzg6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xcbkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHRwcmV2X25vZGUgPSBub2RlO1xcbiBcXG4gXFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xcbi1cXHR3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7XFxuK1xcdHdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKTtcXG4gXFx0aWYgKCF3ZWlnaHRzKVxcbiBcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6MjMuMzM5ODg0MDkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjUxNDY0NzM2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YzViZjIzMThlZDAzNjU5YWY3MGM4MWM3OWQ0YjA4MTY2NjlhNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNzozODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbiBcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbitcdHdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spO1xuIFx0aWYgKCF3ZWlnaHRzKVxuIFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6MjMuMzM5ODg1NzEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4OTM1MTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjaGFuZ2VzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkncmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLlxuXG4qKkV4YW1pbmluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSBpbiBtZW1wb2xpY3kuYyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGBtbS9tZW1wb2xpY3kuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBzb21lb25lJ3MgbWFraW5nIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhleSdyZSBzaGlmdGluZyBmcm9tIHVzaW5nIGBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKWAgdG8gYGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gU28sIGl0J3MgYSBzd2FwIGZyb20gemVyb2luZyBhbmQga2VybmVsLXNwZWNpZmljIG1lbW9yeSB0byBhIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgY2h1bmssIGJ1dCB3aXRoIG1vcmUgbnVhbmNlZCByZWNsYWltIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGl0c2VsZi4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IFdoYXQncyBpdCBiZWluZyB1c2VkIGZvcj8gVGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBtZW1vcnkgcG9saWN5IGludGVyYWN0cyB3aXRoIHBhZ2UgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIE5VTUEgc3lzdGVtcy4gVGhhdCBjaGFuZ2UgZnJvbSBga3phbGxvY2AgdG8gYGttYWxsb2NgIGlzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUuIElzIGl0IHBlcmZvcm1hbmNlLWRyaXZlbj8gTWVtb3J5IGZvb3RwcmludD8gT3IgaXMgdGhlcmUgYSBtb3JlIGZ1bmRhbWVudGFsIGlzc3VlIHRoaXMgaXMgYWRkcmVzc2luZywgcGVyaGFwcyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIHVuZGVyIHNwZWNpZmljIHdvcmtsb2FkcyBvciBjb25maWd1cmF0aW9ucz8gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBgR0ZQX1JFQ0xBSU1fTUFTS2Agd2hpY2ggbWF5IGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlLiBMZXQncyBzZWUuLi4gSSdsbCBwdWxsIHVwIHRoZSBjb2RlIGFuZCBmaWd1cmUgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjI3LjgyOTI0MTY4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ2MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MjYwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzNC1cXG5tbS9tZW1wb2xpY3kuYzoyNjM1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYzNi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzc5PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTMtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODoyNy44ODI3MDk0NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTA1OTgxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCAqd2hlbiogdGhlIG1lbW9yeSBwb2xpY3kgaXMgc2V0IHRvIGBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVgLiBUaGF0J3MgaW1wb3J0YW50IGNvbnRleHQuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCB3ZSdyZSBzd2l0Y2hpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZC4gV2UncmUgZ29pbmcgZnJvbSBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGFsbG9jYXRpb24gZmxhZ3MgYXJlIGJlaW5nIGFsdGVyZWQsIHdlJ3JlIGxvc2luZyB0aGUgemVyb2luZyBvZiB0aGUgbWVtb3J5LCBhbmQgdGhhdCdzIHVzdWFsbHkgZmluZS4gT2Z0ZW4gdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCBsYXRlci5cblxuQnV0IHdhaXQuICpJcyogdGhlIG1lbW9yeSBpbml0aWFsaXplZCBsYXRlciBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYD8gSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhpcyBpc24ndCBnb2luZyB0byBpbnRyb2R1Y2Ugc29tZSBzb3J0IG9mIHNlY3VyaXR5IGxlYWsgb3IgdW5pbml0aWFsaXplZCBkYXRhIHJlYWQuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZnVuY3Rpb24gaXRzZWxmIHRvIHZlcmlmeSB0aGF0IGl0IGRvZXMsIGluIGZhY3QsIGhhbmRsZSB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjM2LjM4ODY5NDU2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xcbjI2ODE6XFx0XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjgyOlxcdFxcdFxcdH1cXG4yNjgzOlxcdFxcdFxcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXFxuMjY4NDpcXHRcXHRcXHRyZW1fcGFnZXMgLT0gd2VpZ2h0O1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFx0LyogY2xlYXIgYWN0aXZlIHdlaWdodCBpbiBjYXNlIG9mIGFuIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbjI2ODc6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IDA7XFxuMjY4ODpcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXFxuMjY5MTpcXHRcXHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XFxuMjY5MjpcXHRcXHRpZiAoIXdlaWdodHMpXFxuMjY5MzpcXHRcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjY5NjpcXHRcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxuMjY5NzpcXHRcXHRpZiAoc3RhdGUpIHtcXG4yNjk4OlxcdFxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMjY5OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAwOlxcdFxcdH0gZWxzZSB7XFxuMjcwMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjI3MDM6XFx0XFx0XFx0XFx0d2VpZ2h0c1tpXSA9IDE7XFxuMjcwNDpcXHRcXHR9XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXFxuMjcwNzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuMjcwODpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4yNzA5OlxcdFxcbjI3MTA6XFx0XFx0LypcXG4yNzExOlxcdFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbjI3MTI6XFx0XFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4yNzEzOlxcdFxcdCAqXFxuMjcxNDpcXHRcXHQgKiBpZiAocm91bmRzIFxcdTAwM2UgMCkgYW5kIChkZWx0YSA9PSAwKSwgcmVzdW1lX25vZGUgd2lsbCBhbHdheXMgYmVcXG4yNzE1OlxcdFxcdCAqIHRoZSBub2RlIGZvbGxvd2luZyBwcmV2X25vZGUgYW5kIGl0cyB3ZWlnaHQuXFxuMjcxNjpcXHRcXHQgKi9cXG4yNzE3OlxcdFxcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcXG4yNzE4OlxcdFxcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xcbjI3MTk6XFx0XFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMDpcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XFxuMjcyMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4yNzIyOlxcdFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMzpcXHRcXHRcXHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xcbjI3MjQ6XFx0XFx0XFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcXG4yNzI1OlxcdFxcdFxcdC8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJ3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cXG4yNzI2OlxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbjI3Mjc6XFx0XFx0XFx0XFx0bm9kZV9wYWdlcyArPSB3ZWlnaHQ7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWx0YSAtPSB3ZWlnaHQ7XFxuMjcyOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGRlbHRhKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjM2LjM4ODkxMzE0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjE0MDM2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqaXMqIGRlZmVycmVkLCBoYW5kbGVkIGxhdGVyIGluIHRoZSBwcm9jZXNzLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfZGVyZWZlcmVuY2UoKWAgY29uZmlybXMgdGhhdCB0aGUgd2VpZ2h0cyBhcmUgZWl0aGVyIGNvcGllZCBmcm9tIGEgcHJlLWV4aXN0aW5nIHN0YXRlIG9yLCBpZiB0aGF0IHN0YXRlIGlzbid0IGF2YWlsYWJsZSwgaW5pdGlhbGl6ZWQgdG8gYWxsIG9uZXMuIFRoaXMgbWFrZXMgdGhlIGBrbWFsbG9jYCBjYWxsLCBhcyB1c2VkLCBwZXJmZWN0bHkgdmFsaWQgaW4gdGhpcyBjb250ZXh0LlxuXG5UaGUgc3Vic2VxdWVudCBjaGFuZ2UsIHdoZXJlIGBnZnBgIGlzIGJpdHdpc2UtQU5EZWQgd2l0aCBgR0ZQX1JFQ0xBSU1fTUFTS2AsIGlzIGFsc28gZnVuY3Rpb25hbGx5IHNvdW5kLiBJdCdzIGEgcHJ1ZGVudCBtb3ZlLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYEdGUF9LRVJORUxgIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgYmxvY2tpbmcgb3IgcHJvYmxlbXMgaWYgdGhlIGNhbGxpbmcgY29kZSBpbmFkdmVydGVudGx5IHBhc3NlcyBhdG9taWMgR0ZQIGZsYWdzLiBUaGlzIGlzIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpbiBgbW0vbWVtcG9saWN5LmNgLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgY2hhbmdlIHdvcnRoeSBvZiBhdHRlbnRpb24sIHNvIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgIGZvciB0aGlzIGNvZGUuXG5cbk5vdyBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhlIGNhbGxlciBpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCB3aGljaCBpcyBleHBvcnRlZC4gSSBhbSBub3QgY2VydGFpbiBpZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBhIG1hY3JvLCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjQyLjExMDMyMDE0OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAzNjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9Mjc1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NzgtICovXFxubW0vbWVtcG9saWN5LmM6Mjc3OTp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc4MC1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjQyLjE2MTM2MjY5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzExMzk3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgRXhwb3J0IFN0YXR1cyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gR2l2ZW4gdGhhdCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgZXhwb3J0ZWQuIElzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgdG8gYmUgdXNlZCBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQ/IERldGVybWluaW5nIGl0cyBleHBvcnQgc3RhdHVzIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGl0J3MgdHJlYXRlZCBieSB0aGUgbGlua2VyIGFuZCBpdHMgdmlzaWJpbGl0eSBhY3Jvc3MgbW9kdWxlcy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gdGhlIHN5bWJvbCB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjQ2LjIzMjUwNTYwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MzQwMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODo0Ni4yODMwNDg4MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MTM3MjEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB0cmFjZSBpdHMgZGVjbGFyYXRpb24uIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkLiBXaGVyZSBpcyBpdCBsb2NhdGVkPyBJcyBpdCBhIGhlYWRlciBmaWxlPyBBIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24/IE9yIGlzIGl0IGRlZmluZWQgaW4gc29tZSBzcGVjaWZpYyBgLmNgIGZpbGUgc29tZXdoZXJlPyBLbm93aW5nIHRoZSBleGFjdCBkZWNsYXJhdGlvbiB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHNjb3BlLCB0aGUgdHlwZXMgb2YgYXJndW1lbnRzIGl0IHRha2VzLCBhbmQgcG90ZW50aWFsbHkgd2hldGhlciBpdCdzIHN1YmplY3QgdG8gY2VydGFpbiBidWlsZC10aW1lIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNzZWN0aW5nIGFueSBjb2RlLiBJJ20gZ29pbmcgdG8gZmluZCB0aGlzIGRlY2xhcmF0aW9uIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6NDkuMzc0NDIzMzYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxNTIyNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxODp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIxLSNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc4LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2Njk9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzczNi1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG5tbS92bWFsbG9jLmM6MzczNzpcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxubW0vdm1hbGxvYy5jLTM3MzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6NTEuMTU1OTUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjg3ODcwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSB2bWFsbG9jIGFyZWEuIFRoZSBjYWxsIHN0YWNrIHN0YXJ0cyB3aXRoIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpbiBgbW0vdm1hbGxvYy5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSwgaXQncyBwcm9iYWJseSB3aGVyZSB0aGUgYnVsayBvZiB0aGUgd29yayBpcyBkb25lLiBCdXQsIGhhbmcgb24uLi4gaXMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGFsc28gd29ydGggYSBsb29rPyBJdCdzIHRoZSBlbnRyeSBwb2ludCwgc28gZGVmaW5pdGVseS4gV2FpdCBhIG1pbnV0ZS4uLiBpc24ndCB0aGF0IHN0YXRpYz8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgc28gSSBkb24ndCB3YXN0ZSB0aW1lIG9uIHNvbWV0aGluZyB0aGF0J3Mgbm90IGV4dGVybmFsbHkgdmlzaWJsZS4gT2theSwgdGltZSB0byB2ZXJpZnkgdGhhdC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzbyBJIGNhbiBkZWNpZGUgaWYgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODo1NS4zMjQ3NDA2MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzM5MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX2FyZWFfYWxsb2NfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0zNjY4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxubW0vdm1hbGxvYy5jOjM2Njk6dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxubW0vdm1hbGxvYy5jLTM2NzAtXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXFxuLS1cXG5tbS92bWFsbG9jLmM9Mzg2Nj1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTE0LVxcdCAqL1xcbm1tL3ZtYWxsb2MuYzozOTE1OlxcdGFyZWEtXFx1MDAzZW5yX3BhZ2VzID0gdm1fYXJlYV9hbGxvY19wYWdlcyhcXG5tbS92bWFsbG9jLmMtMzkxNi1cXHRcXHRcXHR2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX21hc2ssIHBhZ2Vfb3JkZXIpLCBub2RlLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM5MjQtXFx0XFx0LypcXG5tbS92bWFsbG9jLmM6MzkyNTpcXHRcXHQgKiB2bV9hcmVhX2FsbG9jX3BhZ2VzKCkgY2FuIGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgYnV0XFxubW0vdm1hbGxvYy5jLTM5MjYtXFx0XFx0ICogYWxzbzotXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjU1LjM4MDA4NTQwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAwOTIyMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIEkgcHJvYmFibHkgd29uJ3QgZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZSBkaXJlY3RseSwgc28gbGV0J3Mgc2hpZnQgb3VyIGZvY3VzLiBMb29rcyBsaWtlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2wgdG8gZXhhbWluZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgPyBMZXQgbWUgc2VlLi4uIG5vcGUsIHRoZSBvbmx5IHBsYWNlIGl0J3MgY2FsbGVkIGlzIGZyb20gYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGluIGBtbS92bWFsbG9jLmNgLiBXYWl0IGEgbWludXRlLCBob2xkIHVwISBJJ20gZm9yZ2V0dGluZyBzb21ldGhpbmcuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgaXMgYSBtYWNybywgbm90IGEgZnVuY3Rpb24sIHNvIGl0IG1pZ2h0IGJlIGV4cGFuZGVkIGFuZCBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMuIEFscmlnaHQsIGxldCdzIGJhY2sgdXAgYW5kIGNoZWNrIGhvdyB0aGF0IG1hY3JvIGl0c2VsZiBpcyB1c2VkLiBOZWVkIHRvIHNlZSB3aGF0IHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IG1hY3JvIGlzIGFjdHVhbGx5IGV4cGFuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjU5LjM4MTAxMTcwOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2OTYyMDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxODp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc4LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2Njk9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzczNi1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG5tbS92bWFsbG9jLmM6MzczNzpcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxubW0vdm1hbGxvYy5jLTM3MzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6MDEuMjUwNjM4NTM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTcxMjYyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCBNYWNybyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgYXBwZWFycyB0aGF0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBJJ20gZXhhbWluaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZywgZ29vZCB0byBrbm93IHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UuIE5vdywgdGhlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgbWFjcm8gaXMgdGhlIG5leHQgdGhpbmcgSSdtIGZvY3VzZWQgb24gYW5kIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgd2hlcmUgdGhhdCdzIGJlaW5nIGludm9rZWQuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgbWFjcm8gaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGltZSB0byBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyB1c2VkLCBpZiBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTowNC43NDc3Njc4MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzYxODQ2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzUzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc3OC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzc5OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjY5PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3MzYtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3Mzc6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzM4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjA2LjUyMzk2MDY0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgyMTE0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgaHVuY2ggd2FzIHJpZ2h0OyBpdCBhcHBlYXJzIG9ubHkgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgZGlyZWN0bHkgZW1wbG95ZWQgd2l0aGluIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBXaHkgaXMgYG1tL3ZtYWxsb2MuY2AgdXNpbmcgdGhlICpmdW5jdGlvbiogZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgbWFjcm8/IFNob3VsZG4ndCBpdCBiZSBnb2luZyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBhYnN0cmFjdGlvbj8gVGhpcyBpcyB1bnVzdWFsLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJ2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vdm1hbGxvYy5jYCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTowOS43MDYwNzgxNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzMwOlxcdFxcbjM3MzE6XFx0XFx0XFx0XFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJ3RcXG4zNzMyOlxcdFxcdFxcdFxcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXFxuMzczMzpcXHRcXHRcXHRcXHQgKiBvdGhlcndpc2UgbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgaW4gb25seSBvbmUgbm9kZSxcXG4zNzM0OlxcdFxcdFxcdFxcdCAqIGJ1dCBtZW1wb2xpY3kgd2FudHMgdG8gYWxsb2MgbWVtb3J5IGJ5IGludGVybGVhdmluZy5cXG4zNzM1OlxcdFxcdFxcdFxcdCAqL1xcbjM3MzY6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxuMzczNzpcXHRcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxuMzczODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbjM3Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZXMgKyBucl9hbGxvY2F0ZWQpO1xcbjM3NDA6XFx0XFx0XFx0XFx0ZWxzZVxcbjM3NDE6XFx0XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbjM3NDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG4zNzQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VzICsgbnJfYWxsb2NhdGVkKTtcXG4zNzQ0OlxcdFxcbjM3NDU6XFx0XFx0XFx0XFx0Zm9yIChpID0gbnJfYWxsb2NhdGVkOyBpIFxcdTAwM2MgbnJfYWxsb2NhdGVkICsgbnI7IGkrKylcXG4zNzQ2OlxcdFxcdFxcdFxcdFxcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XFxuMzc0NzpcXHRcXG4zNzQ4OlxcdFxcdFxcdFxcdG5yX2FsbG9jYXRlZCArPSBucjtcXG4zNzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTowOS43MDYyOTY5MzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY2Mjc3NzY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQgZGlyZWN0bHkgdXRpbGl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoYXQgZnVuY3Rpb24sIHRoZXJlZm9yZSwgaXMgZGVmaW5pdGVseSBhIGtleSBmb2NhbCBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBhbGxvY2F0aW9uIHByb2Nlc3MuXG5cbk5vdywgd2hhdCBhYm91dCBgX192bWFsbG9jX2FyZWFfbm9kZWA/IEFoLCByaWdodCwgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gU28sIHdoaWxlIGltcG9ydGFudCBpbnRlcm5hbGx5LCBpdCB3b24ndCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBpdHMgc2NvcGUuIEJ1dCwgYF9fdm1hbGxvY19ub2RlYCBpcyBleHBvcnRlZCwgYW5kIGl0IGNhbGxzIHRoYXQgc3RhdGljIGZ1bmN0aW9uLiBXb3J0aCBrZWVwaW5nIHRoYXQgaW4gbWluZCBhcyBhIHBvaW50IG9mIGNvbXBhcmlzb24uXG5cbldhaXQsIGJhY2sgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuLi5pcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gTm8sIGl0J3Mgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzKiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gcmVzaWRpbmcgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AuIFRoYXQgbWVhbnMgaXQncyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0sIGFzc3VtaW5nIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5XaGljaCBicmluZ3MgbWUgdG8gdGhlIG5leHQgcXVlc3Rpb246IGlzIGBDT05GSUdfTlVNQWAgYSByZXF1aXJlbWVudCBoZXJlPyBZZXMsIGFic29sdXRlbHkuIGBDT05GSUdfTlVNQWAgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHRoYXQgdGhlIGBJU19FTkFCTEVEKENPTkZJR19OVU1BKWAgbWFjcm8gZXZhbHVhdGVzIHRvIHRydWUuIFdpdGhvdXQgdGhhdCwgd2Ugd291bGRuJ3QgZXZlbiBiZSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGRlcGVuZGVuY3kgaW4gYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6MTcuMzY5MDc3NDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM0Mjc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3kub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVxcdCs9IHNwYXJzZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjE3LjQyMTQyNTc3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk4MzE0ODU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19OVU1BYCBvcHRpb24gaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0J3MgYSBnaXZlbi4gV2UncmUgbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBtZW1wb2xpY3ksIHNwZWNpZmljYWxseSBpbiBob3cgYnVsayBwYWdlIGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoIGEgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIHNoaWZ0aW5nIGZyb20gYGt6YWxsb2MoLi4uLCBHRlBfS0VSTkVMKWAgdG8gYGttYWxsb2MoLi4uLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spYC4gVGhpcyBzY3JlYW1zIGZ1enppbmcgb3Bwb3J0dW5pdHkuXG5cblRoZXJlZm9yZSwgZm9yIG15IGZ1enppbmcgY29uZmlndXJhdGlvbiwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiAgVGhlIGZvY3VzIHN5bWJvbCBJJ3ZlIGNob3NlbiBpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgZXhwbGljaXRseSBzZXQgdG8gYE5VTUFgIGJlY2F1c2UgdGhhdCdzIGVzc2VudGlhbCBmb3IgdGhpcyBjaGFuZ2UuIFRoZSByYXRpb25hbGUgaXMgcHJlY2lzZWx5IHRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbHRlcmF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB3ZWlnaHRlZCBpbnRlcmxlYXZlLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb2N1cyBzeW1ib2wuIENoZWNraW5nLi4uIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLCB3aGVyZWFzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBJIG1hZGUgdGhlIHJpZ2h0IGNob2ljZS4gTXkgcmVhc29uaW5nIGlzIHNvdW5kLiAgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXQgaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjEsIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjI4LjQwNDU3ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc3NTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjI4LjQ4NjM2MzAwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0ODg5NDg3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOToyOC40ODY5NzYyMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTE0ODgzMzE1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBremFsbG9jYCB3aXRoIGBrbWFsbG9jYCBmb3IgdGhlIGB3ZWlnaHRzYCBhcnJheSBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gV2hpbGUgdGhpcyByZW1vdmVzIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29kZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBhbGxvY2F0aW9uIHdpdGggZWl0aGVyIGEgYG1lbWNweWAgdGhhdCBmdWxseSBwb3B1bGF0ZXMgdGhlIGFycmF5IGZyb20gYHN0YXRlLVxcdTAwM2Vpd190YWJsZWAgKHdoaWNoIGlzIGl0c2VsZiBmdWxseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uKSBvciBhIGxvb3AgdGhhdCBzZXRzIGFsbCBlbGVtZW50cyB0byAxLiBUaHVzLCB0aGUgYHdlaWdodHNgIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb2YgaXRzIGVsZW1lbnRzIGFyZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YzViZjIzMThlZDAzNjU5YWY3MGM4MWM3OWQ0YjA4MTY2NjlhNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNzozODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbiBcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbitcdHdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spO1xuIFx0aWYgKCF3ZWlnaHRzKVxuIFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6MjguNDg2OTc3MTYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTM4NTEwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCBob3cgd2UgYWxsb2NhdGUgbWVtb3J5IGluIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBzd2FwcGluZyBvdXQgYGt6YWxsb2NgIGZvciBga21hbGxvY2Agd2hlbiBhbGxvY2F0aW5nIGBucl9ub2RlX2lkc2AgYnl0ZXMuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZS4gQmFzaWNhbGx5LCBgd2VpZ2h0c2AgaXMgbm8gbG9uZ2VyIGdvaW5nIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB3ZSdyZSBub3cgdXNpbmcgYGttYWxsb2NgIHdpdGggYGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTS2AgaW5zdGVhZC5cblxuVGhhdCdzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4gTXkgYnJhaW4gaXMgc2NyZWFtaW5nLCBcIlVuaW5pdGlhbGl6ZWQgbWVtb3J5ISBQb3RlbnRpYWwgYnVncyFcIi4gVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsIGFyZSB3ZSAqYWN0dWFsbHkqIGluaXRpYWxpemluZyB0aGUgYHdlaWdodHNgIGFycmF5IGJlZm9yZSBpdHMgZmlyc3QgdXNlPyBUaGlzIGlzIGNyaXRpY2FsLiBJZiB3ZSdyZSBub3QsIHdlIGNvdWxkIGhhdmUgc2VyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGRhdGEgbGVha3MsIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGNvZGUgcmlnaHQgYXdheSBhbmQgdHJhY2UgYWxsIHVzZXMgb2YgYHdlaWdodHNgIHRvIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLCBhbmQgaXMgc2FmZS4gSSBtdXN0IGNvbmZpcm0gdGhlIGltcGFjdCBvZiB0aGlzIGBrbWFsbG9jYCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo0Mi42MjU0OTA5OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTgzMTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MjYwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzNC1cXG5tbS9tZW1wb2xpY3kuYzoyNjM1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYzNi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzc5PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTMtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo0My4wNzczMjk2MTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0ODIwOTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nIGlzIGltcGxlbWVudGVkIGF0IHRoZSBjb3JlIGFsbG9jYXRpb24gbGV2ZWwsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBrZXkgcGllY2UgaW4gY29vcmRpbmF0aW5nIHBhZ2UgZGlzdHJpYnV0aW9uIGFjcm9zcyBOVU1BIG5vZGVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgd2VpZ2h0cy4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBsZXZlcmFnZXMgdGhlIGV4aXN0aW5nIG1lbW9yeSBwb2xpY3kgaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBleHRlbmRzIGFuZCBvcHRpbWl6ZXMgaXQgZm9yIGJ1bGsgb3BlcmF0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBmYWlsdXJlcyBkdXJpbmcgYWxsb2NhdGlvbiwgYW5kIGlmIGl0IGltcGxlbWVudHMgYW55IGZvcm0gb2YgZmFpcm5lc3Mgb3IgcmV0cnkgbWVjaGFuaXNtcyB0byBkZWFsIHdpdGggcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgb3B0aW1pemF0aW9ucyBzcGVjaWZpYyB0byBidWxrIGFsbG9jYXRpb24gY29tcGFyZWQgdG8gc2luZ2xlLXBhZ2UgYWxsb2NhdGlvbiDigJMgcGVyaGFwcyBiYXRjaGluZyBvZiBub2RlIHNlbGVjdGlvbiBvciBwcmUtY2FsY3VsYXRpb24gb2YgYWxsb2NhdGlvbiB0YXJnZXRzLiBMZXQncyBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGxpbmVzIHVwIHdpdGggdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo0Ni41MjU1NDI0NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjM1OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuMjYzNjpcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuMjYzNzpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuMjYzODpcXHR7XFxuMjYzOTpcXHRcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxuMjY0MDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDtcXG4yNjQxOlxcdFxcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XFxuMjY0MjpcXHRcXHR1bnNpZ25lZCBsb25nIHRvdGFsX2FsbG9jYXRlZCA9IDA7XFxuMjY0MzpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZCA9IDA7XFxuMjY0NDpcXHRcXHR1bnNpZ25lZCBsb25nIHJvdW5kcztcXG4yNjQ1OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlcywgZGVsdGE7XFxuMjY0NjpcXHRcXHR1OCAqd2VpZ2h0cywgd2VpZ2h0O1xcbjI2NDc6XFx0XFx0dW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7XFxuMjY0ODpcXHRcXHR1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzO1xcbjI2NDk6XFx0XFx0bm9kZW1hc2tfdCBub2RlcztcXG4yNjUwOlxcdFxcdGludCBubm9kZXMsIG5vZGU7XFxuMjY1MTpcXHRcXHRpbnQgcmVzdW1lX25vZGUgPSBNQVhfTlVNTk9ERVMgLSAxO1xcbjI2NTI6XFx0XFx0dTggcmVzdW1lX3dlaWdodCA9IDA7XFxuMjY1MzpcXHRcXHRpbnQgcHJldl9ub2RlO1xcbjI2NTQ6XFx0XFx0aW50IGk7XFxuMjY1NTpcXHRcXG4yNjU2OlxcdFxcdGlmICghbnJfcGFnZXMpXFxuMjY1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjU4OlxcdFxcbjI2NTk6XFx0XFx0LyogcmVhZCB0aGUgbm9kZXMgb250byB0aGUgc3RhY2ssIHJldHJ5IGlmIGRvbmUgZHVyaW5nIHJlYmluZCAqL1xcbjI2NjA6XFx0XFx0ZG8ge1xcbjI2NjE6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG4yNjYyOlxcdFxcdFxcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcXHUwMDI2bm9kZXMpO1xcbjI2NjM6XFx0XFx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XFxuMjY2NDpcXHRcXG4yNjY1OlxcdFxcdC8qIGlmIHRoZSBub2RlbWFzayBoYXMgYmVjb21lIGludmFsaWQsIHdlIGNhbm5vdCBkbyBhbnl0aGluZyAqL1xcbjI2NjY6XFx0XFx0aWYgKCFubm9kZXMpXFxuMjY2NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjY4OlxcdFxcbjI2Njk6XFx0XFx0LyogQ29udGludWUgYWxsb2NhdGluZyBmcm9tIG1vc3QgcmVjZW50IG5vZGUgYW5kIGFkanVzdCB0aGUgbnJfcGFnZXMgKi9cXG4yNjcwOlxcdFxcdG5vZGUgPSBtZS1cXHUwMDNlaWxfcHJldjtcXG4yNjcxOlxcdFxcdHdlaWdodCA9IG1lLVxcdTAwM2VpbF93ZWlnaHQ7XFxuMjY3MjpcXHRcXHRpZiAod2VpZ2h0IFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgbm9kZXMpKSB7XFxuMjY3MzpcXHRcXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG4yNjc0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxuMjY3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbjI2NzY6XFx0XFx0XFx0cGFnZV9hcnJheSArPSBucl9hbGxvY2F0ZWQ7XFxuMjY3NzpcXHRcXHRcXHR0b3RhbF9hbGxvY2F0ZWQgKz0gbnJfYWxsb2NhdGVkO1xcbjI2Nzg6XFx0XFx0XFx0LyogaWYgdGhhdCdzIGFsbCB0aGUgcGFnZXMsIG5vIG5lZWQgdG8gaW50ZXJsZWF2ZSAqL1xcbjI2Nzk6XFx0XFx0XFx0aWYgKHJlbV9wYWdlcyBcXHUwMDNjPSB3ZWlnaHQpIHtcXG4yNjgwOlxcdFxcdFxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xcbjI2ODE6XFx0XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjgyOlxcdFxcdFxcdH1cXG4yNjgzOlxcdFxcdFxcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXFxuMjY4NDpcXHRcXHRcXHRyZW1fcGFnZXMgLT0gd2VpZ2h0O1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFx0LyogY2xlYXIgYWN0aXZlIHdlaWdodCBpbiBjYXNlIG9mIGFuIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbjI2ODc6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IDA7XFxuMjY4ODpcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXFxuMjY5MTpcXHRcXHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XFxuMjY5MjpcXHRcXHRpZiAoIXdlaWdodHMpXFxuMjY5MzpcXHRcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjY5NjpcXHRcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxuMjY5NzpcXHRcXHRpZiAoc3RhdGUpIHtcXG4yNjk4OlxcdFxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMjY5OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAwOlxcdFxcdH0gZWxzZSB7XFxuMjcwMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjI3MDM6XFx0XFx0XFx0XFx0d2VpZ2h0c1tpXSA9IDE7XFxuMjcwNDpcXHRcXHR9XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXFxuMjcwNzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuMjcwODpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4yNzA5OlxcdFxcbjI3MTA6XFx0XFx0LypcXG4yNzExOlxcdFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbjI3MTI6XFx0XFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4yNzEzOlxcdFxcdCAqXFxuMjcxNDpcXHRcXHQgKiBpZiAocm91bmRzIFxcdTAwM2UgMCkgYW5kIChkZWx0YSA9PSAwKSwgcmVzdW1lX25vZGUgd2lsbCBhbHdheXMgYmVcXG4yNzE1OlxcdFxcdCAqIHRoZSBub2RlIGZvbGxvd2luZyBwcmV2X25vZGUgYW5kIGl0cyB3ZWlnaHQuXFxuMjcxNjpcXHRcXHQgKi9cXG4yNzE3OlxcdFxcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcXG4yNzE4OlxcdFxcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xcbjI3MTk6XFx0XFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMDpcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XFxuMjcyMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4yNzIyOlxcdFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMzpcXHRcXHRcXHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xcbjI3MjQ6XFx0XFx0XFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcXG4yNzI1OlxcdFxcdFxcdC8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJ3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cXG4yNzI2OlxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbjI3Mjc6XFx0XFx0XFx0XFx0bm9kZV9wYWdlcyArPSB3ZWlnaHQ7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWx0YSAtPSB3ZWlnaHQ7XFxuMjcyOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGRlbHRhKSB7XFxuMjczMDpcXHRcXHRcXHRcXHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cXG4yNzMxOlxcdFxcdFxcdFxcdG5vZGVfcGFnZXMgKz0gZGVsdGE7XFxuMjczMjpcXHRcXHRcXHRcXHRyZXN1bWVfbm9kZSA9IG5vZGU7XFxuMjczMzpcXHRcXHRcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0IC0gZGVsdGE7XFxuMjczNDpcXHRcXHRcXHRcXHRkZWx0YSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjQ2LjUyNTg0NTM4MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjk3MjExMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQ29kZSBTbmlwcGV0KipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBncmFiYmluZyBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzLCBgd2VpZ2h0c2AuIEknbSB1c2luZyBga21hbGxvY2AgdG8gYWxsb2NhdGUgdGhlIG5lY2Vzc2FyeSBtZW1vcnksIGEgY29tbW9uIHByYWN0aWNlIHdpdGhpbiB0aGUga2VybmVsIGZvciBtYW5hZ2luZyBtZW1vcnkgZHluYW1pY2FsbHkuIFRoZW4gSSdtIGNoZWNraW5nIGlmIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsLCBpZiBub3QsIEknbGwgYmFpbCBvdXQgYW5kIHJldHVybiB0aGUgdG90YWwgYWxsb2NhdGVkLlxuXG5Ob3csIGhlcmUncyB0aGUgY2xldmVyIHBhcnQuIEknbSB1c2luZyBhbiBSQ1UgcmVhZCBsb2NrLCB3aGljaCBtZWFucyBJJ20gYWNjZXNzaW5nIHNoYXJlZCBkYXRhIChgd2lfc3RhdGVgKSB3aXRoIGEgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIEkgZGVyZWZlcmVuY2UgYHdpX3N0YXRlYCB1c2luZyBgcmN1X2RlcmVmZXJlbmNlYCwgd2hpY2ggaXMgaG93IHdlIHNhZmVseSBhY2Nlc3MgZGF0YSBwcm90ZWN0ZWQgYnkgUkNVLiBJJ20gY2hlY2tpbmcgaWYgdGhlIHN0YXRlIGlzIG5vbi1OVUxMLiBJZiBpdCBpcywgSSBjb3B5IHRoZSBjb250ZW50cyBvZiBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIGludG8gbXkgbG9jYWwgYHdlaWdodHNgIGFycmF5LiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgSSdtIGNvcHlpbmcgYG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KWAgYnl0ZXMsIGltcGx5aW5nIHRoYXQgYHN0YXRlLVx1MDAzZWl3X3RhYmxlYCBpcyBhbiBhcnJheSBvZiBzaXplIGBucl9ub2RlX2lkc2AsIHdoaWNoIGNvbnRhaW5zIHVuc2lnbmVkIDgtYml0IGludGVnZXJzLiBJJ20gcmVsZWFzaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIGFmdGVyIHRoaXMgY29weSBpcyBkb25lLCBjb21wbGV0aW5nIHRoZSBzYWZlIHJlYWQuXG5cbklmIGBzdGF0ZWAgKmlzKiBOVUxMLCBpbmRpY2F0aW5nIGl0J3MgdW5pbml0aWFsaXplZCwgSSByZWxlYXNlIHRoZSBsb2NrIGFuZCB0aGVuIGluaXRpYWxpemUgYWxsIGVsZW1lbnRzIG9mIHRoZSBgd2VpZ2h0c2AgYXJyYXkgdG8gMS4gVGhpcyBlbnN1cmVzIHRoYXQgYHdlaWdodHNgIGFsd2F5cyBoYXMgdmFsaWQgZGF0YS5cblxuU28sIGluIGJvdGggc2NlbmFyaW9zIOKAkyB3aGV0aGVyIHRoZSBzdGF0ZSBpcyBpbml0aWFsaXplZCBvciBub3Qg4oCTIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheSBpcyBlaXRoZXIgcG9wdWxhdGVkIGJ5IGEgbWVtY3B5LCBpZiB0aGUgc3RhdGUgZXhpc3RzLCBvciBieSBhIGxvb3AgdGhhdCBpbml0aWFsaXplcyBlYWNoIGVsZW1lbnQgdG8gMS4gSXQgc2VlbXMgbGlrZSB0aGUgc3RhdGUgYmVpbmcgTlVMTCBpcyBoYW5kbGVkIGdyYWNlZnVsbHkgaGVyZS5cblxuSSdsbCBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoYXQgYHN0YXRlLVx1MDAzZWl3X3RhYmxlYCBpcyBpbmRlZWQgYW4gYXJyYXkgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUsIGdpdmVuIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAuIEdvb2QgcHJhY3RpY2UgdG8gYWx3YXlzIHZlcmlmeSBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIHN0cnVjdHVyZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo1Mi44MjMwNjA2NTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDA3NzUyNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTE1Mj1zdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNTctICovXFxubW0vbWVtcG9saWN5LmM6MTU4OnN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcXG5tbS9tZW1wb2xpY3kuYy0xNTktXFx0Ym9vbCBtb2RlX2F1dG87XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNjEtfTtcXG5tbS9tZW1wb2xpY3kuYzoxNjI6c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIF9fcmN1ICp3aV9zdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0xNjMtc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE3MT1zdGF0aWMgdTggZ2V0X2lsX3dlaWdodChpbnQgbm9kZSlcXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xcbm1tL21lbXBvbGljeS5jOjE3MzpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMTc0LVxcdHU4IHdlaWdodCA9IDE7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjE9aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcXG5tbS9tZW1wb2xpY3kuYy0yMjIte1xcbm1tL21lbXBvbGljeS5jOjIyMzpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG5tbS9tZW1wb2xpY3kuYy0yMjQtXFx0dW5zaWduZWQgaW50ICpvbGRfYncsICpuZXdfYnc7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjA2PXN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBwZ29mZl90IGlseClcXG5tbS9tZW1wb2xpY3kuYy0yMjA3LXtcXG5tbS9tZW1wb2xpY3kuYzoyMjA4OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0yMjA5LVxcdG5vZGVtYXNrX3Qgbm9kZW1hc2s7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNjM1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjM4LXtcXG5tbS9tZW1wb2xpY3kuYzoyNjM5OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0yNjQwLVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzY0Mz1zdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNjQ1LXtcXG5tbS9tZW1wb2xpY3kuYzozNjQ2OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xcbm1tL21lbXBvbGljeS5jLTM2NDctXFx0c3RydWN0IGl3X25vZGVfYXR0ciAqbm9kZV9hdHRyO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzY4Mj1zdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2ODQte1xcbm1tL21lbXBvbGljeS5jOjM2ODU6XFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM2ODYtXFx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM2OTc9c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzY5OS17XFxubW0vbWVtcG9saWN5LmM6MzcwMDpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG5tbS9tZW1wb2xpY3kuYy0zNzAxLVxcdHVuc2lnbmVkIGludCAqYnc7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNzgxPXN0YXRpYyB2b2lkIHdpX3N0YXRlX2ZyZWUodm9pZClcXG5tbS9tZW1wb2xpY3kuYy0zNzgyLXtcXG5tbS9tZW1wb2xpY3kuYzozNzgzOlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpvbGRfd2lfc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMzc4NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6NTQuNDYzODQxNDM5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njk3Mjc1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBkZWZpbml0aW9uIGluIGBtbS9tZW1wb2xpY3kuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBpbnRlcmxlYXZlIG1lbW9yeSBwb2xpY3kgaXMgaW1wbGVtZW50ZWQuIFRoaXMgaXMgYSBjcnVjaWFsIHN0cnVjdHVyZSBmb3IgdGhlIGBNUE9MX0lOVEVSTEVBVkVgIHBvbGljeSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wb25lbnRzIHRvIGdyYXNwIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgcGFnZXMgYXJlIGRpc3RyaWJ1dGVkIGFjcm9zcyBOVU1BIG5vZGVzLCBlc3BlY2lhbGx5IHdoZW4gd2VpZ2h0cyBhcmUgaW52b2x2ZWQuIEknbSBhc3N1bWluZyB0aGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBpbnRlcmxlYXZpbmcgcHJvY2Vzcy4gVGhpbmdzIGxpa2Ugd2hpY2ggbm9kZSB0aGUgY3VycmVudCBwYWdlIGFsbG9jYXRpb24gaXMgXCJwb2ludGluZyB0b1wiIGFuZCBtYXliZSBzb21lIHNvcnQgb2Ygd2VpZ2h0aW5nIG1lY2hhbmlzbSB0byBjb25zaWRlciB3aGVuIHRoZSB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0LCBJIHN1c3BlY3QgdGhleSBoYXZlIGRpZmZlcmVudCBsb2dpYyBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB0eXBlLCBub3JtYWwgbWVtb3J5LCBodWdlIHBhZ2VzLCBldGMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYWN0dWFsbHkgbWFrZSB0aGUgZGVjaXNpb24gZm9yIGludGVybGVhdmluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjU4LjAzMzU3MjgwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdCAqIGJlZW4gZm91bmQgdG8gcGVyZm9ybSBhdCBhIHJlYXNvbmFibGUgY29tcHJvbWlzZSBiZXR3ZWVuIHRoZSB0d28gZ29hbHMuXFxuIDE1MTpcXHQgKi9cXG4gMTUyOlxcdHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0LypcXG4gMTU1OlxcdCAqIEEgbnVsbCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIGlzIGludGVycHJldGVkIGFzIGhhdmluZyAubW9kZT1cXFwiYXV0b1xcXCIsXFxuIDE1NjpcXHQgKiBhbmQgLml3X3RhYmxlIGlzIGludGVycHJldGVkIGFzIGFuIGFycmF5IG9mIDFzIHdpdGggbGVuZ3RoIG5yX25vZGVfaWRzLlxcbiAxNTc6XFx0ICovXFxuIDE1ODpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XFxuIDE1OTpcXHRcXHRib29sIG1vZGVfYXV0bztcXG4gMTYwOlxcdFxcdHU4IGl3X3RhYmxlW107XFxuIDE2MTpcXHR9O1xcbiAxNjI6XFx0c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIF9fcmN1ICp3aV9zdGF0ZTtcXG4gMTYzOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdC8qXFxuIDE2NjpcXHQgKiB3aV9zdGF0ZV9sb2NrIHByb3RlY3RzIGJvdGggd2lfc3RhdGUgYW5kIG5vZGVfYndfdGFibGUuXFxuIDE2NzpcXHQgKiBub2RlX2J3X3RhYmxlIGlzIG9ubHkgdXNlZCBieSB3cml0ZXJzIHRvIHVwZGF0ZSB3aV9zdGF0ZS5cXG4gMTY4OlxcdCAqL1xcbiAxNjk6XFx0c3RhdGljIERFRklORV9NVVRFWCh3aV9zdGF0ZV9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6NTguMDMzODIxNjY1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTYzNTU1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBgaXdfdGFibGVgIGFuZCBgd2lfc3RhdGVgKipcblxuUmlnaHQsIGBpd190YWJsZWAuIFRoYXQncyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgaXNuJ3QgaXQ/IE9rYXksIG5vIHByb2JsZW0sIHRoYXQgbWVhbnMgaXRzIHNpemUgaXMgZGV0ZXJtaW5lZCBhdCBydW50aW1lLCBsaWtlbHkgYXMgcGFydCBvZiBzb21lIGxhcmdlciBzdHJ1Y3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IGFycmF5IGFyZSBtYW5hZ2VkLiBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgYmFkIGRlc2lnbiwgaXQgYWxsb3dzIGZvciBkeW5hbWljIHNpemluZywgd2hpY2ggY2FuIGJlIHVzZWZ1bC5cblxuTm93LCBsZXQncyB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoaXMgYGl3X3RhYmxlYCBpcyBpbnN0YW50aWF0ZWQsIGFuZCBmb2xsb3cgdGhhdCB0byB1bmRlcnN0YW5kIGhvdyBgd2lfc3RhdGVgIGlzIGFsbG9jYXRlZC4gSSBuZWVkIHRvIHNlZSBpZiBgd2lfc3RhdGVgIGlzIGEgcGFydCBvZiB0aGF0IHBhcmVudCBzdHJ1Y3QsIGFuZCB0aGVyZWZvcmUgbGlrZWx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0b28sIG9yIGlmIGl0IGhhcyBzb21lIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3RyYXRlZ3kuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbC4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgd2lfc3RhdGVgIHZhcmlhYmxlIGV4aXN0cyBpbiBtZW1vcnkgcmVsYXRpdmUgdG8gdGhhdCBgaXdfdGFibGVgIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gVGhpcyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cywgbWVtb3J5IGxlYWtzLCBhbmQgb3ZlcmFsbCBjb2RlIHJvYnVzdG5lc3MuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IHNpemVkIGFuZCBpbml0aWFsaXplZDsgSSBzZWUgc29tZSBwb3RlbnRpYWwgaGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDowNi4xNTAxODAxMTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTQ5MTY1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvYy4qc2l6ZW9mLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDowNi4xOTcxNDMyNjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNjYwOTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBXaS1GaSBTdGF0ZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBhIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZSwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCdzIHJlbGF0ZWQgdG8gaG93IHRoZSBXaS1GaSBkcml2ZXIgaXMgbWFuYWdpbmcgaXRzIHN0YXRlIChgd2lfc3RhdGVgKS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHR5cGljYWwgZGVidWdnaW5nIGFwcHJvYWNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIG1lbW9yeSBhbGxvY2F0aW9ucyBzdXJyb3VuZGluZyB0aGF0IHN0cnVjdHVyZS4gTXkgZ3V0IHNheXMgdGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgaW4gaG93IHRoZSBgd2lfc3RhdGVgIGlzIGJlaW5nIGluaXRpYWxpemVkLCBhbGxvY2F0ZWQsIG9yIGRlYWxsb2NhdGVkLlxuXG5UaGVyZWZvcmUsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBhbmQgZWZmaWNpZW50bHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvZGUgc2VjdGlvbnMuIEknbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgaW5zdGFuY2VzIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGNvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggYHdpX3N0YXRlYC4gSSdsbCBmb2N1cyBvbiBhIGZldyBrZXkgb25lczogYHN0cnVjdF9zaXplYCwgdG8gc2VlIGhvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIGFyZSBjYWxjdWxhdGVkOyBga3phbGxvY2AsIHNpbmNlIGEgemVyb2VkIGFsbG9jYXRpb24gaXMgb2Z0ZW4gdXNlZCBhdCBzdGF0ZSBpbml0aWFsaXphdGlvbjsgYW5kIGBrbWFsbG9jYCwgYmVjYXVzZSBpdCdzIGEgY29tbW9uIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIGFyZSB1c2VkIGluIGNsb3NlIHByb3hpbWl0eSB0byBgd2lfc3RhdGVgLiBUaGF0J3MgZ29pbmcgdG8gZ2l2ZSBtZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgYWxsb2NhdGlvbiBzaXplcyBhbmQgbWVtb3J5IGRlcGVuZGVuY2llcy4gQnkgZm9jdXNpbmcgb24gdGhlc2UgZnVuY3Rpb24gY2FsbHMsIEkgY2FuIHplcm8gaW4gb24gdGhlIGV4YWN0IGxpbmVzIG9mIGNvZGUgd2hlcmUgdGhlIHN0YXRlIHZhcmlhYmxlIGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGFuZCB0aGVyZWZvcmUgcXVpY2tseSBzdGFydCBldmFsdWF0aW5nIHRoZSBsb2dpYyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjA5LjkzMzc1NjA2N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1ODE0NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdF9zaXplLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDowOS45NzkzNTMxOTJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MTI1NzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vbWVtcG9saWN5LmNgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBwb2xpY2llcyBhZ2FpbiwgYW5kIHNwZWNpZmljYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHN0cnVjdHVyZSBzaXplcy4gTXkgaW5pdGlhbCBhcHByb2FjaCB0byB1bmRlcnN0YW5kaW5nIHRoaXMgd291bGQgYmUgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc2VlLi4uIEknbSBnb2luZyB0byBzdGFydCBieSBncmVwcGluZyB0aGUgYG1tL21lbXBvbGljeS5jYCBmaWxlIGZvciBpbnN0YW5jZXMgb2YgYHN0cnVjdF9zaXplYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuIEl0J2xsIHByb2JhYmx5IGhpZ2hsaWdodCB3aGVyZSBhbmQgaG93IGBzdHJ1Y3Rfc2l6ZWAgaXMgdXNlZCBpbiBjYWxjdWxhdGluZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaGFuZGxpbmcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgbWVtb3J5IHBvbGljeSBmcmFtZXdvcmsuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgaXQgaW4gcGxhY2VzIHJlbGF0ZWQgdG8gcmVzaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIGJhc2VkIG9uIHRoZSBwb2xpY3kgaW4gZWZmZWN0LiBUaGlzIGdyZXAgaXMgYSBxdWljayB3YXkgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUgYW5kIGNvbnRleHQsIGdpdmluZyBtZSBhIHNvbGlkIGJhc2lzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIHJlYXNvbmluZy4gSXQgaXMgYSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2ggdG8gZ2V0IHN0YXJ0ZWQuIEknbGwgbmVlZCB0byBmb2xsb3cgdXAgd2l0aCBjYXJlZnVsIGV4YW1pbmF0aW9uIG9mIHRoZSBhZGphY2VudCBjb2RlLCBidXQgdGhpcyBncmVwIHdpbGwgYmUgaW5zdHJ1bWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MTMuMzUwNjE0MTI3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxMjM3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0X3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjEzLjM5ODQ0MTc2MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE2NDQzMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBtbS9tZW1wb2xpY3kuY2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHplcm9pbmcgaW4gb24gaG93IG1lbW9yeSBhbGxvY2F0aW9uIHBsYXlzIG91dCBhcm91bmQgdGhlIGBuZXdfd2lfc3RhdGVgIHZhcmlhYmxlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IEkgbmVlZCB0byBsb29rIGF0IGhvdyBkaWZmZXJlbnQgbWVtb3J5IHBvbGljaWVzIGludGVyYWN0IHdpdGggYWxsb2NhdGlvbiwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBmaWxlLiBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGttYWxsb2NgIGFuZCBga3phbGxvY2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHdoZW4gaXQgY29tZXMgdG8gYWxsb2NhdGluZyBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljaWVzLCBJIGZpZ3VyZSB0aGV5IGFyZSBnb2luZyB0byBwbGF5IGEga2V5IHJvbGUgaW4gc2V0dGluZyB1cCB0aGlzIG5ldyBzdGF0ZS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBhbGxvY2F0aW9uIHBvaW50cyBhbmQgaG93IHRoZSBtZW1wb2xpY3kgaXMgYXBwbGllZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlaXIgdXNhZ2UgdGhhdCBpbmZsdWVuY2UgcG9saWN5IGRlY2lzaW9ucywgb3IgcGVyaGFwcyB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgYWxsb2NhdGlvbiBmbGFncyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MTcuNzE0ODg3NjA5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxOTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfd2lfc3RhdGUuKmFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTIyMT1pbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjMyLVxcbm1tL21lbXBvbGljeS5jOjIzMzpcXHRuZXdfd2lfc3RhdGUgPSBrbWFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcXG5tbS9tZW1wb2xpY3kuYy0yMzQtXFx0aWYgKCFuZXdfd2lfc3RhdGUpIHtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM2NDM9c3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzY1NS1cXG5tbS9tZW1wb2xpY3kuYzozNjU2OlxcdG5ld193aV9zdGF0ZSA9IGt6YWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xcbm1tL21lbXBvbGljeS5jLTM2NTctXFx0aWYgKCFuZXdfd2lfc3RhdGUpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNjk3PXN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM3MDctXFxubW0vbWVtcG9saWN5LmM6MzcwODpcXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcXG5tbS9tZW1wb2xpY3kuYy0zNzA5LVxcdGlmICghbmV3X3dpX3N0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDoxNy43NjI2MTEzMjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NjMyNDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGlzIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhleSdyZSB1dGlsaXppbmcgYGttYWxsb2NfZmxleGAgYW5kIGBremFsbG9jX2ZsZXhgIGhlcmUuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIGZvY3VzIG9uIGZsZXhpYmxlIGFsbG9jYXRpb24gc2l6ZXMsIHBvdGVudGlhbGx5IGZvciBzbWFsbGVyIG9iamVjdHMgb3Igc3RydWN0dXJlcy4gTm93LCB3aGF0J3MgZ290IG15IGF0dGVudGlvbiBpcyBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIHVzaW5nIGBrbWFsbG9jX2ZsZXhgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgZGVhbHMgd2l0aCBtZW1vcnkgbm9kZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHBvbGljaWVzLCBzbyB0aGUgY2hvaWNlIG9mIGBrbWFsbG9jX2ZsZXhgIHRoZXJlIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5J3ZlIGNob3NlbiB0aGlzIGFsbG9jYXRpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgcG9saWNpZXMuIFdoYXQgaXMgYmVpbmcgYWxsb2NhdGVkLCB3aGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhbmQgZG9lcyBpdCBhbGlnbiB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneT8gSSdtIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBhbmQgZGlzc2VjdCB0aGF0IGxpbmUgdG8gc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjIxLjk1ODkzOTA2NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDUzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIxOlxcdGludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpXFxuIDIyMjpcXHR7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG4gMjI0OlxcdFxcdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xcbiAyMjU6XFx0XFx0dW5zaWduZWQgaW50IGJ3X3ZhbDtcXG4gMjI2OlxcdFxcdGludCBpO1xcbiAyMjc6XFx0XFxuIDIyODpcXHRcXHRid192YWwgPSBtaW4oY29vcmRzLVxcdTAwM2VyZWFkX2JhbmR3aWR0aCwgY29vcmRzLVxcdTAwM2V3cml0ZV9iYW5kd2lkdGgpO1xcbiAyMjk6XFx0XFx0bmV3X2J3ID0ga2NhbGxvYyhucl9ub2RlX2lkcywgc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpO1xcbiAyMzA6XFx0XFx0aWYgKCFuZXdfYncpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0bmV3X3dpX3N0YXRlID0ga21hbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxuIDIzNDpcXHRcXHRpZiAoIW5ld193aV9zdGF0ZSkge1xcbiAyMzU6XFx0XFx0XFx0a2ZyZWUobmV3X2J3KTtcXG4gMjM2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vtb2RlX2F1dG8gPSB0cnVlO1xcbiAyMzk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxuIDI0MDpcXHRcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0LypcXG4gMjQzOlxcdFxcdCAqIFVwZGF0ZSBiYW5kd2lkdGggaW5mbywgZXZlbiBpbiBtYW51YWwgbW9kZS4gVGhhdCB3YXksIHdoZW4gc3dpdGNoaW5nXFxuIDI0NDpcXHRcXHQgKiB0byBhdXRvIG1vZGUgaW4gdGhlIGZ1dHVyZSwgaXdfdGFibGUgY2FuIGJlIG92ZXJ3cml0dGVuIHVzaW5nXFxuIDI0NTpcXHRcXHQgKiBhY2N1cmF0ZSBidyBkYXRhLlxcbiAyNDY6XFx0XFx0ICovXFxuIDI0NzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0b2xkX2J3ID0gbm9kZV9id190YWJsZTtcXG4gMjUwOlxcdFxcdGlmIChvbGRfYncpXFxuIDI1MTpcXHRcXHRcXHRtZW1jcHkobmV3X2J3LCBvbGRfYncsIG5yX25vZGVfaWRzICogc2l6ZW9mKCpvbGRfYncpKTtcXG4gMjUyOlxcdFxcdG5ld19id1tub2RlXSA9IGJ3X3ZhbDtcXG4gMjUzOlxcdFxcdG5vZGVfYndfdGFibGUgPSBuZXdfYnc7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxuIDI1NjpcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG4gMjU3OlxcdFxcdGlmIChvbGRfd2lfc3RhdGUgXFx1MDAyNlxcdTAwMjYgIW9sZF93aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvKSB7XFxuIDI1ODpcXHRcXHRcXHQvKiBNYW51YWwgbW9kZTsgc2tpcCByZWR1Y2luZyB3ZWlnaHRzIGFuZCB1cGRhdGluZyB3aV9zdGF0ZSAqL1xcbiAyNTk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4gMjYwOlxcdFxcdFxcdGtmcmVlKG5ld193aV9zdGF0ZSk7XFxuIDI2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjYyOlxcdFxcdH1cXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0LyogTlVMTCB3aV9zdGF0ZSBhc3N1bWVzIGF1dG89dHJ1ZTsgcmVkdWNlIHdlaWdodHMgYW5kIHVwZGF0ZSB3aV9zdGF0ZSovXFxuIDI2NTpcXHRcXHRyZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKG5ld19idywgbmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZSk7XFxuIDI2NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxuIDI2OTpcXHRcXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuIDI3MDpcXHRcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MjEuOTU5MjQ2NzM0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTk2NDc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiBpbiBXZWlnaHRlZCBJbnRlcmxlYXZlIFN0YXRlKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YC4gUmlnaHQgYXdheSwgaXQgc2V0cyBgbmV3X3dpX3N0YXRlLVx1MDAzZW1vZGVfYXV0b2AgdG8gYHRydWVgLCBhbmQgdGhlbiBpdGVyYXRlcyB0aHJvdWdoIGBucl9ub2RlX2lkc2AgdG8gaW5pdGlhbGl6ZSBgbmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlYCB3aXRoIHRoZSB2YWx1ZSAxLiBTbywgYmFzZWQgb24gdGhhdCwgYG5ld193aV9zdGF0ZWAgc2hvdWxkIGJlIGZ1bGx5IGluaXRpYWxpemVkLCByaWdodD9cblxuQnV0IHdhaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWJvdXQgdGhhdCBga21hbGxvY19mbGV4YCBhbGxvY2F0aW9uLiBJdCdzIGRvaW5nIGBzaXplb2Yoc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUpICsgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpYC4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlJ3Mgbm8gcGFkZGluZyBpbiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgLiBPa2F5LCBsZXQncyBzZWUuLi5cblxuYGBgY1xuc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUge1xuXHRib29sIG1vZGVfYXV0bztcblx0dTggaXdfdGFibGVbXTtcbn07XG5gYGBcblxuQSBgYm9vbGAgaXMgb25lIGJ5dGUsIGFuZCBhIGB1OGAgaXMgb25lIGJ5dGUgYXMgd2VsbCwgc28gdGhlcmUncyAqbm8qIHBhZGRpbmcuIFRoaXMgY29uZmlybXMgdGhhdCBgbmV3X3dpX3N0YXRlYCBpcyBpbmRlZWQgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBwYXRjaCBtb3JlIGJyb2FkbHkuIEkgc2VlIGB3ZWlnaHRzYCBiZWluZyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AuIEl0J3MgZ2V0dGluZyBhc3NpZ25lZCBgbnJfbm9kZV9pZHNgIGJ5dGVzLlxuXG5gYGBjXG5cdHJjdV9yZWFkX2xvY2soKTtcblx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuXHRpZiAoc3RhdGUpIHtcblx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcblx0XHRcdHdlaWdodHNbaV0gPSAxO1xuXHR9XG5gYGBcblxuSW4gZWl0aGVyIGJyYW5jaCBvZiB0aGlzIGBpZmAgc3RhdGVtZW50LCBgd2VpZ2h0c2AgZ2V0cyBmdWxseSBpbml0aWFsaXplZC4gRWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIG9yIGJ5IHNldHRpbmcgZXZlcnl0aGluZyB0byAxLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbnJfbm9kZV9pZHNgIGNvcnJlY3RseSByZWZsZWN0cyB0aGUgc2l6ZSBvZiBgc3RhdGUtXHUwMDNlaXdfdGFibGVgLiBZZXMsIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgaXMgYWxsb2NhdGVkIHdpdGggYG5yX25vZGVfaWRzYCBlbGVtZW50cywgYW5kIGB3ZWlnaHRzYCBhcmUgYWxzbyBhbGxvY2F0ZWQgd2l0aCBgbnJfbm9kZV9pZHNgIGJ5dGVzLiBTbyBgd2VpZ2h0c2Agc2hvdWxkIGJlIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5JcyB0aGVyZSBhbnkgY2hhbmNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZT8gSXQgbG9va3MgbGlrZSBgd2VpZ2h0c2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogaXQgZ2V0cyB1c2VkLiBIb3dldmVyLCB3aGF0IGlmIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgaXRzZWxmIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBHb2luZyBiYWNrLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBpd190YWJsZWAgaXMgaW5pdGlhbGl6ZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBuZXZlciB0aGUgY2FzZS4gRnJvbSB3aGF0IEkgY2FuIHJlY2FsbCwgdGhlIGZ1bmN0aW9uIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgKmRvZXMqIGluaXRpYWxpemUgYGl3X3RhYmxlYCB0byAxLCBhbmQgdGhlbiBjYWxscyBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyhuZXdfYncsIG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZSlgLiBTbyBJIG5lZWQgdG8gZ28gb3ZlciBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDozMS45NTg4OTc3MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTc3OlxcdFxcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcXG4gMTc4OlxcdFxcdGlmIChzdGF0ZSlcXG4gMTc5OlxcdFxcdFxcdHdlaWdodCA9IHN0YXRlLVxcdTAwM2Vpd190YWJsZVtub2RlXTtcXG4gMTgwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAxODE6XFx0XFx0cmV0dXJuIHdlaWdodDtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0LypcXG4gMTg1OlxcdCAqIENvbnZlcnQgYmFuZHdpZHRoIHZhbHVlcyBpbnRvIHdlaWdodGVkIGludGVybGVhdmUgd2VpZ2h0cy5cXG4gMTg2OlxcdCAqIENhbGwgd2l0aCB3aV9zdGF0ZV9sb2NrLlxcbiAxODc6XFx0ICovXFxuIDE4ODpcXHRzdGF0aWMgdm9pZCByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKHVuc2lnbmVkIGludCAqYncsIHU4ICpuZXdfaXcpXFxuIDE4OTpcXHR7XFxuIDE5MDpcXHRcXHR1NjQgc3VtX2J3ID0gMDtcXG4gMTkxOlxcdFxcdHVuc2lnbmVkIGludCBjYXN0X3N1bV9idywgc2NhbGluZ19mYWN0b3IgPSAxLCBpd19nY2QgPSAwO1xcbiAxOTI6XFx0XFx0aW50IG5pZDtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxcbiAxOTU6XFx0XFx0XFx0c3VtX2J3ICs9IGJ3W25pZF07XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdC8qIFNjYWxlIGJhbmR3aWR0aHMgdG8gd2hvbGUgbnVtYmVycyBpbiB0aGUgcmFuZ2UgWzEsIHdlaWdodGluZXNzXSAqL1xcbiAxOTg6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuIDE5OTpcXHRcXHRcXHQvKlxcbiAyMDA6XFx0XFx0XFx0ICogVHJ5IG5vdCB0byBwZXJmb3JtIDY0LWJpdCBkaXZpc2lvbi5cXG4gMjAxOlxcdFxcdFxcdCAqIElmIHN1bV9idyBcXHUwMDNjIHNjYWxpbmdfZmFjdG9yLCB0aGVuIHN1bV9idyBcXHUwMDNjIFUzMl9NQVguXFxuIDIwMjpcXHRcXHRcXHQgKiBJZiBzdW1fYncgXFx1MDAzZSBzY2FsaW5nX2ZhY3RvciwgdGhlbiByb3VuZCB0aGUgd2VpZ2h0IHVwIHRvIDEuXFxuIDIwMzpcXHRcXHRcXHQgKi9cXG4gMjA0OlxcdFxcdFxcdHNjYWxpbmdfZmFjdG9yID0gd2VpZ2h0aW5lc3MgKiBid1tuaWRdO1xcbiAyMDU6XFx0XFx0XFx0aWYgKGJ3W25pZF0gXFx1MDAyNlxcdTAwMjYgc3VtX2J3IFxcdTAwM2Mgc2NhbGluZ19mYWN0b3IpIHtcXG4gMjA2OlxcdFxcdFxcdFxcdGNhc3Rfc3VtX2J3ID0gKHVuc2lnbmVkIGludClzdW1fYnc7XFxuIDIwNzpcXHRcXHRcXHRcXHRuZXdfaXdbbmlkXSA9IHNjYWxpbmdfZmFjdG9yIC8gY2FzdF9zdW1fYnc7XFxuIDIwODpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMDk6XFx0XFx0XFx0XFx0bmV3X2l3W25pZF0gPSAxO1xcbiAyMTA6XFx0XFx0XFx0fVxcbiAyMTE6XFx0XFx0XFx0aWYgKCFpd19nY2QpXFxuIDIxMjpcXHRcXHRcXHRcXHRpd19nY2QgPSBuZXdfaXdbbmlkXTtcXG4gMjEzOlxcdFxcdFxcdGl3X2djZCA9IGdjZChpd19nY2QsIG5ld19pd1tuaWRdKTtcXG4gMjE0OlxcdFxcdH1cXG4gMjE1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDozMS45NTkxNDcxOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE2ODAzMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEludGVybGVhdmUgV2VpZ2h0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgZnVuY3Rpb24uLi4gaXQgc2VlbXMgdG8gb25seSBiZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbm9kZSBzdGF0ZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKWAuICBUaGF0J3MgZm9jdXNlZCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IGl0J3MgaW1wb3J0YW50IGZvciBpbnRlcmxlYXZlIHdlaWdodHMuIE15IGNvbmNlcm4gaXMgdGhhdCBgbmV3X2l3YCwgd2hpY2ggcmVmZXJzIHRvIHRoZSBgbmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlYCwgaGFzIGEgc2l6ZSBkZWZpbmVkIGJ5IGBucl9ub2RlX2lkc2AuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIuLi4gd2hhdCBhYm91dCB0aGUgbm9kZXMgKm5vdCogY3VycmVudGx5IHByZXNlbnQgd2l0aGluIGBOX01FTU9SWWA/XG5cblRoZW4gSSBzYXcgdGhpcyBpbml0aWFsaXphdGlvbiBpbiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgOlxuXG5gYGBjXG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG5cdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbmBgYFxuXG5BaGEhIEl0J3MgKmluaXRpYWxpemluZyogYWxsIGBucl9ub2RlX2lkc2AgZWxlbWVudHMgb2YgdGhlIGludGVybGVhdmUgd2VpZ2h0cyB0byAxLCByZWdhcmRsZXNzLiBBbmQgKnRoZW4qIGByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzYCBzZWxlY3RpdmVseSBvdmVyd3JpdGVzIHRoZSB2YWx1ZXMgZm9yIHRoZSBub2RlcyB0aGF0ICphcmUqIGluIGBOX01FTU9SWWAuICBTbywgKmFsbCogZWxlbWVudHMgaW4gYGl3X3RhYmxlYCBzdGFydCBhdCAxIGFuZCBhcmUgdGhlbiAocG90ZW50aWFsbHkpIG1vZGlmaWVkLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gb3B0aW1pemluZywgYXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGludGVybGVhdmUgd2VpZ2h0cyBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGFsbG9jYXRpb24gcG9pbnRzIHRoYXQgd291bGQgY2hhbmdlIHRoaXMgYmVoYXZpb3IuIExldCBtZSBzZWUgd2hlcmUgZWxzZSBgbmV3X3dpX3N0YXRlYCBpcyBhbGxvY2F0ZWQuIExldCdzIGxvb2sgYXQgYG5vZGVfc3RvcmVgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDk5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MzguNTc1OTU0NDU5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjQzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjQzOlxcdHN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4zNjQ0OlxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMzY0NTpcXHR7XFxuMzY0NjpcXHRcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG4zNjQ3OlxcdFxcdHN0cnVjdCBpd19ub2RlX2F0dHIgKm5vZGVfYXR0cjtcXG4zNjQ4OlxcdFxcdHU4IHdlaWdodCA9IDA7XFxuMzY0OTpcXHRcXHRpbnQgaTtcXG4zNjUwOlxcdFxcbjM2NTE6XFx0XFx0bm9kZV9hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBpd19ub2RlX2F0dHIsIGtvYmpfYXR0cik7XFxuMzY1MjpcXHRcXHRpZiAoY291bnQgPT0gMCB8fCBzeXNmc19zdHJlcShidWYsIFxcXCJcXFwiKSB8fFxcbjM2NTM6XFx0XFx0ICAgIGtzdHJ0b3U4KGJ1ZiwgMCwgXFx1MDAyNndlaWdodCkgfHwgd2VpZ2h0ID09IDApXFxuMzY1NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNjU1OlxcdFxcbjM2NTY6XFx0XFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxuMzY1NzpcXHRcXHRpZiAoIW5ld193aV9zdGF0ZSlcXG4zNjU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM2NTk6XFx0XFxuMzY2MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4zNjYxOlxcdFxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxuMzY2MjpcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG4zNjYzOlxcdFxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG4zNjY0OlxcdFxcdFxcdG1lbWNweShuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLFxcbjM2NjU6XFx0XFx0XFx0XFx0XFx0XFx0bnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcXG4zNjY2OlxcdFxcdH0gZWxzZSB7XFxuMzY2NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcXG4zNjY4OlxcdFxcdFxcdFxcdG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGVbaV0gPSAxO1xcbjM2Njk6XFx0XFx0fVxcbjM2NzA6XFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZVtub2RlX2F0dHItXFx1MDAzZW5pZF0gPSB3ZWlnaHQ7XFxuMzY3MTpcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZW1vZGVfYXV0byA9IGZhbHNlO1xcbjM2NzI6XFx0XFxuMzY3MzpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxuMzY3NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbjM2NzU6XFx0XFx0aWYgKG9sZF93aV9zdGF0ZSkge1xcbjM2NzY6XFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuMzY3NzpcXHRcXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbjM2Nzg6XFx0XFx0fVxcbjM2Nzk6XFx0XFx0cmV0dXJuIGNvdW50O1xcbjM2ODA6XFx0fVxcbjM2ODE6XFx0XFxuMzY4MjpcXHRzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MzguNTc2MTE3NDc5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDg5ODA5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIHNuaXBwZXQ6XG5cbioqSW5pdGlhbGl6YXRpb24gb2YgYG5ld193aV9zdGF0ZWAgYW5kIGl0cyBXZWlnaHRlZCBJbnRlcmxlYXZlIFRhYmxlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgbmV3X3dpX3N0YXRlYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleGAuIFRoYXQncyBpbXBvcnRhbnQ7IGl0IG1lYW5zIHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYWxsIGl0cyBtZW1iZXJzLCBnZXRzIHplcm9lZCBvdXQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFdlJ3JlIGdldHRpbmcgYSBjbGVhbiBzbGF0ZSBoZXJlLCBhbmQgdGhhdCB6ZXJvLWluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwuXG5cbk5vdywgd2UncmUgZWl0aGVyIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIGBvbGRfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGVgIGludG8gdGhlIG5ldyBvbmUsIG9yLCBpZiB3ZSBkb24ndCBjb3B5LCB3ZSBzZXQgYWxsIGVsZW1lbnRzIG9mIHRoZSB0YWJsZSB0byAxLiBJbiBib3RoIHNjZW5hcmlvcywgdGhlIGBpd190YWJsZWAgaXMgZ2V0dGluZyBmdWxseSBhbmQgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQuIFRoaXMgbWFrZXMgc2Vuc2UuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGludGVybGVhdmUgdGFibGUgaXMgaW4gYSBrbm93biwgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgYW55dGhpbmcgZWxzZSBoYXBwZW5zLiBUaGUgY2hvaWNlIG9mIGNvcHlpbmcgdmVyc3VzIGluaXRpYWxpemluZyB3aXRoIG9uZXMgbGlrZWx5IGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGxvZ2ljIGFuZCB3aGF0IHJlcHJlc2VudHMgYSB2YWxpZCBzdGFydGluZyBwb2ludCBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkgbmV4dCBzdGVwIHRvIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDo0Mi45MjUxMDIyNjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2OTcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2OTc6XFx0c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjM2OTg6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4zNjk5OlxcdHtcXG4zNzAwOlxcdFxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xcbjM3MDE6XFx0XFx0dW5zaWduZWQgaW50ICpidztcXG4zNzAyOlxcdFxcdGJvb2wgaW5wdXQ7XFxuMzcwMzpcXHRcXHRpbnQgaTtcXG4zNzA0OlxcdFxcbjM3MDU6XFx0XFx0aWYgKGtzdHJ0b2Jvb2woYnVmLCBcXHUwMDI2aW5wdXQpKVxcbjM3MDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzcwNzpcXHRcXG4zNzA4OlxcdFxcdG5ld193aV9zdGF0ZSA9IGt6YWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xcbjM3MDk6XFx0XFx0aWYgKCFuZXdfd2lfc3RhdGUpXFxuMzcxMDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zNzExOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjM3MTI6XFx0XFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZVtpXSA9IDE7XFxuMzcxMzpcXHRcXG4zNzE0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbjM3MTU6XFx0XFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcXG4zNzE2OlxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2d2lfc3RhdGVfbG9jaykpO1xcbjM3MTc6XFx0XFxuMzcxODpcXHRcXHRpZiAob2xkX3dpX3N0YXRlIFxcdTAwMjZcXHUwMDI2IGlucHV0ID09IG9sZF93aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvKSB7XFxuMzcxOTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbjM3MjA6XFx0XFx0XFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcXG4zNzIxOlxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4zNzIyOlxcdFxcdH1cXG4zNzIzOlxcdFxcbjM3MjQ6XFx0XFx0aWYgKCFpbnB1dCkge1xcbjM3MjU6XFx0XFx0XFx0aWYgKG9sZF93aV9zdGF0ZSlcXG4zNzI2OlxcdFxcdFxcdFxcdG1lbWNweShuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLFxcbjM3Mjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMzcyODpcXHRcXHRcXHRnb3RvIHVwZGF0ZV93aV9zdGF0ZTtcXG4zNzI5OlxcdFxcdH1cXG4zNzMwOlxcdFxcbjM3MzE6XFx0XFx0YncgPSBub2RlX2J3X3RhYmxlO1xcbjM3MzI6XFx0XFx0aWYgKCFidykge1xcbjM3MzM6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4zNzM0OlxcdFxcdFxcdGtmcmVlKG5ld193aV9zdGF0ZSk7XFxuMzczNTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4zNzM2OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6NDIuOTI1Mjg4OTgyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTQ0MjQyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXZWlnaHQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX2ZsZXhgIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0IGJlY2F1c2UgYGt6YWxsb2NgIHplcm9lcyB0aGUgbWVtb3J5LiBUaGVuIGFsbCBlbGVtZW50cyBhcmUgZXhwbGljaXRseSBzZXQgdG8gMS4gIFNvLCBpbiB0aGlzIGNvbnRleHQsIHdlIGNhbiBzYXkgaXQncyBmdWxseSBpbml0aWFsaXplZC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0LCB0aGlzIHBhdGNoIGNoYW5nZWQgYGt6YWxsb2NgIHRvIGBrbWFsbG9jYCBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmb3IgdGhlIGB3ZWlnaHRzYCB2YXJpYWJsZTpcblxuYGBgY1xuLyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuLVx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xuK1x0d2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XG5gYGBcblxuQW5kIHRoZW4gdGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB3ZWlnaHRzIGZyb20gYSBjb3B5OlxuXG5gYGBjXG5cdHJjdV9yZWFkX2xvY2soKTtcblx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuXHRpZiAoc3RhdGUpIHtcblx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcblx0XHRcdHdlaWdodHNbaV0gPSAxO1xuXHR9XG5gYGBcblxuTXkgZmlyc3QgdGhvdWdodDogaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IGB3ZWlnaHRzYCBnZXRzIHVzZWQgdW5pbml0aWFsaXplZD8gIE5vLCBpdCBjYW4ndCBiZS4gIEVpdGhlciB0aGUgYG1lbWNweWAgd2lsbCBjb3B5IGBucl9ub2RlX2lkc2AgYnl0ZXMgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIHRvIGB3ZWlnaHRzYCwgd2hpY2ggaW1wbGljaXRseSBndWFyYW50ZWVzIGluaXRpYWxpemF0aW9uLCBvciB0aGUgbG9vcCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBgbnJfbm9kZV9pZHNgIGJ5dGVzIHRvIDEuXG5cbkJ1dCwgd2FpdCwgd2hhdCBpZiBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgd2UndmUganVzdCBlc3RhYmxpc2hlZCB0aGF0IGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgX2lzXyBmdWxseSBpbml0aWFsaXplZCBpbiBldmVyeSBpbnN0YW5jZSB3aGVyZSBpdCBpcyBhbGxvY2F0ZWQuIFNvIGB3ZWlnaHRzYCBzaG91bGQgYmUgZ3VhcmFudGVlZCBmdWxseSBpbml0aWFsaXplZC5cblxuT2theSwgbGV0J3MgY29uc2lkZXIgcGFkZGluZy4gSXMgdGhlcmUgYW55IHBhZGRpbmcgaW4gYHdlaWdodHNgPyAgSXQncyBhbiBhcnJheSBvZiBgdThgICh1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykuIE5vIHBhZGRpbmcgdGhlcmUuXG5cbk5vdywgY29uc2lkZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczogYW55IGluZm8tbGVhayB0byB1c2VyIHNwYWNlPyBgd2VpZ2h0c2AgaXMgdXNlZCBsb2NhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB0byBjYWxjdWxhdGUgYHdlaWdodF90b3RhbGAgYW5kIGByb3VuZHNgIGFuZCB0aGVuLi4uIHdoZXJlIGlzIGl0IGZyZWVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDo1MC40Nzk3MTU0NTdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzA6XFx0XFx0XFx0XFx0Lyogd2hlbiBkZWx0YSBpcyBkZXBsZXRlZCwgcmVzdW1lIGZyb20gdGhhdCBub2RlICovXFxuMjczMTpcXHRcXHRcXHRcXHRub2RlX3BhZ2VzICs9IGRlbHRhO1xcbjI3MzI6XFx0XFx0XFx0XFx0cmVzdW1lX25vZGUgPSBub2RlO1xcbjI3MzM6XFx0XFx0XFx0XFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xcbjI3MzQ6XFx0XFx0XFx0XFx0ZGVsdGEgPSAwO1xcbjI3MzU6XFx0XFx0XFx0fVxcbjI3MzY6XFx0XFx0XFx0Lyogbm9kZV9wYWdlcyBjYW4gYmUgMCBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzIGFuZCByb3VuZHMgPT0gMCAqL1xcbjI3Mzc6XFx0XFx0XFx0aWYgKCFub2RlX3BhZ2VzKVxcbjI3Mzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjczOTpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbjI3NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4yNzQxOlxcdFxcdFxcdHBhZ2VfYXJyYXkgKz0gbnJfYWxsb2NhdGVkO1xcbjI3NDI6XFx0XFx0XFx0dG90YWxfYWxsb2NhdGVkICs9IG5yX2FsbG9jYXRlZDtcXG4yNzQzOlxcdFxcdFxcdGlmICh0b3RhbF9hbGxvY2F0ZWQgPT0gbnJfcGFnZXMpXFxuMjc0NDpcXHRcXHRcXHRcXHRicmVhaztcXG4yNzQ1OlxcdFxcdFxcdHByZXZfbm9kZSA9IG5vZGU7XFxuMjc0NjpcXHRcXHR9XFxuMjc0NzpcXHRcXHRtZS1cXHUwMDNlaWxfcHJldiA9IHJlc3VtZV9ub2RlO1xcbjI3NDg6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7XFxuMjc0OTpcXHRcXHRrZnJlZSh3ZWlnaHRzKTtcXG4yNzUwOlxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuMjc1MTpcXHR9XFxuMjc1MjpcXHRcXG4yNzUzOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbjI3NTQ6XFx0XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjI3NTU6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbjI3NTY6XFx0e1xcbjI3NTc6XFx0XFx0Z2ZwX3QgcHJlZmVycmVkX2dmcDtcXG4yNzU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcXG4yNzU5OlxcdFxcbjI3NjA6XFx0XFx0cHJlZmVycmVkX2dmcCA9IGdmcCB8IF9fR0ZQX05PV0FSTjtcXG4yNzYxOlxcdFxcdHByZWZlcnJlZF9nZnAgXFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XFxuMjc2MjpcXHRcXG4yNzYzOlxcdFxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbjI3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbjI3NjU6XFx0XFxuMjc2NjpcXHRcXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxuMjc2NzpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG4yNzY4OlxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbjI3Njk6XFx0XFx0XFx0XFx0XFx0cGFnZV9hcnJheSArIG5yX2FsbG9jYXRlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjUwLjQ3OTg4MDUxN1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk1NDA2Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga3phbGxvYyB0byBrbWFsbG9jIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJZZXMsIGBrZnJlZSh3ZWlnaHRzKWAgKmlzKiBjYWxsZWQgYXQgdGhlIGVuZCBvZiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC5cIiBCdXQgd2FpdCBhIG1pbnV0ZSwgd2hhdCBpZiB0aGUgZnVuY3Rpb24gZXhpdHMgZWFybHksIGR1ZSB0byBhIGZhaWx1cmUgaW4gcGFnZSBhbGxvY2F0aW9uPyBDaGVja2luZyB0aGUgY29kZSwgSSBzZWUgYSBicmVhayBzdGF0ZW1lbnQ6XG5cbmBgYGNcblx0XHQvKiBub2RlX3BhZ2VzIGNhbiBiZSAwIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgYW5kIHJvdW5kcyA9PSAwICovXG5cdFx0aWYgKCFub2RlX3BhZ2VzKVxuXHRcdFx0YnJlYWs7XG5gYGBcblxuUmlnaHQsIGlmIGl0IGJyZWFrcyBvdXQgZWFybHksIHRoZSBjb2RlIHByb2NlZWRzIHRvOlxuXG5gYGBjXG5cdG1lLVx1MDAzZWlsX3ByZXYgPSByZXN1bWVfbm9kZTtcblx0bWUtXHUwMDNlaWxfd2VpZ2h0ID0gcmVzdW1lX3dlaWdodDtcblx0a2ZyZWUod2VpZ2h0cyk7XG5cdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG5gYGBcblxuU28sIGB3ZWlnaHRzYCBpcyBwcm9wZXJseSBmcmVlZCBldmVuIGluIGFuIGVhcmx5IGV4aXQsIHdoaWNoIGlzIGdvb2QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNoYW5nZSBpcyBga3phbGxvY2AgdG8gYGttYWxsb2NgLCBtZWFuaW5nIHdlIGFyZW4ndCB6ZXJvLWluaXRpYWxpemluZyB0aGUgYHdlaWdodHNgIGFycmF5IGFueW1vcmUuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSAqaW1tZWRpYXRlbHkqIGFmdGVyIHRoZSBhbGxvY2F0aW9uIGVpdGhlciBkb2VzIGEgYG1lbWNweWAgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgLCB3aGljaCBpdHNlbGYgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIG9yIGl0IHNldHMgYWxsIGVsZW1lbnRzIGluIHRoZSBgd2VpZ2h0c2AgYXJyYXkgdG8gMS4gU28sIGB3ZWlnaHRzYCAqaXMqIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgcmVhZC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiwgYXZvaWRpbmcgcmVkdW5kYW50IHplcm9pbmcuIFRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLCBzbyBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSBzb21ldGhpbmcgZGlmZmVyZW50LiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCAqaXMqIG9ubHkgdGhpcyBvbmUgY2hhbmdlOlxuXG5gYGBjXG4gXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXG4tXHR3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7XG4rXHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKTtcbiBcdGlmICghd2VpZ2h0cylcbmBgYFxuXG5ZdXAsIGp1c3QgdGhlIG9uZS4gQmVjYXVzZSBgd2VpZ2h0c2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEgZWl0aGVyIGBtZW1jcHlgIG9yIHRoZSBsb29wLCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY29ycnVwdGlvbiwgYW5kIGNhdGNoIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhbmQgbm8gc3BlY2lhbCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjcsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6NTkuOTc1Mjg5Njg2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowst2r9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 17:09:34 +0000 UTC FinishedAt: 2026-08-21 17:41:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "575152a248b8192994b64d0b746a93890373715c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "575152a248b8192994b64d0b746a93890373715c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "dbff0c1a-80f5-4dea-abf2-db3c044cc6bd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgKHdoaWNoIGlzIGl0c2VsZiBmdWxseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uKSBvciBhIGxvb3AgdGhhdCBzZXRzIGFsbCBlbGVtZW50cyB0byAxLiBUaHVzLCB0aGUgYHdlaWdodHNgIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb2YgaXRzIGVsZW1lbnRzIGFyZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGM1YmYyMzE4ZWQwMzY1OWFmNzBjODFjNzlkNGIwODE2NjY5YTY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6Mzg6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTAxZTBiODBkN2RhMS4uMWVmNTBjYTM3ZDQyYiAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTI2ODgsNyAmIzQzOzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbiBcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKTtcbiBcdGlmICghd2VpZ2h0cylcbiBcdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNGM1YmYyMzE4ZWQwMzY1OWFmNzBjODFjNzlkNGIwODE2NjY5YTY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTc6Mzg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jCkBAIC0yNjg4LDcgJiM0MzsyNjg4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAlwcmV2X25vZGUgPSBub2RlOwogCiAJLyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqLwotCXdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTsKJiM0MzsJd2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCAmYW1wOyBHRlBfUkVDTEFJTV9NQVNLKTsKIAlpZiAoIXdlaWdodHMpCiAJCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjaGFuZ2VzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2Vzcy4KCioqRXhhbWluaW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlIGluIG1lbXBvbGljeS5jKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgYG1tL21lbXBvbGljeS5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHNvbWVvbmUmIzM5O3MgbWFraW5nIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhleSYjMzk7cmUgc2hpZnRpbmcgZnJvbSB1c2luZyBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSylgIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gU28sIGl0JiMzOTtzIGEgc3dhcCBmcm9tIHplcm9pbmcgYW5kIGtlcm5lbC1zcGVjaWZpYyBtZW1vcnkgdG8gYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGNodW5rLCBidXQgd2l0aCBtb3JlIG51YW5jZWQgcmVjbGFpbSBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGl0c2VsZi4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBXaGF0JiMzOTtzIGl0IGJlaW5nIHVzZWQgZm9yPyBUaGlzIGZ1bmN0aW9uIGxpa2VseSBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIG1lbW9yeSBwb2xpY3kgaW50ZXJhY3RzIHdpdGggcGFnZSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggTlVNQSBzeXN0ZW1zLiBUaGF0IGNoYW5nZSBmcm9tIGBremFsbG9jYCB0byBga21hbGxvY2AgaXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZS4gSXMgaXQgcGVyZm9ybWFuY2UtZHJpdmVuPyBNZW1vcnkgZm9vdHByaW50PyBPciBpcyB0aGVyZSBhIG1vcmUgZnVuZGFtZW50YWwgaXNzdWUgdGhpcyBpcyBhZGRyZXNzaW5nLCBwZXJoYXBzIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0gdW5kZXIgc3BlY2lmaWMgd29ya2xvYWRzIG9yIGNvbmZpZ3VyYXRpb25zPyBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGBHRlBfUkVDTEFJTV9NQVNLYCB3aGljaCBtYXkgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgY29kZSBhbmQgZmlndXJlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTI2MDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjM0LVxubW0vbWVtcG9saWN5LmM6MjYzNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYzNi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jPTI3Nzk9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3OTMtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc5NDpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI3OTUtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdlaWdodGVkIEludGVybGVhdmUgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgICp3aGVuKiB0aGUgbWVtb3J5IHBvbGljeSBpcyBzZXQgdG8gYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IGNvbnRleHQuCgpUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIGlzIHRoYXQgd2UmIzM5O3JlIHN3aXRjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbWV0aG9kLiBXZSYjMzk7cmUgZ29pbmcgZnJvbSBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSylgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgYWxsb2NhdGlvbiBmbGFncyBhcmUgYmVpbmcgYWx0ZXJlZCwgd2UmIzM5O3JlIGxvc2luZyB0aGUgemVyb2luZyBvZiB0aGUgbWVtb3J5LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGZpbmUuIE9mdGVuIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgbGF0ZXIuCgpCdXQgd2FpdC4gKklzKiB0aGUgbWVtb3J5IGluaXRpYWxpemVkIGxhdGVyIGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgPyBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzbiYjMzk7dCBnb2luZyB0byBpbnRyb2R1Y2Ugc29tZSBzb3J0IG9mIHNlY3VyaXR5IGxlYWsgb3IgdW5pbml0aWFsaXplZCBkYXRhIHJlYWQuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZnVuY3Rpb24gaXRzZWxmIHRvIHZlcmlmeSB0aGF0IGl0IGRvZXMsIGluIGZhY3QsIGhhbmRsZSB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2ODA6XHRcdFx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xuMjY4MTpcdFx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjgyOlx0XHRcdH1cbjI2ODM6XHRcdFx0LyogT3RoZXJ3aXNlIHdlIGFkanVzdCByZW1haW5pbmcgcGFnZXMsIGNvbnRpbnVlIGZyb20gdGhlcmUgKi9cbjI2ODQ6XHRcdFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcbjI2ODU6XHRcdH1cbjI2ODY6XHRcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbjI2ODc6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4yNjg4Olx0XHRwcmV2X25vZGUgPSBub2RlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuMjY5MTpcdFx0d2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XG4yNjkyOlx0XHRpZiAoIXdlaWdodHMpXG4yNjkzOlx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjk0Olx0XG4yNjk1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjk2Olx0XHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XG4yNjk3Olx0XHRpZiAoc3RhdGUpIHtcbjI2OTg6XHRcdFx0bWVtY3B5KHdlaWdodHMsIHN0YXRlLVx1MDAzZWl3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMjY5OTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3MDA6XHRcdH0gZWxzZSB7XG4yNzAxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjcwMjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4yNzAzOlx0XHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4yNzA0Olx0XHR9XG4yNzA1Olx0XG4yNzA2Olx0XHQvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqL1xuMjcwNzpcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxuMjcwODpcdFx0XHR3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07XG4yNzA5Olx0XG4yNzEwOlx0XHQvKlxuMjcxMTpcdFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4yNzEyOlx0XHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuMjcxMzpcdFx0ICpcbjI3MTQ6XHRcdCAqIGlmIChyb3VuZHMgXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXG4yNzE1Olx0XHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxuMjcxNjpcdFx0ICovXG4yNzE3Olx0XHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XG4yNzE4Olx0XHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcbjI3MTk6XHRcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMDpcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xuMjcyMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm5vZGVzOyBpJiM0MzsmIzQzOykge1xuMjcyMjpcdFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMzpcdFx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuMjcyNDpcdFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuMjcyNTpcdFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuMjcyNjpcdFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuMjcyNzpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IHdlaWdodDtcbjI3Mjg6XHRcdFx0XHRkZWx0YSAtPSB3ZWlnaHQ7XG4yNzI5Olx0XHRcdH0gZWxzZSBpZiAoZGVsdGEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqaXMqIGRlZmVycmVkLCBoYW5kbGVkIGxhdGVyIGluIHRoZSBwcm9jZXNzLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfZGVyZWZlcmVuY2UoKWAgY29uZmlybXMgdGhhdCB0aGUgd2VpZ2h0cyBhcmUgZWl0aGVyIGNvcGllZCBmcm9tIGEgcHJlLWV4aXN0aW5nIHN0YXRlIG9yLCBpZiB0aGF0IHN0YXRlIGlzbiYjMzk7dCBhdmFpbGFibGUsIGluaXRpYWxpemVkIHRvIGFsbCBvbmVzLiBUaGlzIG1ha2VzIHRoZSBga21hbGxvY2AgY2FsbCwgYXMgdXNlZCwgcGVyZmVjdGx5IHZhbGlkIGluIHRoaXMgY29udGV4dC4KClRoZSBzdWJzZXF1ZW50IGNoYW5nZSwgd2hlcmUgYGdmcGAgaXMgYml0d2lzZS1BTkRlZCB3aXRoIGBHRlBfUkVDTEFJTV9NQVNLYCwgaXMgYWxzbyBmdW5jdGlvbmFsbHkgc291bmQuIEl0JiMzOTtzIGEgcHJ1ZGVudCBtb3ZlLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYEdGUF9LRVJORUxgIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgYmxvY2tpbmcgb3IgcHJvYmxlbXMgaWYgdGhlIGNhbGxpbmcgY29kZSBpbmFkdmVydGVudGx5IHBhc3NlcyBhdG9taWMgR0ZQIGZsYWdzLiBUaGlzIGlzIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpbiBgbW0vbWVtcG9saWN5LmNgLgoKSSBiZWxpZXZlIHRoaXMgaXMgYSBmdW5jdGlvbmFsbHkgaW1wb3J0YW50IGNoYW5nZSB3b3J0aHkgb2YgYXR0ZW50aW9uLCBzbyBJIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZz10cnVlYCBmb3IgdGhpcyBjb2RlLgoKTm93IEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGUgY2FsbGVyIGlzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHdoaWNoIGlzIGV4cG9ydGVkLiBJIGFtIG5vdCBjZXJ0YWluIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGEgbWFjcm8sIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgZWxzZS4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc3OC0gKi9cbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc4MC1cdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIEV4cG9ydCBTdGF0dXMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gR2l2ZW4gdGhhdCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB3aGV0aGVyIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyB0aGlzIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGJlIHVzZWQgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0PyBEZXRlcm1pbmluZyBpdHMgZXhwb3J0IHN0YXR1cyBpcyBjcnVjaWFsLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBpdCYjMzk7cyB0cmVhdGVkIGJ5IHRoZSBsaW5rZXIgYW5kIGl0cyB2aXNpYmlsaXR5IGFjcm9zcyBtb2R1bGVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gdGhlIHN5bWJvbCB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphbGxvY19wYWdlc19idWxrX21lbXBvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdHJhY2UgaXRzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIFdoZXJlIGlzIGl0IGxvY2F0ZWQ/IElzIGl0IGEgaGVhZGVyIGZpbGU/IEEgc3RhdGljIGlubGluZSBmdW5jdGlvbj8gT3IgaXMgaXQgZGVmaW5lZCBpbiBzb21lIHNwZWNpZmljIGAuY2AgZmlsZSBzb21ld2hlcmU/IEtub3dpbmcgdGhlIGV4YWN0IGRlY2xhcmF0aW9uIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUsIHRoZSB0eXBlcyBvZiBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCBwb3RlbnRpYWxseSB3aGV0aGVyIGl0JiMzOTtzIHN1YmplY3QgdG8gY2VydGFpbiBidWlsZC10aW1lIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNzZWN0aW5nIGFueSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhpcyBkZWNsYXJhdGlvbiBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMS0jZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc4LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3OTp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxubW0vdm1hbGxvYy5jPTM2Njk9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vdm1hbGxvYy5jLTM3MzYtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxubW0vdm1hbGxvYy5jOjM3Mzc6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXG5tbS92bWFsbG9jLmMtMzczOC1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSB2bWFsbG9jIGFyZWEuIFRoZSBjYWxsIHN0YWNrIHN0YXJ0cyB3aXRoIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpbiBgbW0vdm1hbGxvYy5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSwgaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGJ1bGsgb2YgdGhlIHdvcmsgaXMgZG9uZS4gQnV0LCBoYW5nIG9uLi4uIGlzIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBhbHNvIHdvcnRoIGEgbG9vaz8gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBzbyBkZWZpbml0ZWx5LiBXYWl0IGEgbWludXRlLi4uIGlzbiYjMzk7dCB0aGF0IHN0YXRpYz8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgc28gSSBkb24mIzM5O3Qgd2FzdGUgdGltZSBvbiBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXh0ZXJuYWxseSB2aXNpYmxlLiBPa2F5LCB0aW1lIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzbyBJIGNhbiBkZWNpZGUgaWYgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bV9hcmVhX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zNjY4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG5tbS92bWFsbG9jLmM6MzY2OTp2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbm1tL3ZtYWxsb2MuYy0zNjcwLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcylcbi0tXG5tbS92bWFsbG9jLmM9Mzg2Nj1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtMzkxNC1cdCAqL1xubW0vdm1hbGxvYy5jOjM5MTU6XHRhcmVhLVx1MDAzZW5yX3BhZ2VzID0gdm1fYXJlYV9hbGxvY19wYWdlcyhcbm1tL3ZtYWxsb2MuYy0zOTE2LVx0XHRcdHZtYWxsb2NfZ2ZwX2FkanVzdChnZnBfbWFzaywgcGFnZV9vcmRlciksIG5vZGUsXG4tLVxubW0vdm1hbGxvYy5jLTM5MjQtXHRcdC8qXG5tbS92bWFsbG9jLmM6MzkyNTpcdFx0ICogdm1fYXJlYV9hbGxvY19wYWdlcygpIGNhbiBmYWlsIGR1ZSB0byBpbnN1ZmZpY2llbnQgbWVtb3J5IGJ1dFxubW0vdm1hbGxvYy5jLTM5MjYtXHRcdCAqIGFsc286LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgSSBwcm9iYWJseSB3b24mIzM5O3QgZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZSBkaXJlY3RseSwgc28gbGV0JiMzOTtzIHNoaWZ0IG91ciBmb2N1cy4gTG9va3MgbGlrZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgc3ltYm9sIHRvIGV4YW1pbmUuIFRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgY2FsbGVycyBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYD8gTGV0IG1lIHNlZS4uLiBub3BlLCB0aGUgb25seSBwbGFjZSBpdCYjMzk7cyBjYWxsZWQgaXMgZnJvbSBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaW4gYG1tL3ZtYWxsb2MuY2AuIFdhaXQgYSBtaW51dGUsIGhvbGQgdXAhIEkmIzM5O20gZm9yZ2V0dGluZyBzb21ldGhpbmcuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgaXMgYSBtYWNybywgbm90IGEgZnVuY3Rpb24sIHNvIGl0IG1pZ2h0IGJlIGV4cGFuZGVkIGFuZCBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMuIEFscmlnaHQsIGxldCYjMzk7cyBiYWNrIHVwIGFuZCBjaGVjayBob3cgdGhhdCBtYWNybyBpdHNlbGYgaXMgdXNlZC4gTmVlZCB0byBzZWUgd2hhdCBwbGFjZXMgaW4gdGhlIGNvZGUgdGhhdCBtYWNybyBpcyBhY3R1YWxseSBleHBhbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXHRcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxuLS1cbm1tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc3OC0gKi9cbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjc4MC1cdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuLS1cbm1tL3ZtYWxsb2MuYz0zNjY5PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzM2LVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzM3Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3MzgtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCBNYWNybyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIEkmIzM5O20gZXhhbWluaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZywgZ29vZCB0byBrbm93IHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UuIE5vdywgdGhlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgbWFjcm8gaXMgdGhlIG5leHQgdGhpbmcgSSYjMzk7bSBmb2N1c2VkIG9uIGFuZCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGVyZSB0aGF0JiMzOTtzIGJlaW5nIGludm9rZWQuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgbWFjcm8gaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGltZSB0byBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyB1c2VkLCBpZiBhdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yNzUzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NzgtICovXG5tbS9tZW1wb2xpY3kuYzoyNzc5OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3ODAtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS92bWFsbG9jLmM9MzY2OT12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS92bWFsbG9jLmMtMzczNi1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXHUwMDI2XHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXG5tbS92bWFsbG9jLmM6MzczNzpcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbm1tL3ZtYWxsb2MuYy0zNzM4LVx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGh1bmNoIHdhcyByaWdodDsgaXQgYXBwZWFycyBvbmx5IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGRpcmVjdGx5IGVtcGxveWVkIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gSW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGUuLi4gV2h5IGlzIGBtbS92bWFsbG9jLmNgIHVzaW5nIHRoZSAqZnVuY3Rpb24qIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIG1hY3JvPyBTaG91bGRuJiMzOTt0IGl0IGJlIGdvaW5nIHRocm91Z2ggdGhlIHN0YW5kYXJkIGFic3RyYWN0aW9uPyBUaGlzIGlzIHVudXN1YWwuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vdm1hbGxvYy5jYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzczMDpcdFxuMzczMTpcdFx0XHRcdC8qIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBtZW1wb2xpY3ksIHdlIGNhbiYjMzk7dFxuMzczMjpcdFx0XHRcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG4zNzMzOlx0XHRcdFx0ICogb3RoZXJ3aXNlIG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGluIG9ubHkgb25lIG5vZGUsXG4zNzM0Olx0XHRcdFx0ICogYnV0IG1lbXBvbGljeSB3YW50cyB0byBhbGxvYyBtZW1vcnkgYnkgaW50ZXJsZWF2aW5nLlxuMzczNTpcdFx0XHRcdCAqL1xuMzczNjpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbjM3Mzc6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcbjM3Mzg6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzM5Olx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc0MDpcdFx0XHRcdGVsc2VcbjM3NDE6XHRcdFx0XHRcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcbjM3NDI6XHRcdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4zNzQzOlx0XHRcdFx0XHRcdFx0XHRwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQpO1xuMzc0NDpcdFxuMzc0NTpcdFx0XHRcdGZvciAoaSA9IG5yX2FsbG9jYXRlZDsgaSBcdTAwM2MgbnJfYWxsb2NhdGVkICYjNDM7IG5yOyBpJiM0MzsmIzQzOylcbjM3NDY6XHRcdFx0XHRcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XG4zNzQ3Olx0XG4zNzQ4Olx0XHRcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBucjtcbjM3NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gY29kZSwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQgZGlyZWN0bHkgdXRpbGl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoYXQgZnVuY3Rpb24sIHRoZXJlZm9yZSwgaXMgZGVmaW5pdGVseSBhIGtleSBmb2NhbCBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBhbGxvY2F0aW9uIHByb2Nlc3MuCgpOb3csIHdoYXQgYWJvdXQgYF9fdm1hbGxvY19hcmVhX25vZGVgPyBBaCwgcmlnaHQsIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgd2hpbGUgaW1wb3J0YW50IGludGVybmFsbHksIGl0IHdvbiYjMzk7dCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBpdHMgc2NvcGUuIEJ1dCwgYF9fdm1hbGxvY19ub2RlYCBpcyBleHBvcnRlZCwgYW5kIGl0IGNhbGxzIHRoYXQgc3RhdGljIGZ1bmN0aW9uLiBXb3J0aCBrZWVwaW5nIHRoYXQgaW4gbWluZCBhcyBhIHBvaW50IG9mIGNvbXBhcmlzb24uCgpXYWl0LCBiYWNrIHRvIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLi4uaXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQ/IE5vLCBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiByZXNpZGluZyB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0sIGFzc3VtaW5nIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBjb25maWd1cmF0aW9uLgoKV2hpY2ggYnJpbmdzIG1lIHRvIHRoZSBuZXh0IHF1ZXN0aW9uOiBpcyBgQ09ORklHX05VTUFgIGEgcmVxdWlyZW1lbnQgaGVyZT8gWWVzLCBhYnNvbHV0ZWx5LiBgQ09ORklHX05VTUFgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSBjb21waWxhdGlvbiBvZiBgbW0vbWVtcG9saWN5LmNgIGFuZCB0aGF0IHRoZSBgSVNfRU5BQkxFRChDT05GSUdfTlVNQSlgIG1hY3JvIGV2YWx1YXRlcyB0byB0cnVlLiBXaXRob3V0IHRoYXQsIHdlIHdvdWxkbiYjMzk7dCBldmVuIGJlIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbi4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgZGVwZW5kZW5jeSBpbiBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGUtdGltZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc2MQoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX05VTUFgIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGhlcmUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gbWVtcG9saWN5LCBzcGVjaWZpY2FsbHkgaW4gaG93IGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgd2l0aCBhIHdlaWdodGVkIGludGVybGVhdmUgcG9saWN5LiBUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3Mgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLCBzaGlmdGluZyBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwICZhbXA7IEdGUF9SRUNMQUlNX01BU0spYC4gVGhpcyBzY3JlYW1zIGZ1enppbmcgb3Bwb3J0dW5pdHkuCgpUaGVyZWZvcmUsIGZvciBteSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBUaGUgZm9jdXMgc3ltYm9sIEkmIzM5O3ZlIGNob3NlbiBpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgZXhwbGljaXRseSBzZXQgdG8gYE5VTUFgIGJlY2F1c2UgdGhhdCYjMzk7cyBlc3NlbnRpYWwgZm9yIHRoaXMgY2hhbmdlLiBUaGUgcmF0aW9uYWxlIGlzIHByZWNpc2VseSB0aGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYWx0ZXJhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygd2VpZ2h0ZWQgaW50ZXJsZWF2ZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb2N1cyBzeW1ib2wuIENoZWNraW5nLi4uIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLCB3aGVyZWFzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBJIG1hZGUgdGhlIHJpZ2h0IGNob2ljZS4gTXkgcmVhc29uaW5nIGlzIHNvdW5kLiAgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXQgaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtZW1wb2xpY3kpIHRoYXQgYWZmZWN0cyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24gd2l0aCB3ZWlnaHRlZCBpbnRlcmxlYXZlIHBvbGljeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYGt6YWxsb2NgIHdpdGggYGttYWxsb2NgIGZvciB0aGUgYHdlaWdodHNgIGFycmF5IGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBXaGlsZSB0aGlzIHJlbW92ZXMgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnksIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGFsbG9jYXRpb24gd2l0aCBlaXRoZXIgYSBgbWVtY3B5YCB0aGF0IGZ1bGx5IHBvcHVsYXRlcyB0aGUgYXJyYXkgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDRjNWJmMjMxOGVkMDM2NTlhZjcwYzgxYzc5ZDRiMDgxNjY2OWE2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDE3OjM4OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA1MDFlMGI4MGQ3ZGExLi4xZWY1MGNhMzdkNDJiIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMjY4OCw3ICYjNDM7MjY4OCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJcHJldl9ub2RlID0gbm9kZTsKIAogCS8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi8KLQl3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7CiYjNDM7CXdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSyk7CiAJaWYgKCF3ZWlnaHRzKQogCQlyZXR1cm4gdG90YWxfYWxsb2NhdGVkOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggaG93IHdlIGFsbG9jYXRlIG1lbW9yeSBpbiBgbW0vbWVtcG9saWN5LmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCBga3phbGxvY2AgZm9yIGBrbWFsbG9jYCB3aGVuIGFsbG9jYXRpbmcgYG5yX25vZGVfaWRzYCBieXRlcy4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZS4gQmFzaWNhbGx5LCBgd2VpZ2h0c2AgaXMgbm8gbG9uZ2VyIGdvaW5nIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB3ZSYjMzk7cmUgbm93IHVzaW5nIGBrbWFsbG9jYCB3aXRoIGBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTS2AgaW5zdGVhZC4KClRoYXQmIzM5O3MgYW4gaW1tZWRpYXRlIHJlZCBmbGFnLiBNeSBicmFpbiBpcyBzY3JlYW1pbmcsICYjMzQ7VW5pbml0aWFsaXplZCBtZW1vcnkhIFBvdGVudGlhbCBidWdzISYjMzQ7LiBUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHdlICphY3R1YWxseSogaW5pdGlhbGl6aW5nIHRoZSBgd2VpZ2h0c2AgYXJyYXkgYmVmb3JlIGl0cyBmaXJzdCB1c2U/IFRoaXMgaXMgY3JpdGljYWwuIElmIHdlJiMzOTtyZSBub3QsIHdlIGNvdWxkIGhhdmUgc2VyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGRhdGEgbGVha3MsIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGNvZGUgcmlnaHQgYXdheSBhbmQgdHJhY2UgYWxsIHVzZXMgb2YgYHdlaWdodHNgIHRvIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLCBhbmQgaXMgc2FmZS4gSSBtdXN0IGNvbmZpcm0gdGhlIGltcGFjdCBvZiB0aGlzIGBrbWFsbG9jYCBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTI2MDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjM0LVxubW0vbWVtcG9saWN5LmM6MjYzNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYzNi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jPTI3Nzk9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3OTMtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmM6Mjc5NDpcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbm1tL21lbXBvbGljeS5jLTI3OTUtXHRcdFx0XHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nIGlzIGltcGxlbWVudGVkIGF0IHRoZSBjb3JlIGFsbG9jYXRpb24gbGV2ZWwsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGNvb3JkaW5hdGluZyBwYWdlIGRpc3RyaWJ1dGlvbiBhY3Jvc3MgTlVNQSBub2RlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHdlaWdodHMuIE15IGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gbGV2ZXJhZ2VzIHRoZSBleGlzdGluZyBtZW1vcnkgcG9saWN5IGluZnJhc3RydWN0dXJlLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgaXQgZXh0ZW5kcyBhbmQgb3B0aW1pemVzIGl0IGZvciBidWxrIG9wZXJhdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgaWYgaXQgaW1wbGVtZW50cyBhbnkgZm9ybSBvZiBmYWlybmVzcyBvciByZXRyeSBtZWNoYW5pc21zIHRvIGRlYWwgd2l0aCByZXNvdXJjZSBjb250ZW50aW9uLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgb3B0aW1pemF0aW9ucyBzcGVjaWZpYyB0byBidWxrIGFsbG9jYXRpb24gY29tcGFyZWQgdG8gc2luZ2xlLXBhZ2UgYWxsb2NhdGlvbiDigJMgcGVyaGFwcyBiYXRjaGluZyBvZiBub2RlIHNlbGVjdGlvbiBvciBwcmUtY2FsY3VsYXRpb24gb2YgYWxsb2NhdGlvbiB0YXJnZXRzLiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBsaW5lcyB1cCB3aXRoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYzNTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4yNjM2Olx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjI2Mzc6XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxuMjYzODpcdHtcbjI2Mzk6XHRcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbjI2NDA6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50O1xuMjY0MTpcdFx0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbjI2NDI6XHRcdHVuc2lnbmVkIGxvbmcgdG90YWxfYWxsb2NhdGVkID0gMDtcbjI2NDM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcbjI2NDQ6XHRcdHVuc2lnbmVkIGxvbmcgcm91bmRzO1xuMjY0NTpcdFx0dW5zaWduZWQgbG9uZyBub2RlX3BhZ2VzLCBkZWx0YTtcbjI2NDY6XHRcdHU4ICp3ZWlnaHRzLCB3ZWlnaHQ7XG4yNjQ3Olx0XHR1bnNpZ25lZCBpbnQgd2VpZ2h0X3RvdGFsID0gMDtcbjI2NDg6XHRcdHVuc2lnbmVkIGxvbmcgcmVtX3BhZ2VzID0gbnJfcGFnZXM7XG4yNjQ5Olx0XHRub2RlbWFza190IG5vZGVzO1xuMjY1MDpcdFx0aW50IG5ub2Rlcywgbm9kZTtcbjI2NTE6XHRcdGludCByZXN1bWVfbm9kZSA9IE1BWF9OVU1OT0RFUyAtIDE7XG4yNjUyOlx0XHR1OCByZXN1bWVfd2VpZ2h0ID0gMDtcbjI2NTM6XHRcdGludCBwcmV2X25vZGU7XG4yNjU0Olx0XHRpbnQgaTtcbjI2NTU6XHRcbjI2NTY6XHRcdGlmICghbnJfcGFnZXMpXG4yNjU3Olx0XHRcdHJldHVybiAwO1xuMjY1ODpcdFxuMjY1OTpcdFx0LyogcmVhZCB0aGUgbm9kZXMgb250byB0aGUgc3RhY2ssIHJldHJ5IGlmIGRvbmUgZHVyaW5nIHJlYmluZCAqL1xuMjY2MDpcdFx0ZG8ge1xuMjY2MTpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuMjY2MjpcdFx0XHRubm9kZXMgPSByZWFkX29uY2VfcG9saWN5X25vZGVtYXNrKHBvbCwgXHUwMDI2bm9kZXMpO1xuMjY2MzpcdFx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG4yNjY0Olx0XG4yNjY1Olx0XHQvKiBpZiB0aGUgbm9kZW1hc2sgaGFzIGJlY29tZSBpbnZhbGlkLCB3ZSBjYW5ub3QgZG8gYW55dGhpbmcgKi9cbjI2NjY6XHRcdGlmICghbm5vZGVzKVxuMjY2NzpcdFx0XHRyZXR1cm4gMDtcbjI2Njg6XHRcbjI2Njk6XHRcdC8qIENvbnRpbnVlIGFsbG9jYXRpbmcgZnJvbSBtb3N0IHJlY2VudCBub2RlIGFuZCBhZGp1c3QgdGhlIG5yX3BhZ2VzICovXG4yNjcwOlx0XHRub2RlID0gbWUtXHUwMDNlaWxfcHJldjtcbjI2NzE6XHRcdHdlaWdodCA9IG1lLVx1MDAzZWlsX3dlaWdodDtcbjI2NzI6XHRcdGlmICh3ZWlnaHQgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgbm9kZXMpKSB7XG4yNjczOlx0XHRcdG5vZGVfcGFnZXMgPSBtaW4ocmVtX3BhZ2VzLCB3ZWlnaHQpO1xuMjY3NDpcdFx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxuMjY3NTpcdFx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4yNjc2Olx0XHRcdHBhZ2VfYXJyYXkgJiM0Mzs9IG5yX2FsbG9jYXRlZDtcbjI2Nzc6XHRcdFx0dG90YWxfYWxsb2NhdGVkICYjNDM7PSBucl9hbGxvY2F0ZWQ7XG4yNjc4Olx0XHRcdC8qIGlmIHRoYXQmIzM5O3MgYWxsIHRoZSBwYWdlcywgbm8gbmVlZCB0byBpbnRlcmxlYXZlICovXG4yNjc5Olx0XHRcdGlmIChyZW1fcGFnZXMgXHUwMDNjPSB3ZWlnaHQpIHtcbjI2ODA6XHRcdFx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xuMjY4MTpcdFx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjgyOlx0XHRcdH1cbjI2ODM6XHRcdFx0LyogT3RoZXJ3aXNlIHdlIGFkanVzdCByZW1haW5pbmcgcGFnZXMsIGNvbnRpbnVlIGZyb20gdGhlcmUgKi9cbjI2ODQ6XHRcdFx0cmVtX3BhZ2VzIC09IHdlaWdodDtcbjI2ODU6XHRcdH1cbjI2ODY6XHRcdC8qIGNsZWFyIGFjdGl2ZSB3ZWlnaHQgaW4gY2FzZSBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgKi9cbjI2ODc6XHRcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4yNjg4Olx0XHRwcmV2X25vZGUgPSBub2RlO1xuMjY4OTpcdFxuMjY5MDpcdFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuMjY5MTpcdFx0d2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XG4yNjkyOlx0XHRpZiAoIXdlaWdodHMpXG4yNjkzOlx0XHRcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG4yNjk0Olx0XG4yNjk1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjk2Olx0XHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XG4yNjk3Olx0XHRpZiAoc3RhdGUpIHtcbjI2OTg6XHRcdFx0bWVtY3B5KHdlaWdodHMsIHN0YXRlLVx1MDAzZWl3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMjY5OTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI3MDA6XHRcdH0gZWxzZSB7XG4yNzAxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjcwMjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4yNzAzOlx0XHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4yNzA0Olx0XHR9XG4yNzA1Olx0XG4yNzA2Olx0XHQvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqL1xuMjcwNzpcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxuMjcwODpcdFx0XHR3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07XG4yNzA5Olx0XG4yNzEwOlx0XHQvKlxuMjcxMTpcdFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG4yNzEyOlx0XHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxuMjcxMzpcdFx0ICpcbjI3MTQ6XHRcdCAqIGlmIChyb3VuZHMgXHUwMDNlIDApIGFuZCAoZGVsdGEgPT0gMCksIHJlc3VtZV9ub2RlIHdpbGwgYWx3YXlzIGJlXG4yNzE1Olx0XHQgKiB0aGUgbm9kZSBmb2xsb3dpbmcgcHJldl9ub2RlIGFuZCBpdHMgd2VpZ2h0LlxuMjcxNjpcdFx0ICovXG4yNzE3Olx0XHRyb3VuZHMgPSByZW1fcGFnZXMgLyB3ZWlnaHRfdG90YWw7XG4yNzE4Olx0XHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcbjI3MTk6XHRcdHJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMDpcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodHNbcmVzdW1lX25vZGVdO1xuMjcyMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbm5vZGVzOyBpJiM0MzsmIzQzOykge1xuMjcyMjpcdFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuMjcyMzpcdFx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuMjcyNDpcdFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuMjcyNTpcdFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuMjcyNjpcdFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuMjcyNzpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IHdlaWdodDtcbjI3Mjg6XHRcdFx0XHRkZWx0YSAtPSB3ZWlnaHQ7XG4yNzI5Olx0XHRcdH0gZWxzZSBpZiAoZGVsdGEpIHtcbjI3MzA6XHRcdFx0XHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cbjI3MzE6XHRcdFx0XHRub2RlX3BhZ2VzICYjNDM7PSBkZWx0YTtcbjI3MzI6XHRcdFx0XHRyZXN1bWVfbm9kZSA9IG5vZGU7XG4yNzMzOlx0XHRcdFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xuMjczNDpcdFx0XHRcdGRlbHRhID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIENvZGUgU25pcHBldCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBncmFiYmluZyBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzLCBgd2VpZ2h0c2AuIEkmIzM5O20gdXNpbmcgYGttYWxsb2NgIHRvIGFsbG9jYXRlIHRoZSBuZWNlc3NhcnkgbWVtb3J5LCBhIGNvbW1vbiBwcmFjdGljZSB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgbWFuYWdpbmcgbWVtb3J5IGR5bmFtaWNhbGx5LiBUaGVuIEkmIzM5O20gY2hlY2tpbmcgaWYgbWVtb3J5IGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGlmIG5vdCwgSSYjMzk7bGwgYmFpbCBvdXQgYW5kIHJldHVybiB0aGUgdG90YWwgYWxsb2NhdGVkLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBjbGV2ZXIgcGFydC4gSSYjMzk7bSB1c2luZyBhbiBSQ1UgcmVhZCBsb2NrLCB3aGljaCBtZWFucyBJJiMzOTttIGFjY2Vzc2luZyBzaGFyZWQgZGF0YSAoYHdpX3N0YXRlYCkgd2l0aCBhIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBJIGRlcmVmZXJlbmNlIGB3aV9zdGF0ZWAgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAsIHdoaWNoIGlzIGhvdyB3ZSBzYWZlbHkgYWNjZXNzIGRhdGEgcHJvdGVjdGVkIGJ5IFJDVS4gSSYjMzk7bSBjaGVja2luZyBpZiB0aGUgc3RhdGUgaXMgbm9uLU5VTEwuIElmIGl0IGlzLCBJIGNvcHkgdGhlIGNvbnRlbnRzIG9mIGBzdGF0ZS0mZ3Q7aXdfdGFibGVgIGludG8gbXkgbG9jYWwgYHdlaWdodHNgIGFycmF5LiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgSSYjMzk7bSBjb3B5aW5nIGBucl9ub2RlX2lkcyAqIHNpemVvZih1OClgIGJ5dGVzLCBpbXBseWluZyB0aGF0IGBzdGF0ZS0mZ3Q7aXdfdGFibGVgIGlzIGFuIGFycmF5IG9mIHNpemUgYG5yX25vZGVfaWRzYCwgd2hpY2ggY29udGFpbnMgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMuIEkmIzM5O20gcmVsZWFzaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIGFmdGVyIHRoaXMgY29weSBpcyBkb25lLCBjb21wbGV0aW5nIHRoZSBzYWZlIHJlYWQuCgpJZiBgc3RhdGVgICppcyogTlVMTCwgaW5kaWNhdGluZyBpdCYjMzk7cyB1bmluaXRpYWxpemVkLCBJIHJlbGVhc2UgdGhlIGxvY2sgYW5kIHRoZW4gaW5pdGlhbGl6ZSBhbGwgZWxlbWVudHMgb2YgdGhlIGB3ZWlnaHRzYCBhcnJheSB0byAxLiBUaGlzIGVuc3VyZXMgdGhhdCBgd2VpZ2h0c2AgYWx3YXlzIGhhcyB2YWxpZCBkYXRhLgoKU28sIGluIGJvdGggc2NlbmFyaW9zIOKAkyB3aGV0aGVyIHRoZSBzdGF0ZSBpcyBpbml0aWFsaXplZCBvciBub3Qg4oCTIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheSBpcyBlaXRoZXIgcG9wdWxhdGVkIGJ5IGEgbWVtY3B5LCBpZiB0aGUgc3RhdGUgZXhpc3RzLCBvciBieSBhIGxvb3AgdGhhdCBpbml0aWFsaXplcyBlYWNoIGVsZW1lbnQgdG8gMS4gSXQgc2VlbXMgbGlrZSB0aGUgc3RhdGUgYmVpbmcgTlVMTCBpcyBoYW5kbGVkIGdyYWNlZnVsbHkgaGVyZS4KCkkmIzM5O2xsIGp1c3QgcXVpY2tseSBkb3VibGUgY2hlY2sgdGhhdCBgc3RhdGUtJmd0O2l3X3RhYmxlYCBpcyBpbmRlZWQgYW4gYXJyYXkgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUsIGdpdmVuIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAuIEdvb2QgcHJhY3RpY2UgdG8gYWx3YXlzIHZlcmlmeSBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIHN0cnVjdHVyZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTE1Mj1zdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4tLVxubW0vbWVtcG9saWN5LmMtMTU3LSAqL1xubW0vbWVtcG9saWN5LmM6MTU4OnN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcbm1tL21lbXBvbGljeS5jLTE1OS1cdGJvb2wgbW9kZV9hdXRvO1xuLS1cbm1tL21lbXBvbGljeS5jLTE2MS19O1xubW0vbWVtcG9saWN5LmM6MTYyOnN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0xNjMtc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNzE9c3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xubW0vbWVtcG9saWN5LmM6MTczOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMTc0LVx0dTggd2VpZ2h0ID0gMTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMjE9aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTIyMi17XG5tbS9tZW1wb2xpY3kuYzoyMjM6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTIyNC1cdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xuLS1cbm1tL21lbXBvbGljeS5jPTIyMDY9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHBnb2ZmX3QgaWx4KVxubW0vbWVtcG9saWN5LmMtMjIwNy17XG5tbS9tZW1wb2xpY3kuYzoyMjA4Olx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xubW0vbWVtcG9saWN5LmMtMjIwOS1cdG5vZGVtYXNrX3Qgbm9kZW1hc2s7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYzNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2Mzgte1xubW0vbWVtcG9saWN5LmM6MjYzOTpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbm1tL21lbXBvbGljeS5jLTI2NDAtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNjQzPXN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjQ1LXtcbm1tL21lbXBvbGljeS5jOjM2NDY6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTM2NDctXHRzdHJ1Y3QgaXdfbm9kZV9hdHRyICpub2RlX2F0dHI7XG4tLVxubW0vbWVtcG9saWN5LmM9MzY4Mj1zdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjg0LXtcbm1tL21lbXBvbGljeS5jOjM2ODU6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XG5tbS9tZW1wb2xpY3kuYy0zNjg2LVx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNjk3PXN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjk5LXtcbm1tL21lbXBvbGljeS5jOjM3MDA6XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbm1tL21lbXBvbGljeS5jLTM3MDEtXHR1bnNpZ25lZCBpbnQgKmJ3O1xuLS1cbm1tL21lbXBvbGljeS5jPTM3ODE9c3RhdGljIHZvaWQgd2lfc3RhdGVfZnJlZSh2b2lkKVxubW0vbWVtcG9saWN5LmMtMzc4Mi17XG5tbS9tZW1wb2xpY3kuYzozNzgzOlx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKm9sZF93aV9zdGF0ZTtcbm1tL21lbXBvbGljeS5jLTM3ODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgZGVmaW5pdGlvbiBpbiBgbW0vbWVtcG9saWN5LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGlzIGltcGxlbWVudGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdHJ1Y3R1cmUgZm9yIHRoZSBgTVBPTF9JTlRFUkxFQVZFYCBwb2xpY3ksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcG9uZW50cyB0byBncmFzcCB0aGUgaW50cmljYWNpZXMgb2YgaG93IHBhZ2VzIGFyZSBkaXN0cmlidXRlZCBhY3Jvc3MgTlVNQSBub2RlcywgZXNwZWNpYWxseSB3aGVuIHdlaWdodHMgYXJlIGludm9sdmVkLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBydW50aW1lIHN0YXRlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBtYW5hZ2UgdGhlIGludGVybGVhdmluZyBwcm9jZXNzLiBUaGluZ3MgbGlrZSB3aGljaCBub2RlIHRoZSBjdXJyZW50IHBhZ2UgYWxsb2NhdGlvbiBpcyAmIzM0O3BvaW50aW5nIHRvJiMzNDsgYW5kIG1heWJlIHNvbWUgc29ydCBvZiB3ZWlnaHRpbmcgbWVjaGFuaXNtIHRvIGNvbnNpZGVyIHdoZW4gdGhlIHdlaWdodHMgYXJlIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0LCBJIHN1c3BlY3QgdGhleSBoYXZlIGRpZmZlcmVudCBsb2dpYyBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB0eXBlLCBub3JtYWwgbWVtb3J5LCBodWdlIHBhZ2VzLCBldGMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYWN0dWFsbHkgbWFrZSB0aGUgZGVjaXNpb24gZm9yIGludGVybGVhdmluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0ICogYmVlbiBmb3VuZCB0byBwZXJmb3JtIGF0IGEgcmVhc29uYWJsZSBjb21wcm9taXNlIGJldHdlZW4gdGhlIHR3byBnb2Fscy5cbiAxNTE6XHQgKi9cbiAxNTI6XHRzdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4gMTUzOlx0XG4gMTU0Olx0LypcbiAxNTU6XHQgKiBBIG51bGwgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBpcyBpbnRlcnByZXRlZCBhcyBoYXZpbmcgLm1vZGU9XCYjMzQ7YXV0b1wmIzM0OyxcbiAxNTY6XHQgKiBhbmQgLml3X3RhYmxlIGlzIGludGVycHJldGVkIGFzIGFuIGFycmF5IG9mIDFzIHdpdGggbGVuZ3RoIG5yX25vZGVfaWRzLlxuIDE1NzpcdCAqL1xuIDE1ODpcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcbiAxNTk6XHRcdGJvb2wgbW9kZV9hdXRvO1xuIDE2MDpcdFx0dTggaXdfdGFibGVbXTtcbiAxNjE6XHR9O1xuIDE2MjpcdHN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XG4gMTYzOlx0c3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcbiAxNjQ6XHRcbiAxNjU6XHQvKlxuIDE2NjpcdCAqIHdpX3N0YXRlX2xvY2sgcHJvdGVjdHMgYm90aCB3aV9zdGF0ZSBhbmQgbm9kZV9id190YWJsZS5cbiAxNjc6XHQgKiBub2RlX2J3X3RhYmxlIGlzIG9ubHkgdXNlZCBieSB3cml0ZXJzIHRvIHVwZGF0ZSB3aV9zdGF0ZS5cbiAxNjg6XHQgKi9cbiAxNjk6XHRzdGF0aWMgREVGSU5FX01VVEVYKHdpX3N0YXRlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIGBpd190YWJsZWAgYW5kIGB3aV9zdGF0ZWAqKgoKUmlnaHQsIGBpd190YWJsZWAuIFRoYXQmIzM5O3MgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGlzbiYjMzk7dCBpdD8gT2theSwgbm8gcHJvYmxlbSwgdGhhdCBtZWFucyBpdHMgc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIGxpa2VseSBhcyBwYXJ0IG9mIHNvbWUgbGFyZ2VyIHN0cnVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IGFycmF5IGFyZSBtYW5hZ2VkLiBUaGlzIGlzbiYjMzk7dCBuZWNlc3NhcmlseSBhIGJhZCBkZXNpZ24sIGl0IGFsbG93cyBmb3IgZHluYW1pYyBzaXppbmcsIHdoaWNoIGNhbiBiZSB1c2VmdWwuCgpOb3csIGxldCYjMzk7cyB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoaXMgYGl3X3RhYmxlYCBpcyBpbnN0YW50aWF0ZWQsIGFuZCBmb2xsb3cgdGhhdCB0byB1bmRlcnN0YW5kIGhvdyBgd2lfc3RhdGVgIGlzIGFsbG9jYXRlZC4gSSBuZWVkIHRvIHNlZSBpZiBgd2lfc3RhdGVgIGlzIGEgcGFydCBvZiB0aGF0IHBhcmVudCBzdHJ1Y3QsIGFuZCB0aGVyZWZvcmUgbGlrZWx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0b28sIG9yIGlmIGl0IGhhcyBzb21lIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3RyYXRlZ3kuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbC4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGUgYHdpX3N0YXRlYCB2YXJpYWJsZSBleGlzdHMgaW4gbWVtb3J5IHJlbGF0aXZlIHRvIHRoYXQgYGl3X3RhYmxlYCBmbGV4aWJsZSBhcnJheSBtZW1iZXIuIFRoaXMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIG1lbW9yeSBsZWFrcywgYW5kIG92ZXJhbGwgY29kZSByb2J1c3RuZXNzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBzaXplZCBhbmQgaW5pdGlhbGl6ZWQ7IEkgc2VlIHNvbWUgcG90ZW50aWFsIGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvYy4qc2l6ZW9mLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBXaS1GaSBTdGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIGEgcG90ZW50aWFsIG1lbW9yeS1yZWxhdGVkIGlzc3VlLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyByZWxhdGVkIHRvIGhvdyB0aGUgV2ktRmkgZHJpdmVyIGlzIG1hbmFnaW5nIGl0cyBzdGF0ZSAoYHdpX3N0YXRlYCkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdHlwaWNhbCBkZWJ1Z2dpbmcgYXBwcm9hY2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIG1lbW9yeSBhbGxvY2F0aW9ucyBzdXJyb3VuZGluZyB0aGF0IHN0cnVjdHVyZS4gTXkgZ3V0IHNheXMgdGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgaW4gaG93IHRoZSBgd2lfc3RhdGVgIGlzIGJlaW5nIGluaXRpYWxpemVkLCBhbGxvY2F0ZWQsIG9yIGRlYWxsb2NhdGVkLgoKVGhlcmVmb3JlLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgYW5kIGVmZmljaWVudGx5IGlkZW50aWZ5IHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBpbnN0YW5jZXMgb2YgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgY291bGQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBgd2lfc3RhdGVgLiBJJiMzOTtsbCBmb2N1cyBvbiBhIGZldyBrZXkgb25lczogYHN0cnVjdF9zaXplYCwgdG8gc2VlIGhvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIGFyZSBjYWxjdWxhdGVkOyBga3phbGxvY2AsIHNpbmNlIGEgemVyb2VkIGFsbG9jYXRpb24gaXMgb2Z0ZW4gdXNlZCBhdCBzdGF0ZSBpbml0aWFsaXphdGlvbjsgYW5kIGBrbWFsbG9jYCwgYmVjYXVzZSBpdCYjMzk7cyBhIGNvbW1vbiBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSBhcmUgdXNlZCBpbiBjbG9zZSBwcm94aW1pdHkgdG8gYHdpX3N0YXRlYC4gVGhhdCYjMzk7cyBnb2luZyB0byBnaXZlIG1lIHRoZSBzdGFydGluZyBwb2ludCB0byBpbnZlc3RpZ2F0ZSBhbGxvY2F0aW9uIHNpemVzIGFuZCBtZW1vcnkgZGVwZW5kZW5jaWVzLiBCeSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbiBjYWxscywgSSBjYW4gemVybyBpbiBvbiB0aGUgZXhhY3QgbGluZXMgb2YgY29kZSB3aGVyZSB0aGUgc3RhdGUgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYW5kIHRoZXJlZm9yZSBxdWlja2x5IHN0YXJ0IGV2YWx1YXRpbmcgdGhlIGxvZ2ljIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdF9zaXplLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbW0vbWVtcG9saWN5LmNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHBvbGljaWVzIGFnYWluLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggc3RydWN0dXJlIHNpemVzLiBNeSBpbml0aWFsIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyB3b3VsZCBiZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGBtbS9tZW1wb2xpY3kuY2AgZmlsZSBmb3IgaW5zdGFuY2VzIG9mIGBzdHJ1Y3Rfc2l6ZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCYjMzk7bGwgcHJvYmFibHkgaGlnaGxpZ2h0IHdoZXJlIGFuZCBob3cgYHN0cnVjdF9zaXplYCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBoYW5kbGluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBtZW1vcnkgcG9saWN5IGZyYW1ld29yay4gSSBzdXNwZWN0IEkgbWlnaHQgZmluZCBpdCBpbiBwbGFjZXMgcmVsYXRlZCB0byByZXNpemluZyBkYXRhIHN0cnVjdHVyZXMgYmFzZWQgb24gdGhlIHBvbGljeSBpbiBlZmZlY3QuIFRoaXMgZ3JlcCBpcyBhIHF1aWNrIHdheSB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgY29udGV4dCwgZ2l2aW5nIG1lIGEgc29saWQgYmFzaXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgcmVhc29uaW5nLiBJdCBpcyBhIHF1aWNrIGFuZCBkaXJ0eSBhcHByb2FjaCB0byBnZXQgc3RhcnRlZC4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdXAgd2l0aCBjYXJlZnVsIGV4YW1pbmF0aW9uIG9mIHRoZSBhZGphY2VudCBjb2RlLCBidXQgdGhpcyBncmVwIHdpbGwgYmUgaW5zdHJ1bWVudGFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdF9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzE4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBgbW0vbWVtcG9saWN5LmNgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHplcm9pbmcgaW4gb24gaG93IG1lbW9yeSBhbGxvY2F0aW9uIHBsYXlzIG91dCBhcm91bmQgdGhlIGBuZXdfd2lfc3RhdGVgIHZhcmlhYmxlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IEkgbmVlZCB0byBsb29rIGF0IGhvdyBkaWZmZXJlbnQgbWVtb3J5IHBvbGljaWVzIGludGVyYWN0IHdpdGggYWxsb2NhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBncmVwcGluZyB0aGUgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBga21hbGxvY2AgYW5kIGBremFsbG9jYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgd2hlbiBpdCBjb21lcyB0byBhbGxvY2F0aW5nIG1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljaWVzLCBJIGZpZ3VyZSB0aGV5IGFyZSBnb2luZyB0byBwbGF5IGEga2V5IHJvbGUgaW4gc2V0dGluZyB1cCB0aGlzIG5ldyBzdGF0ZS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBhbGxvY2F0aW9uIHBvaW50cyBhbmQgaG93IHRoZSBtZW1wb2xpY3kgaXMgYXBwbGllZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlaXIgdXNhZ2UgdGhhdCBpbmZsdWVuY2UgcG9saWN5IGRlY2lzaW9ucywgb3IgcGVyaGFwcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIGFsbG9jYXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X3dpX3N0YXRlLiphbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTIyMT1pbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxuLS1cbm1tL21lbXBvbGljeS5jLTIzMi1cbm1tL21lbXBvbGljeS5jOjIzMzpcdG5ld193aV9zdGF0ZSA9IGttYWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xubW0vbWVtcG9saWN5LmMtMjM0LVx0aWYgKCFuZXdfd2lfc3RhdGUpIHtcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNjQzPXN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNjU1LVxubW0vbWVtcG9saWN5LmM6MzY1NjpcdG5ld193aV9zdGF0ZSA9IGt6YWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xubW0vbWVtcG9saWN5LmMtMzY1Ny1cdGlmICghbmV3X3dpX3N0YXRlKVxuLS1cbm1tL21lbXBvbGljeS5jPTM2OTc9c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL21lbXBvbGljeS5jLTM3MDctXG5tbS9tZW1wb2xpY3kuYzozNzA4Olx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG5tbS9tZW1wb2xpY3kuYy0zNzA5LVx0aWYgKCFuZXdfd2lfc3RhdGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoaXMgQ29udGV4dCoqCgpSaWdodCwgc28gSSBzZWUgdGhleSYjMzk7cmUgdXRpbGl6aW5nIGBrbWFsbG9jX2ZsZXhgIGFuZCBga3phbGxvY19mbGV4YCBoZXJlLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZm9jdXMgb24gZmxleGlibGUgYWxsb2NhdGlvbiBzaXplcywgcG90ZW50aWFsbHkgZm9yIHNtYWxsZXIgb2JqZWN0cyBvciBzdHJ1Y3R1cmVzLiBOb3csIHdoYXQmIzM5O3MgZ290IG15IGF0dGVudGlvbiBpcyBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIHVzaW5nIGBrbWFsbG9jX2ZsZXhgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgZGVhbHMgd2l0aCBtZW1vcnkgbm9kZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHBvbGljaWVzLCBzbyB0aGUgY2hvaWNlIG9mIGBrbWFsbG9jX2ZsZXhgIHRoZXJlIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTt2ZSBjaG9zZW4gdGhpcyBhbGxvY2F0aW9uIG1lY2hhbmlzbSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IHBvbGljaWVzLiBXaGF0IGlzIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgYW5kIGRvZXMgaXQgYWxpZ24gd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIGFuZCBkaXNzZWN0IHRoYXQgbGluZSB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIxOlx0aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbiAyMjQ6XHRcdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xuIDIyNTpcdFx0dW5zaWduZWQgaW50IGJ3X3ZhbDtcbiAyMjY6XHRcdGludCBpO1xuIDIyNzpcdFxuIDIyODpcdFx0YndfdmFsID0gbWluKGNvb3Jkcy1cdTAwM2VyZWFkX2JhbmR3aWR0aCwgY29vcmRzLVx1MDAzZXdyaXRlX2JhbmR3aWR0aCk7XG4gMjI5Olx0XHRuZXdfYncgPSBrY2FsbG9jKG5yX25vZGVfaWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7XG4gMjMwOlx0XHRpZiAoIW5ld19idylcbiAyMzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjMyOlx0XG4gMjMzOlx0XHRuZXdfd2lfc3RhdGUgPSBrbWFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbiAyMzQ6XHRcdGlmICghbmV3X3dpX3N0YXRlKSB7XG4gMjM1Olx0XHRcdGtmcmVlKG5ld19idyk7XG4gMjM2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIzNzpcdFx0fVxuIDIzODpcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZW1vZGVfYXV0byA9IHRydWU7XG4gMjM5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4gMjQwOlx0XHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gMjQxOlx0XG4gMjQyOlx0XHQvKlxuIDI0MzpcdFx0ICogVXBkYXRlIGJhbmR3aWR0aCBpbmZvLCBldmVuIGluIG1hbnVhbCBtb2RlLiBUaGF0IHdheSwgd2hlbiBzd2l0Y2hpbmdcbiAyNDQ6XHRcdCAqIHRvIGF1dG8gbW9kZSBpbiB0aGUgZnV0dXJlLCBpd190YWJsZSBjYW4gYmUgb3ZlcndyaXR0ZW4gdXNpbmdcbiAyNDU6XHRcdCAqIGFjY3VyYXRlIGJ3IGRhdGEuXG4gMjQ2Olx0XHQgKi9cbiAyNDc6XHRcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRvbGRfYncgPSBub2RlX2J3X3RhYmxlO1xuIDI1MDpcdFx0aWYgKG9sZF9idylcbiAyNTE6XHRcdFx0bWVtY3B5KG5ld19idywgb2xkX2J3LCBucl9ub2RlX2lkcyAqIHNpemVvZigqb2xkX2J3KSk7XG4gMjUyOlx0XHRuZXdfYndbbm9kZV0gPSBid192YWw7XG4gMjUzOlx0XHRub2RlX2J3X3RhYmxlID0gbmV3X2J3O1xuIDI1NDpcdFxuIDI1NTpcdFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbiAyNTY6XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbiAyNTc6XHRcdGlmIChvbGRfd2lfc3RhdGUgXHUwMDI2XHUwMDI2ICFvbGRfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvKSB7XG4gMjU4Olx0XHRcdC8qIE1hbnVhbCBtb2RlOyBza2lwIHJlZHVjaW5nIHdlaWdodHMgYW5kIHVwZGF0aW5nIHdpX3N0YXRlICovXG4gMjU5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbiAyNjA6XHRcdFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcbiAyNjE6XHRcdFx0Z290byBvdXQ7XG4gMjYyOlx0XHR9XG4gMjYzOlx0XG4gMjY0Olx0XHQvKiBOVUxMIHdpX3N0YXRlIGFzc3VtZXMgYXV0bz10cnVlOyByZWR1Y2Ugd2VpZ2h0cyBhbmQgdXBkYXRlIHdpX3N0YXRlKi9cbiAyNjU6XHRcdHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHMobmV3X2J3LCBuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGUpO1xuIDI2NjpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIDI2NzpcdFxuIDI2ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIDI2OTpcdFx0aWYgKG9sZF93aV9zdGF0ZSkge1xuIDI3MDpcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIGluIFdlaWdodGVkIEludGVybGVhdmUgU3RhdGUqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YC4gUmlnaHQgYXdheSwgaXQgc2V0cyBgbmV3X3dpX3N0YXRlLSZndDttb2RlX2F1dG9gIHRvIGB0cnVlYCwgYW5kIHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCBgbnJfbm9kZV9pZHNgIHRvIGluaXRpYWxpemUgYG5ld193aV9zdGF0ZS0mZ3Q7aXdfdGFibGVgIHdpdGggdGhlIHZhbHVlIDEuIFNvLCBiYXNlZCBvbiB0aGF0LCBgbmV3X3dpX3N0YXRlYCBzaG91bGQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHJpZ2h0PwoKQnV0IHdhaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWJvdXQgdGhhdCBga21hbGxvY19mbGV4YCBhbGxvY2F0aW9uLiBJdCYjMzk7cyBkb2luZyBgc2l6ZW9mKHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlKSAmIzQzOyBucl9ub2RlX2lkcyAqIHNpemVvZih1OClgLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBpbiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgpgYGBjCnN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHsKCWJvb2wgbW9kZV9hdXRvOwoJdTggaXdfdGFibGVbXTsKfTsKYGBgCgpBIGBib29sYCBpcyBvbmUgYnl0ZSwgYW5kIGEgYHU4YCBpcyBvbmUgYnl0ZSBhcyB3ZWxsLCBzbyB0aGVyZSYjMzk7cyAqbm8qIHBhZGRpbmcuIFRoaXMgY29uZmlybXMgdGhhdCBgbmV3X3dpX3N0YXRlYCBpcyBpbmRlZWQgZnVsbHkgaW5pdGlhbGl6ZWQuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIHBhdGNoIG1vcmUgYnJvYWRseS4gSSBzZWUgYHdlaWdodHNgIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYC4gSXQmIzM5O3MgZ2V0dGluZyBhc3NpZ25lZCBgbnJfbm9kZV9pZHNgIGJ5dGVzLgoKYGBgYwoJcmN1X3JlYWRfbG9jaygpOwoJc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpOwoJaWYgKHN0YXRlKSB7CgkJbWVtY3B5KHdlaWdodHMsIHN0YXRlLSZndDtpd190YWJsZSwgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTsKCQlyY3VfcmVhZF91bmxvY2soKTsKCX0gZWxzZSB7CgkJcmN1X3JlYWRfdW5sb2NrKCk7CgkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKCQkJd2VpZ2h0c1tpXSA9IDE7Cgl9CmBgYAoKSW4gZWl0aGVyIGJyYW5jaCBvZiB0aGlzIGBpZmAgc3RhdGVtZW50LCBgd2VpZ2h0c2AgZ2V0cyBmdWxseSBpbml0aWFsaXplZC4gRWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSBgc3RhdGUtJmd0O2l3X3RhYmxlYCBvciBieSBzZXR0aW5nIGV2ZXJ5dGhpbmcgdG8gMS4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYG5yX25vZGVfaWRzYCBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIHNpemUgb2YgYHN0YXRlLSZndDtpd190YWJsZWAuIFllcywgYHN0YXRlLSZndDtpd190YWJsZWAgaXMgYWxsb2NhdGVkIHdpdGggYG5yX25vZGVfaWRzYCBlbGVtZW50cywgYW5kIGB3ZWlnaHRzYCBhcmUgYWxzbyBhbGxvY2F0ZWQgd2l0aCBgbnJfbm9kZV9pZHNgIGJ5dGVzLiBTbyBgd2VpZ2h0c2Agc2hvdWxkIGJlIGZ1bGx5IGluaXRpYWxpemVkLgoKSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IEl0IGxvb2tzIGxpa2UgYHdlaWdodHNgIGlzIGZ1bGx5IGluaXRpYWxpemVkICpiZWZvcmUqIGl0IGdldHMgdXNlZC4gSG93ZXZlciwgd2hhdCBpZiBgc3RhdGUtJmd0O2l3X3RhYmxlYCBpdHNlbGYgY29udGFpbnMgdW5pbml0aWFsaXplZCBtZW1vcnk/IEdvaW5nIGJhY2ssIEkgbmVlZCB0byBjaGVjayBob3cgYGl3X3RhYmxlYCBpcyBpbml0aWFsaXplZCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlLiBGcm9tIHdoYXQgSSBjYW4gcmVjYWxsLCB0aGUgZnVuY3Rpb24gYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCAqZG9lcyogaW5pdGlhbGl6ZSBgaXdfdGFibGVgIHRvIDEsIGFuZCB0aGVuIGNhbGxzIGByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKG5ld19idywgbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZSlgLiBTbyBJIG5lZWQgdG8gZ28gb3ZlciBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDE3NzpcdFx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuIDE3ODpcdFx0aWYgKHN0YXRlKVxuIDE3OTpcdFx0XHR3ZWlnaHQgPSBzdGF0ZS1cdTAwM2Vpd190YWJsZVtub2RlXTtcbiAxODA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDE4MTpcdFx0cmV0dXJuIHdlaWdodDtcbiAxODI6XHR9XG4gMTgzOlx0XG4gMTg0Olx0LypcbiAxODU6XHQgKiBDb252ZXJ0IGJhbmR3aWR0aCB2YWx1ZXMgaW50byB3ZWlnaHRlZCBpbnRlcmxlYXZlIHdlaWdodHMuXG4gMTg2Olx0ICogQ2FsbCB3aXRoIHdpX3N0YXRlX2xvY2suXG4gMTg3Olx0ICovXG4gMTg4Olx0c3RhdGljIHZvaWQgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyh1bnNpZ25lZCBpbnQgKmJ3LCB1OCAqbmV3X2l3KVxuIDE4OTpcdHtcbiAxOTA6XHRcdHU2NCBzdW1fYncgPSAwO1xuIDE5MTpcdFx0dW5zaWduZWQgaW50IGNhc3Rfc3VtX2J3LCBzY2FsaW5nX2ZhY3RvciA9IDEsIGl3X2djZCA9IDA7XG4gMTkyOlx0XHRpbnQgbmlkO1xuIDE5MzpcdFxuIDE5NDpcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxuIDE5NTpcdFx0XHRzdW1fYncgJiM0Mzs9IGJ3W25pZF07XG4gMTk2Olx0XG4gMTk3Olx0XHQvKiBTY2FsZSBiYW5kd2lkdGhzIHRvIHdob2xlIG51bWJlcnMgaW4gdGhlIHJhbmdlIFsxLCB3ZWlnaHRpbmVzc10gKi9cbiAxOTg6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuIDE5OTpcdFx0XHQvKlxuIDIwMDpcdFx0XHQgKiBUcnkgbm90IHRvIHBlcmZvcm0gNjQtYml0IGRpdmlzaW9uLlxuIDIwMTpcdFx0XHQgKiBJZiBzdW1fYncgXHUwMDNjIHNjYWxpbmdfZmFjdG9yLCB0aGVuIHN1bV9idyBcdTAwM2MgVTMyX01BWC5cbiAyMDI6XHRcdFx0ICogSWYgc3VtX2J3IFx1MDAzZSBzY2FsaW5nX2ZhY3RvciwgdGhlbiByb3VuZCB0aGUgd2VpZ2h0IHVwIHRvIDEuXG4gMjAzOlx0XHRcdCAqL1xuIDIwNDpcdFx0XHRzY2FsaW5nX2ZhY3RvciA9IHdlaWdodGluZXNzICogYndbbmlkXTtcbiAyMDU6XHRcdFx0aWYgKGJ3W25pZF0gXHUwMDI2XHUwMDI2IHN1bV9idyBcdTAwM2Mgc2NhbGluZ19mYWN0b3IpIHtcbiAyMDY6XHRcdFx0XHRjYXN0X3N1bV9idyA9ICh1bnNpZ25lZCBpbnQpc3VtX2J3O1xuIDIwNzpcdFx0XHRcdG5ld19pd1tuaWRdID0gc2NhbGluZ19mYWN0b3IgLyBjYXN0X3N1bV9idztcbiAyMDg6XHRcdFx0fSBlbHNlIHtcbiAyMDk6XHRcdFx0XHRuZXdfaXdbbmlkXSA9IDE7XG4gMjEwOlx0XHRcdH1cbiAyMTE6XHRcdFx0aWYgKCFpd19nY2QpXG4gMjEyOlx0XHRcdFx0aXdfZ2NkID0gbmV3X2l3W25pZF07XG4gMjEzOlx0XHRcdGl3X2djZCA9IGdjZChpd19nY2QsIG5ld19pd1tuaWRdKTtcbiAyMTQ6XHRcdH1cbiAyMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSW50ZXJsZWF2ZSBXZWlnaHQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgZnVuY3Rpb24uLi4gaXQgc2VlbXMgdG8gb25seSBiZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbm9kZSBzdGF0ZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKWAuICBUaGF0JiMzOTtzIGZvY3VzZWQgb24gbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGludGVybGVhdmUgd2VpZ2h0cy4gTXkgY29uY2VybiBpcyB0aGF0IGBuZXdfaXdgLCB3aGljaCByZWZlcnMgdG8gdGhlIGBuZXdfd2lfc3RhdGUtJmd0O2l3X3RhYmxlYCwgaGFzIGEgc2l6ZSBkZWZpbmVkIGJ5IGBucl9ub2RlX2lkc2AuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIuLi4gd2hhdCBhYm91dCB0aGUgbm9kZXMgKm5vdCogY3VycmVudGx5IHByZXNlbnQgd2l0aGluIGBOX01FTU9SWWA/CgpUaGVuIEkgc2F3IHRoaXMgaW5pdGlhbGl6YXRpb24gaW4gYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYDoKCmBgYGMKCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspCgkJbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZVtpXSA9IDE7CmBgYAoKQWhhISBJdCYjMzk7cyAqaW5pdGlhbGl6aW5nKiBhbGwgYG5yX25vZGVfaWRzYCBlbGVtZW50cyBvZiB0aGUgaW50ZXJsZWF2ZSB3ZWlnaHRzIHRvIDEsIHJlZ2FyZGxlc3MuIEFuZCAqdGhlbiogYHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHNgIHNlbGVjdGl2ZWx5IG92ZXJ3cml0ZXMgdGhlIHZhbHVlcyBmb3IgdGhlIG5vZGVzIHRoYXQgKmFyZSogaW4gYE5fTUVNT1JZYC4gIFNvLCAqYWxsKiBlbGVtZW50cyBpbiBgaXdfdGFibGVgIHN0YXJ0IGF0IDEgYW5kIGFyZSB0aGVuIChwb3RlbnRpYWxseSkgbW9kaWZpZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBvcHRpbWl6aW5nLCBhcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgaW50ZXJsZWF2ZSB3ZWlnaHRzIGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZS4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBhbGxvY2F0aW9uIHBvaW50cyB0aGF0IHdvdWxkIGNoYW5nZSB0aGlzIGJlaGF2aW9yLiBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgYG5ld193aV9zdGF0ZWAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3MgbG9vayBhdCBgbm9kZV9zdG9yZWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY0MzpcdHN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbjM2NDQ6XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMzY0NTpcdHtcbjM2NDY6XHRcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xuMzY0NzpcdFx0c3RydWN0IGl3X25vZGVfYXR0ciAqbm9kZV9hdHRyO1xuMzY0ODpcdFx0dTggd2VpZ2h0ID0gMDtcbjM2NDk6XHRcdGludCBpO1xuMzY1MDpcdFxuMzY1MTpcdFx0bm9kZV9hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBpd19ub2RlX2F0dHIsIGtvYmpfYXR0cik7XG4zNjUyOlx0XHRpZiAoY291bnQgPT0gMCB8fCBzeXNmc19zdHJlcShidWYsIFwmIzM0O1wmIzM0OykgfHxcbjM2NTM6XHRcdCAgICBrc3RydG91OChidWYsIDAsIFx1MDAyNndlaWdodCkgfHwgd2VpZ2h0ID09IDApXG4zNjU0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzY1NTpcdFxuMzY1NjpcdFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4zNjU3Olx0XHRpZiAoIW5ld193aV9zdGF0ZSlcbjM2NTg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zNjU5Olx0XG4zNjYwOlx0XHRtdXRleF9sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuMzY2MTpcdFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbjM2NjI6XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbjM2NjM6XHRcdGlmIChvbGRfd2lfc3RhdGUpIHtcbjM2NjQ6XHRcdFx0bWVtY3B5KG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZSwgb2xkX3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLFxuMzY2NTpcdFx0XHRcdFx0XHRucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMzY2NjpcdFx0fSBlbHNlIHtcbjM2Njc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuMzY2ODpcdFx0XHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4zNjY5Olx0XHR9XG4zNjcwOlx0XHRuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGVbbm9kZV9hdHRyLVx1MDAzZW5pZF0gPSB3ZWlnaHQ7XG4zNjcxOlx0XHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gZmFsc2U7XG4zNjcyOlx0XG4zNjczOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4zNjc0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4zNjc1Olx0XHRpZiAob2xkX3dpX3N0YXRlKSB7XG4zNjc2Olx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMzY3NzpcdFx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuMzY3ODpcdFx0fVxuMzY3OTpcdFx0cmV0dXJuIGNvdW50O1xuMzY4MDpcdH1cbjM2ODE6XHRcbjM2ODI6XHRzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3OTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIHNuaXBwZXQ6CgoqKkluaXRpYWxpemF0aW9uIG9mIGBuZXdfd2lfc3RhdGVgIGFuZCBpdHMgV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBUYWJsZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19mbGV4YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IGl0IG1lYW5zIHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYWxsIGl0cyBtZW1iZXJzLCBnZXRzIHplcm9lZCBvdXQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFdlJiMzOTtyZSBnZXR0aW5nIGEgY2xlYW4gc2xhdGUgaGVyZSwgYW5kIHRoYXQgemVyby1pbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLgoKTm93LCB3ZSYjMzk7cmUgZWl0aGVyIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIGBvbGRfd2lfc3RhdGUtJmd0O2l3X3RhYmxlYCBpbnRvIHRoZSBuZXcgb25lLCBvciwgaWYgd2UgZG9uJiMzOTt0IGNvcHksIHdlIHNldCBhbGwgZWxlbWVudHMgb2YgdGhlIHRhYmxlIHRvIDEuIEluIGJvdGggc2NlbmFyaW9zLCB0aGUgYGl3X3RhYmxlYCBpcyBnZXR0aW5nIGZ1bGx5IGFuZCBkZXRlcm1pbmlzdGljYWxseSBpbml0aWFsaXplZC4gVGhpcyBtYWtlcyBzZW5zZS4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgaW50ZXJsZWF2ZSB0YWJsZSBpcyBpbiBhIGtub3duLCBjb25zaXN0ZW50IHN0YXRlIGJlZm9yZSBhbnl0aGluZyBlbHNlIGhhcHBlbnMuIFRoZSBjaG9pY2Ugb2YgY29weWluZyB2ZXJzdXMgaW5pdGlhbGl6aW5nIHdpdGggb25lcyBsaWtlbHkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgbG9naWMgYW5kIHdoYXQgcmVwcmVzZW50cyBhIHZhbGlkIHN0YXJ0aW5nIHBvaW50IGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGtleSBuZXh0IHN0ZXAgdG8gYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2OTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY5NzpcdHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbjM2OTg6XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbjM2OTk6XHR7XG4zNzAwOlx0XHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcbjM3MDE6XHRcdHVuc2lnbmVkIGludCAqYnc7XG4zNzAyOlx0XHRib29sIGlucHV0O1xuMzcwMzpcdFx0aW50IGk7XG4zNzA0Olx0XG4zNzA1Olx0XHRpZiAoa3N0cnRvYm9vbChidWYsIFx1MDAyNmlucHV0KSlcbjM3MDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNzA3Olx0XG4zNzA4Olx0XHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbjM3MDk6XHRcdGlmICghbmV3X3dpX3N0YXRlKVxuMzcxMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjM3MTE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOylcbjM3MTI6XHRcdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbjM3MTM6XHRcbjM3MTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4zNzE1Olx0XHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxuMzcxNjpcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNndpX3N0YXRlX2xvY2spKTtcbjM3MTc6XHRcbjM3MTg6XHRcdGlmIChvbGRfd2lfc3RhdGUgXHUwMDI2XHUwMDI2IGlucHV0ID09IG9sZF93aV9zdGF0ZS1cdTAwM2Vtb2RlX2F1dG8pIHtcbjM3MTk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuMzcyMDpcdFx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xuMzcyMTpcdFx0XHRyZXR1cm4gY291bnQ7XG4zNzIyOlx0XHR9XG4zNzIzOlx0XG4zNzI0Olx0XHRpZiAoIWlucHV0KSB7XG4zNzI1Olx0XHRcdGlmIChvbGRfd2lfc3RhdGUpXG4zNzI2Olx0XHRcdFx0bWVtY3B5KG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZSwgb2xkX3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlLFxuMzcyNzpcdFx0XHRcdFx0XHRcdCAgICAgICBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpO1xuMzcyODpcdFx0XHRnb3RvIHVwZGF0ZV93aV9zdGF0ZTtcbjM3Mjk6XHRcdH1cbjM3MzA6XHRcbjM3MzE6XHRcdGJ3ID0gbm9kZV9id190YWJsZTtcbjM3MzI6XHRcdGlmICghYncpIHtcbjM3MzM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuMzczNDpcdFx0XHRrZnJlZShuZXdfd2lfc3RhdGUpO1xuMzczNTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjM3MzY6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXZWlnaHQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYG5ld193aV9zdGF0ZWAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NfZmxleGAg4oCTIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0IGJlY2F1c2UgYGt6YWxsb2NgIHplcm9lcyB0aGUgbWVtb3J5LiBUaGVuIGFsbCBlbGVtZW50cyBhcmUgZXhwbGljaXRseSBzZXQgdG8gMS4gIFNvLCBpbiB0aGlzIGNvbnRleHQsIHdlIGNhbiBzYXkgaXQmIzM5O3MgZnVsbHkgaW5pdGlhbGl6ZWQuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQsIHRoaXMgcGF0Y2ggY2hhbmdlZCBga3phbGxvY2AgdG8gYGttYWxsb2NgIGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGZvciB0aGUgYHdlaWdodHNgIHZhcmlhYmxlOgoKYGBgYwovKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovCi0Jd2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpOwomIzQzOwl3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwICZhbXA7IEdGUF9SRUNMQUlNX01BU0spOwpgYGAKCkFuZCB0aGVuIHRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgY29kZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgd2VpZ2h0cyBmcm9tIGEgY29weToKCmBgYGMKCXJjdV9yZWFkX2xvY2soKTsKCXN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTsKCWlmIChzdGF0ZSkgewoJCW1lbWNweSh3ZWlnaHRzLCBzdGF0ZS0mZ3Q7aXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7CgkJcmN1X3JlYWRfdW5sb2NrKCk7Cgl9IGVsc2UgewoJCXJjdV9yZWFkX3VubG9jaygpOwoJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspCgkJCXdlaWdodHNbaV0gPSAxOwoJfQpgYGAKCk15IGZpcnN0IHRob3VnaHQ6IGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBgd2VpZ2h0c2AgZ2V0cyB1c2VkIHVuaW5pdGlhbGl6ZWQ/ICBObywgaXQgY2FuJiMzOTt0IGJlLiAgRWl0aGVyIHRoZSBgbWVtY3B5YCB3aWxsIGNvcHkgYG5yX25vZGVfaWRzYCBieXRlcyBmcm9tIGBzdGF0ZS0mZ3Q7aXdfdGFibGVgIHRvIGB3ZWlnaHRzYCwgd2hpY2ggaW1wbGljaXRseSBndWFyYW50ZWVzIGluaXRpYWxpemF0aW9uLCBvciB0aGUgbG9vcCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBgbnJfbm9kZV9pZHNgIGJ5dGVzIHRvIDEuCgpCdXQsIHdhaXQsIHdoYXQgaWYgYHN0YXRlLSZndDtpd190YWJsZWAgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgd2UmIzM5O3ZlIGp1c3QgZXN0YWJsaXNoZWQgdGhhdCBgc3RhdGUtJmd0O2l3X3RhYmxlYCBfaXNfIGZ1bGx5IGluaXRpYWxpemVkIGluIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGl0IGlzIGFsbG9jYXRlZC4gU28gYHdlaWdodHNgIHNob3VsZCBiZSBndWFyYW50ZWVkIGZ1bGx5IGluaXRpYWxpemVkLgoKT2theSwgbGV0JiMzOTtzIGNvbnNpZGVyIHBhZGRpbmcuIElzIHRoZXJlIGFueSBwYWRkaW5nIGluIGB3ZWlnaHRzYD8gIEl0JiMzOTtzIGFuIGFycmF5IG9mIGB1OGAgKHVuc2lnbmVkIDgtYml0IGludGVnZXJzKS4gTm8gcGFkZGluZyB0aGVyZS4KCk5vdywgY29uc2lkZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczogYW55IGluZm8tbGVhayB0byB1c2VyIHNwYWNlPyBgd2VpZ2h0c2AgaXMgdXNlZCBsb2NhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB0byBjYWxjdWxhdGUgYHdlaWdodF90b3RhbGAgYW5kIGByb3VuZHNgIGFuZCB0aGVuLi4uIHdoZXJlIGlzIGl0IGZyZWVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjczMDpcdFx0XHRcdC8qIHdoZW4gZGVsdGEgaXMgZGVwbGV0ZWQsIHJlc3VtZSBmcm9tIHRoYXQgbm9kZSAqL1xuMjczMTpcdFx0XHRcdG5vZGVfcGFnZXMgJiM0Mzs9IGRlbHRhO1xuMjczMjpcdFx0XHRcdHJlc3VtZV9ub2RlID0gbm9kZTtcbjI3MzM6XHRcdFx0XHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0IC0gZGVsdGE7XG4yNzM0Olx0XHRcdFx0ZGVsdGEgPSAwO1xuMjczNTpcdFx0XHR9XG4yNzM2Olx0XHRcdC8qIG5vZGVfcGFnZXMgY2FuIGJlIDAgaWYgYW4gYWxsb2NhdGlvbiBmYWlscyBhbmQgcm91bmRzID09IDAgKi9cbjI3Mzc6XHRcdFx0aWYgKCFub2RlX3BhZ2VzKVxuMjczODpcdFx0XHRcdGJyZWFrO1xuMjczOTpcdFx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxuMjc0MDpcdFx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4yNzQxOlx0XHRcdHBhZ2VfYXJyYXkgJiM0Mzs9IG5yX2FsbG9jYXRlZDtcbjI3NDI6XHRcdFx0dG90YWxfYWxsb2NhdGVkICYjNDM7PSBucl9hbGxvY2F0ZWQ7XG4yNzQzOlx0XHRcdGlmICh0b3RhbF9hbGxvY2F0ZWQgPT0gbnJfcGFnZXMpXG4yNzQ0Olx0XHRcdFx0YnJlYWs7XG4yNzQ1Olx0XHRcdHByZXZfbm9kZSA9IG5vZGU7XG4yNzQ2Olx0XHR9XG4yNzQ3Olx0XHRtZS1cdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XG4yNzQ4Olx0XHRtZS1cdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xuMjc0OTpcdFx0a2ZyZWUod2VpZ2h0cyk7XG4yNzUwOlx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuMjc1MTpcdH1cbjI3NTI6XHRcbjI3NTM6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbjI3NTQ6XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuMjc1NTpcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4yNzU2Olx0e1xuMjc1NzpcdFx0Z2ZwX3QgcHJlZmVycmVkX2dmcDtcbjI3NTg6XHRcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcbjI3NTk6XHRcbjI3NjA6XHRcdHByZWZlcnJlZF9nZnAgPSBnZnAgfCBfX0dGUF9OT1dBUk47XG4yNzYxOlx0XHRwcmVmZXJyZWRfZ2ZwIFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XG4yNzYyOlx0XG4yNzYzOlx0XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG4yNzY0Olx0XHRcdFx0XHRcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbjI3NjU6XHRcbjI3NjY6XHRcdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxuMjc2NzpcdFx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG4yNzY4Olx0XHRcdFx0XHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcbjI3Njk6XHRcdFx0XHRcdHBhZ2VfYXJyYXkgJiM0MzsgbnJfYWxsb2NhdGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MjcKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga3phbGxvYyB0byBrbWFsbG9jIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcywgYGtmcmVlKHdlaWdodHMpYCAqaXMqIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiYjMzQ7IEJ1dCB3YWl0IGEgbWludXRlLCB3aGF0IGlmIHRoZSBmdW5jdGlvbiBleGl0cyBlYXJseSwgZHVlIHRvIGEgZmFpbHVyZSBpbiBwYWdlIGFsbG9jYXRpb24/IENoZWNraW5nIHRoZSBjb2RlLCBJIHNlZSBhIGJyZWFrIHN0YXRlbWVudDoKCmBgYGMKCQkvKiBub2RlX3BhZ2VzIGNhbiBiZSAwIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgYW5kIHJvdW5kcyA9PSAwICovCgkJaWYgKCFub2RlX3BhZ2VzKQoJCQlicmVhazsKYGBgCgpSaWdodCwgaWYgaXQgYnJlYWtzIG91dCBlYXJseSwgdGhlIGNvZGUgcHJvY2VlZHMgdG86CgpgYGBjCgltZS0mZ3Q7aWxfcHJldiA9IHJlc3VtZV9ub2RlOwoJbWUtJmd0O2lsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7CglrZnJlZSh3ZWlnaHRzKTsKCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CmBgYAoKU28sIGB3ZWlnaHRzYCBpcyBwcm9wZXJseSBmcmVlZCBldmVuIGluIGFuIGVhcmx5IGV4aXQsIHdoaWNoIGlzIGdvb2QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNoYW5nZSBpcyBga3phbGxvY2AgdG8gYGttYWxsb2NgLCBtZWFuaW5nIHdlIGFyZW4mIzM5O3QgemVyby1pbml0aWFsaXppbmcgdGhlIGB3ZWlnaHRzYCBhcnJheSBhbnltb3JlLiBCdXQgaG9sZCBvbiwgdGhlIGNvZGUgKmltbWVkaWF0ZWx5KiBhZnRlciB0aGUgYWxsb2NhdGlvbiBlaXRoZXIgZG9lcyBhIGBtZW1jcHlgIGZyb20gYHN0YXRlLSZndDtpd190YWJsZWAsIHdoaWNoIGl0c2VsZiBpcyBmdWxseSBpbml0aWFsaXplZCwgb3IgaXQgc2V0cyBhbGwgZWxlbWVudHMgaW4gdGhlIGB3ZWlnaHRzYCBhcnJheSB0byAxLiBTbywgYHdlaWdodHNgICppcyogZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSByZWFkLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uLCBhdm9pZGluZyByZWR1bmRhbnQgemVyb2luZy4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLCBzbyBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSBzb21ldGhpbmcgZGlmZmVyZW50LiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCAqaXMqIG9ubHkgdGhpcyBvbmUgY2hhbmdlOgoKYGBgYwogCS8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi8KLQl3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7CiYjNDM7CXdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSyk7CiAJaWYgKCF3ZWlnaHRzKQpgYGAKCll1cCwganVzdCB0aGUgb25lLiBCZWNhdXNlIGB3ZWlnaHRzYCBpcyBmdWxseSBpbml0aWFsaXplZCBkaXJlY3RseSBhZnRlciBhbGxvY2F0aW9uIHZpYSBlaXRoZXIgYG1lbWNweWAgb3IgdGhlIGxvb3AsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY29ycnVwdGlvbiwgYW5kIGNhdGNoIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhbmQgbm8gc3BlY2lhbCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYGt6YWxsb2NgIHdpdGggYGttYWxsb2NgIGZvciB0aGUgYHdlaWdodHNgIGFycmF5IGluIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBXaGlsZSB0aGlzIHJlbW92ZXMgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnksIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGFsbG9jYXRpb24gd2l0aCBlaXRoZXIgYSBgbWVtY3B5YCB0aGF0IGZ1bGx5IHBvcHVsYXRlcyB0aGUgYXJyYXkgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBremFsbG9jYCB3aXRoIGBrbWFsbG9jYCBmb3IgdGhlIGB3ZWlnaHRzYCBhcnJheSBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gV2hpbGUgdGhpcyByZW1vdmVzIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29kZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBhbGxvY2F0aW9uIHdpdGggZWl0aGVyIGEgYG1lbWNweWAgdGhhdCBmdWxseSBwb3B1bGF0ZXMgdGhlIGFycmF5IGZyb20gYHN0YXRlLVx1MDAzZWl3X3RhYmxlYCAod2hpY2ggaXMgaXRzZWxmIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24pIG9yIGEgbG9vcCB0aGF0IHNldHMgYWxsIGVsZW1lbnRzIHRvIDEuIFRodXMsIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvZiBpdHMgZWxlbWVudHMgYXJlIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjIyLjg5NjM0MjcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA3ODk3OTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBhbmQgZmxhZ3MgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnJvbSBga3phbGxvYyguLi4sIEdGUF9LRVJORUwpYCB0byBga21hbGxvYyguLi4sIGdmcCBcXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbXBvbGljeSkgdGhhdCBhZmZlY3RzIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiB3aXRoIHdlaWdodGVkIGludGVybGVhdmUgcG9saWN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODoyMi44OTYzNDc4NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjgwMTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0YzViZjIzMThlZDAzNjU5YWY3MGM4MWM3OWQ0YjA4MTY2NjlhNjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTc6Mzg6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xcbkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHRwcmV2X25vZGUgPSBub2RlO1xcbiBcXG4gXFx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xcbi1cXHR3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7XFxuK1xcdHdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKTtcXG4gXFx0aWYgKCF3ZWlnaHRzKVxcbiBcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6MjMuMzM5ODg0MDkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjUxNDY0NzM2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YzViZjIzMThlZDAzNjU5YWY3MGM4MWM3OWQ0YjA4MTY2NjlhNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNzozODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbiBcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbitcdHdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spO1xuIFx0aWYgKCF3ZWlnaHRzKVxuIFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6MjMuMzM5ODg1NzEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4OTM1MTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjaGFuZ2VzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkncmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLlxuXG4qKkV4YW1pbmluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSBpbiBtZW1wb2xpY3kuYyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGBtbS9tZW1wb2xpY3kuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBzb21lb25lJ3MgbWFraW5nIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIHdpdGhpbiB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhleSdyZSBzaGlmdGluZyBmcm9tIHVzaW5nIGBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKWAgdG8gYGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gU28sIGl0J3MgYSBzd2FwIGZyb20gemVyb2luZyBhbmQga2VybmVsLXNwZWNpZmljIG1lbW9yeSB0byBhIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgY2h1bmssIGJ1dCB3aXRoIG1vcmUgbnVhbmNlZCByZWNsYWltIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGl0c2VsZi4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IFdoYXQncyBpdCBiZWluZyB1c2VkIGZvcj8gVGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBtZW1vcnkgcG9saWN5IGludGVyYWN0cyB3aXRoIHBhZ2UgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIE5VTUEgc3lzdGVtcy4gVGhhdCBjaGFuZ2UgZnJvbSBga3phbGxvY2AgdG8gYGttYWxsb2NgIGlzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUuIElzIGl0IHBlcmZvcm1hbmNlLWRyaXZlbj8gTWVtb3J5IGZvb3RwcmludD8gT3IgaXMgdGhlcmUgYSBtb3JlIGZ1bmRhbWVudGFsIGlzc3VlIHRoaXMgaXMgYWRkcmVzc2luZywgcGVyaGFwcyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIHVuZGVyIHNwZWNpZmljIHdvcmtsb2FkcyBvciBjb25maWd1cmF0aW9ucz8gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBgR0ZQX1JFQ0xBSU1fTUFTS2Agd2hpY2ggbWF5IGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlLiBMZXQncyBzZWUuLi4gSSdsbCBwdWxsIHVwIHRoZSBjb2RlIGFuZCBmaWd1cmUgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjI3LjgyOTI0MTY4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ2MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MjYwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzNC1cXG5tbS9tZW1wb2xpY3kuYzoyNjM1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYzNi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzc5PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTMtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODoyNy44ODI3MDk0NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTA1OTgxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCAqd2hlbiogdGhlIG1lbW9yeSBwb2xpY3kgaXMgc2V0IHRvIGBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVgLiBUaGF0J3MgaW1wb3J0YW50IGNvbnRleHQuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCB3ZSdyZSBzd2l0Y2hpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZC4gV2UncmUgZ29pbmcgZnJvbSBga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGFsbG9jYXRpb24gZmxhZ3MgYXJlIGJlaW5nIGFsdGVyZWQsIHdlJ3JlIGxvc2luZyB0aGUgemVyb2luZyBvZiB0aGUgbWVtb3J5LCBhbmQgdGhhdCdzIHVzdWFsbHkgZmluZS4gT2Z0ZW4gdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCBsYXRlci5cblxuQnV0IHdhaXQuICpJcyogdGhlIG1lbW9yeSBpbml0aWFsaXplZCBsYXRlciBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYD8gSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhpcyBpc24ndCBnb2luZyB0byBpbnRyb2R1Y2Ugc29tZSBzb3J0IG9mIHNlY3VyaXR5IGxlYWsgb3IgdW5pbml0aWFsaXplZCBkYXRhIHJlYWQuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZnVuY3Rpb24gaXRzZWxmIHRvIHZlcmlmeSB0aGF0IGl0IGRvZXMsIGluIGZhY3QsIGhhbmRsZSB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjM2LjM4ODY5NDU2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xcbjI2ODE6XFx0XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjgyOlxcdFxcdFxcdH1cXG4yNjgzOlxcdFxcdFxcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXFxuMjY4NDpcXHRcXHRcXHRyZW1fcGFnZXMgLT0gd2VpZ2h0O1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFx0LyogY2xlYXIgYWN0aXZlIHdlaWdodCBpbiBjYXNlIG9mIGFuIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbjI2ODc6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IDA7XFxuMjY4ODpcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXFxuMjY5MTpcXHRcXHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XFxuMjY5MjpcXHRcXHRpZiAoIXdlaWdodHMpXFxuMjY5MzpcXHRcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjY5NjpcXHRcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxuMjY5NzpcXHRcXHRpZiAoc3RhdGUpIHtcXG4yNjk4OlxcdFxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMjY5OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAwOlxcdFxcdH0gZWxzZSB7XFxuMjcwMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjI3MDM6XFx0XFx0XFx0XFx0d2VpZ2h0c1tpXSA9IDE7XFxuMjcwNDpcXHRcXHR9XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXFxuMjcwNzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuMjcwODpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4yNzA5OlxcdFxcbjI3MTA6XFx0XFx0LypcXG4yNzExOlxcdFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbjI3MTI6XFx0XFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4yNzEzOlxcdFxcdCAqXFxuMjcxNDpcXHRcXHQgKiBpZiAocm91bmRzIFxcdTAwM2UgMCkgYW5kIChkZWx0YSA9PSAwKSwgcmVzdW1lX25vZGUgd2lsbCBhbHdheXMgYmVcXG4yNzE1OlxcdFxcdCAqIHRoZSBub2RlIGZvbGxvd2luZyBwcmV2X25vZGUgYW5kIGl0cyB3ZWlnaHQuXFxuMjcxNjpcXHRcXHQgKi9cXG4yNzE3OlxcdFxcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcXG4yNzE4OlxcdFxcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xcbjI3MTk6XFx0XFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMDpcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XFxuMjcyMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4yNzIyOlxcdFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMzpcXHRcXHRcXHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xcbjI3MjQ6XFx0XFx0XFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcXG4yNzI1OlxcdFxcdFxcdC8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJ3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cXG4yNzI2OlxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbjI3Mjc6XFx0XFx0XFx0XFx0bm9kZV9wYWdlcyArPSB3ZWlnaHQ7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWx0YSAtPSB3ZWlnaHQ7XFxuMjcyOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGRlbHRhKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjM2LjM4ODkxMzE0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjE0MDM2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqaXMqIGRlZmVycmVkLCBoYW5kbGVkIGxhdGVyIGluIHRoZSBwcm9jZXNzLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfZGVyZWZlcmVuY2UoKWAgY29uZmlybXMgdGhhdCB0aGUgd2VpZ2h0cyBhcmUgZWl0aGVyIGNvcGllZCBmcm9tIGEgcHJlLWV4aXN0aW5nIHN0YXRlIG9yLCBpZiB0aGF0IHN0YXRlIGlzbid0IGF2YWlsYWJsZSwgaW5pdGlhbGl6ZWQgdG8gYWxsIG9uZXMuIFRoaXMgbWFrZXMgdGhlIGBrbWFsbG9jYCBjYWxsLCBhcyB1c2VkLCBwZXJmZWN0bHkgdmFsaWQgaW4gdGhpcyBjb250ZXh0LlxuXG5UaGUgc3Vic2VxdWVudCBjaGFuZ2UsIHdoZXJlIGBnZnBgIGlzIGJpdHdpc2UtQU5EZWQgd2l0aCBgR0ZQX1JFQ0xBSU1fTUFTS2AsIGlzIGFsc28gZnVuY3Rpb25hbGx5IHNvdW5kLiBJdCdzIGEgcHJ1ZGVudCBtb3ZlLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYEdGUF9LRVJORUxgIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgYmxvY2tpbmcgb3IgcHJvYmxlbXMgaWYgdGhlIGNhbGxpbmcgY29kZSBpbmFkdmVydGVudGx5IHBhc3NlcyBhdG9taWMgR0ZQIGZsYWdzLiBUaGlzIGlzIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpbiBgbW0vbWVtcG9saWN5LmNgLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgY2hhbmdlIHdvcnRoeSBvZiBhdHRlbnRpb24sIHNvIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgIGZvciB0aGlzIGNvZGUuXG5cbk5vdyBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhlIGNhbGxlciBpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCB3aGljaCBpcyBleHBvcnRlZC4gSSBhbSBub3QgY2VydGFpbiBpZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBhIG1hY3JvLCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjQyLjExMDMyMDE0OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAzNjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9Mjc1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NzgtICovXFxubW0vbWVtcG9saWN5LmM6Mjc3OTp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc4MC1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjQyLjE2MTM2MjY5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzExMzk3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgRXhwb3J0IFN0YXR1cyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gR2l2ZW4gdGhhdCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgZXhwb3J0ZWQuIElzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgdG8gYmUgdXNlZCBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQ/IERldGVybWluaW5nIGl0cyBleHBvcnQgc3RhdHVzIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGl0J3MgdHJlYXRlZCBieSB0aGUgbGlua2VyIGFuZCBpdHMgdmlzaWJpbGl0eSBhY3Jvc3MgbW9kdWxlcy4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gdGhlIHN5bWJvbCB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjQ2LjIzMjUwNTYwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MzQwMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODo0Ni4yODMwNDg4MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MTM3MjEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB0cmFjZSBpdHMgZGVjbGFyYXRpb24uIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkLiBXaGVyZSBpcyBpdCBsb2NhdGVkPyBJcyBpdCBhIGhlYWRlciBmaWxlPyBBIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24/IE9yIGlzIGl0IGRlZmluZWQgaW4gc29tZSBzcGVjaWZpYyBgLmNgIGZpbGUgc29tZXdoZXJlPyBLbm93aW5nIHRoZSBleGFjdCBkZWNsYXJhdGlvbiB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHNjb3BlLCB0aGUgdHlwZXMgb2YgYXJndW1lbnRzIGl0IHRha2VzLCBhbmQgcG90ZW50aWFsbHkgd2hldGhlciBpdCdzIHN1YmplY3QgdG8gY2VydGFpbiBidWlsZC10aW1lIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNzZWN0aW5nIGFueSBjb2RlLiBJJ20gZ29pbmcgdG8gZmluZCB0aGlzIGRlY2xhcmF0aW9uIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6NDkuMzc0NDIzMzYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxNTIyNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxODp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIxLSNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc4LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2Njk9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzczNi1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG5tbS92bWFsbG9jLmM6MzczNzpcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxubW0vdm1hbGxvYy5jLTM3MzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzg6NTEuMTU1OTUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjg3ODcwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSB2bWFsbG9jIGFyZWEuIFRoZSBjYWxsIHN0YWNrIHN0YXJ0cyB3aXRoIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpbiBgbW0vdm1hbGxvYy5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSwgaXQncyBwcm9iYWJseSB3aGVyZSB0aGUgYnVsayBvZiB0aGUgd29yayBpcyBkb25lLiBCdXQsIGhhbmcgb24uLi4gaXMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGFsc28gd29ydGggYSBsb29rPyBJdCdzIHRoZSBlbnRyeSBwb2ludCwgc28gZGVmaW5pdGVseS4gV2FpdCBhIG1pbnV0ZS4uLiBpc24ndCB0aGF0IHN0YXRpYz8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgc28gSSBkb24ndCB3YXN0ZSB0aW1lIG9uIHNvbWV0aGluZyB0aGF0J3Mgbm90IGV4dGVybmFsbHkgdmlzaWJsZS4gT2theSwgdGltZSB0byB2ZXJpZnkgdGhhdC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzbyBJIGNhbiBkZWNpZGUgaWYgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozODo1NS4zMjQ3NDA2MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzM5MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX2FyZWFfYWxsb2NfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0zNjY4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxubW0vdm1hbGxvYy5jOjM2Njk6dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxubW0vdm1hbGxvYy5jLTM2NzAtXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXFxuLS1cXG5tbS92bWFsbG9jLmM9Mzg2Nj1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTE0LVxcdCAqL1xcbm1tL3ZtYWxsb2MuYzozOTE1OlxcdGFyZWEtXFx1MDAzZW5yX3BhZ2VzID0gdm1fYXJlYV9hbGxvY19wYWdlcyhcXG5tbS92bWFsbG9jLmMtMzkxNi1cXHRcXHRcXHR2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX21hc2ssIHBhZ2Vfb3JkZXIpLCBub2RlLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM5MjQtXFx0XFx0LypcXG5tbS92bWFsbG9jLmM6MzkyNTpcXHRcXHQgKiB2bV9hcmVhX2FsbG9jX3BhZ2VzKCkgY2FuIGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgYnV0XFxubW0vdm1hbGxvYy5jLTM5MjYtXFx0XFx0ICogYWxzbzotXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjU1LjM4MDA4NTQwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAwOTIyMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIEkgcHJvYmFibHkgd29uJ3QgZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZSBkaXJlY3RseSwgc28gbGV0J3Mgc2hpZnQgb3VyIGZvY3VzLiBMb29rcyBsaWtlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2wgdG8gZXhhbWluZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgPyBMZXQgbWUgc2VlLi4uIG5vcGUsIHRoZSBvbmx5IHBsYWNlIGl0J3MgY2FsbGVkIGlzIGZyb20gYHZtX2FyZWFfYWxsb2NfcGFnZXNgIGluIGBtbS92bWFsbG9jLmNgLiBXYWl0IGEgbWludXRlLCBob2xkIHVwISBJJ20gZm9yZ2V0dGluZyBzb21ldGhpbmcuIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgaXMgYSBtYWNybywgbm90IGEgZnVuY3Rpb24sIHNvIGl0IG1pZ2h0IGJlIGV4cGFuZGVkIGFuZCBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMuIEFscmlnaHQsIGxldCdzIGJhY2sgdXAgYW5kIGNoZWNrIGhvdyB0aGF0IG1hY3JvIGl0c2VsZiBpcyB1c2VkLiBOZWVkIHRvIHNlZSB3aGF0IHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IG1hY3JvIGlzIGFjdHVhbGx5IGV4cGFuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM4OjU5LjM4MTAxMTcwOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2OTYyMDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnAuaD0yMTY9dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxODp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjI6XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NTM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc4LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzk6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2Njk9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzczNi1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG5tbS92bWFsbG9jLmM6MzczNzpcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxubW0vdm1hbGxvYy5jLTM3MzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6MDEuMjUwNjM4NTM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTcxMjYyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5YCBNYWNybyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgYXBwZWFycyB0aGF0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBJJ20gZXhhbWluaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZywgZ29vZCB0byBrbm93IHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UuIE5vdywgdGhlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeWAgbWFjcm8gaXMgdGhlIG5leHQgdGhpbmcgSSdtIGZvY3VzZWQgb24gYW5kIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgd2hlcmUgdGhhdCdzIGJlaW5nIGludm9rZWQuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgbWFjcm8gaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGltZSB0byBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyB1c2VkLCBpZiBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTowNC43NDc3Njc4MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzYxODQ2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzUzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc3OC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzc5OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjY5PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3MzYtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3Mzc6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzM4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjA2LjUyMzk2MDY0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgyMTE0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgaHVuY2ggd2FzIHJpZ2h0OyBpdCBhcHBlYXJzIG9ubHkgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgZGlyZWN0bHkgZW1wbG95ZWQgd2l0aGluIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiBXaHkgaXMgYG1tL3ZtYWxsb2MuY2AgdXNpbmcgdGhlICpmdW5jdGlvbiogZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgbWFjcm8/IFNob3VsZG4ndCBpdCBiZSBnb2luZyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBhYnN0cmFjdGlvbj8gVGhpcyBpcyB1bnVzdWFsLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJ2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vdm1hbGxvYy5jYCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTowOS43MDYwNzgxNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzMwOlxcdFxcbjM3MzE6XFx0XFx0XFx0XFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJ3RcXG4zNzMyOlxcdFxcdFxcdFxcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXFxuMzczMzpcXHRcXHRcXHRcXHQgKiBvdGhlcndpc2UgbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgaW4gb25seSBvbmUgbm9kZSxcXG4zNzM0OlxcdFxcdFxcdFxcdCAqIGJ1dCBtZW1wb2xpY3kgd2FudHMgdG8gYWxsb2MgbWVtb3J5IGJ5IGludGVybGVhdmluZy5cXG4zNzM1OlxcdFxcdFxcdFxcdCAqL1xcbjM3MzY6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxuMzczNzpcXHRcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxuMzczODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbjM3Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZXMgKyBucl9hbGxvY2F0ZWQpO1xcbjM3NDA6XFx0XFx0XFx0XFx0ZWxzZVxcbjM3NDE6XFx0XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbjM3NDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG4zNzQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VzICsgbnJfYWxsb2NhdGVkKTtcXG4zNzQ0OlxcdFxcbjM3NDU6XFx0XFx0XFx0XFx0Zm9yIChpID0gbnJfYWxsb2NhdGVkOyBpIFxcdTAwM2MgbnJfYWxsb2NhdGVkICsgbnI7IGkrKylcXG4zNzQ2OlxcdFxcdFxcdFxcdFxcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XFxuMzc0NzpcXHRcXG4zNzQ4OlxcdFxcdFxcdFxcdG5yX2FsbG9jYXRlZCArPSBucjtcXG4zNzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTowOS43MDYyOTY5MzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY2Mjc3NzY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQgZGlyZWN0bHkgdXRpbGl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoYXQgZnVuY3Rpb24sIHRoZXJlZm9yZSwgaXMgZGVmaW5pdGVseSBhIGtleSBmb2NhbCBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBhbGxvY2F0aW9uIHByb2Nlc3MuXG5cbk5vdywgd2hhdCBhYm91dCBgX192bWFsbG9jX2FyZWFfbm9kZWA/IEFoLCByaWdodCwgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gU28sIHdoaWxlIGltcG9ydGFudCBpbnRlcm5hbGx5LCBpdCB3b24ndCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBpdHMgc2NvcGUuIEJ1dCwgYF9fdm1hbGxvY19ub2RlYCBpcyBleHBvcnRlZCwgYW5kIGl0IGNhbGxzIHRoYXQgc3RhdGljIGZ1bmN0aW9uLiBXb3J0aCBrZWVwaW5nIHRoYXQgaW4gbWluZCBhcyBhIHBvaW50IG9mIGNvbXBhcmlzb24uXG5cbldhaXQsIGJhY2sgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuLi5pcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gTm8sIGl0J3Mgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzKiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gcmVzaWRpbmcgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AuIFRoYXQgbWVhbnMgaXQncyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0sIGFzc3VtaW5nIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5XaGljaCBicmluZ3MgbWUgdG8gdGhlIG5leHQgcXVlc3Rpb246IGlzIGBDT05GSUdfTlVNQWAgYSByZXF1aXJlbWVudCBoZXJlPyBZZXMsIGFic29sdXRlbHkuIGBDT05GSUdfTlVNQWAgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHRoYXQgdGhlIGBJU19FTkFCTEVEKENPTkZJR19OVU1BKWAgbWFjcm8gZXZhbHVhdGVzIHRvIHRydWUuIFdpdGhvdXQgdGhhdCwgd2Ugd291bGRuJ3QgZXZlbiBiZSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGRlcGVuZGVuY3kgaW4gYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6MTcuMzY5MDc3NDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM0Mjc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3kub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVxcdCs9IHNwYXJzZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjE3LjQyMTQyNTc3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk4MzE0ODU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19OVU1BYCBvcHRpb24gaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0J3MgYSBnaXZlbi4gV2UncmUgbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBtZW1wb2xpY3ksIHNwZWNpZmljYWxseSBpbiBob3cgYnVsayBwYWdlIGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoIGEgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIHNoaWZ0aW5nIGZyb20gYGt6YWxsb2MoLi4uLCBHRlBfS0VSTkVMKWAgdG8gYGttYWxsb2MoLi4uLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spYC4gVGhpcyBzY3JlYW1zIGZ1enppbmcgb3Bwb3J0dW5pdHkuXG5cblRoZXJlZm9yZSwgZm9yIG15IGZ1enppbmcgY29uZmlndXJhdGlvbiwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiAgVGhlIGZvY3VzIHN5bWJvbCBJJ3ZlIGNob3NlbiBpcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgZXhwbGljaXRseSBzZXQgdG8gYE5VTUFgIGJlY2F1c2UgdGhhdCdzIGVzc2VudGlhbCBmb3IgdGhpcyBjaGFuZ2UuIFRoZSByYXRpb25hbGUgaXMgcHJlY2lzZWx5IHRoaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbHRlcmF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB3ZWlnaHRlZCBpbnRlcmxlYXZlLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb2N1cyBzeW1ib2wuIENoZWNraW5nLi4uIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLCB3aGVyZWFzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBJIG1hZGUgdGhlIHJpZ2h0IGNob2ljZS4gTXkgcmVhc29uaW5nIGlzIHNvdW5kLiAgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXQgaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjEsIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjI4LjQwNDU3ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc3NTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBmbGFncyBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmcm9tIGBremFsbG9jKC4uLiwgR0ZQX0tFUk5FTClgIHRvIGBrbWFsbG9jKC4uLiwgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtcG9saWN5KSB0aGF0IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHdpdGggd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBwb2xpY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjI4LjQ4NjM2MzAwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0ODg5NDg3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOToyOC40ODY5NzYyMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTE0ODgzMzE1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBremFsbG9jYCB3aXRoIGBrbWFsbG9jYCBmb3IgdGhlIGB3ZWlnaHRzYCBhcnJheSBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gV2hpbGUgdGhpcyByZW1vdmVzIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29kZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBhbGxvY2F0aW9uIHdpdGggZWl0aGVyIGEgYG1lbWNweWAgdGhhdCBmdWxseSBwb3B1bGF0ZXMgdGhlIGFycmF5IGZyb20gYHN0YXRlLVxcdTAwM2Vpd190YWJsZWAgKHdoaWNoIGlzIGl0c2VsZiBmdWxseSBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uKSBvciBhIGxvb3AgdGhhdCBzZXRzIGFsbCBlbGVtZW50cyB0byAxLiBUaHVzLCB0aGUgYHdlaWdodHNgIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb2YgaXRzIGVsZW1lbnRzIGFyZSByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YzViZjIzMThlZDAzNjU5YWY3MGM4MWM3OWQ0YjA4MTY2NjlhNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNzozODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDUwMWUwYjgwZDdkYTEuLjFlZjUwY2EzN2Q0MmIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbiBcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbitcdHdlaWdodHMgPSBrbWFsbG9jKG5yX25vZGVfaWRzLCBnZnAgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spO1xuIFx0aWYgKCF3ZWlnaHRzKVxuIFx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6MjguNDg2OTc3MTYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTM4NTEwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCBob3cgd2UgYWxsb2NhdGUgbWVtb3J5IGluIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBzd2FwcGluZyBvdXQgYGt6YWxsb2NgIGZvciBga21hbGxvY2Agd2hlbiBhbGxvY2F0aW5nIGBucl9ub2RlX2lkc2AgYnl0ZXMuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZS4gQmFzaWNhbGx5LCBgd2VpZ2h0c2AgaXMgbm8gbG9uZ2VyIGdvaW5nIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB3ZSdyZSBub3cgdXNpbmcgYGttYWxsb2NgIHdpdGggYGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTS2AgaW5zdGVhZC5cblxuVGhhdCdzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4gTXkgYnJhaW4gaXMgc2NyZWFtaW5nLCBcIlVuaW5pdGlhbGl6ZWQgbWVtb3J5ISBQb3RlbnRpYWwgYnVncyFcIi4gVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsIGFyZSB3ZSAqYWN0dWFsbHkqIGluaXRpYWxpemluZyB0aGUgYHdlaWdodHNgIGFycmF5IGJlZm9yZSBpdHMgZmlyc3QgdXNlPyBUaGlzIGlzIGNyaXRpY2FsLiBJZiB3ZSdyZSBub3QsIHdlIGNvdWxkIGhhdmUgc2VyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGRhdGEgbGVha3MsIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGNvZGUgcmlnaHQgYXdheSBhbmQgdHJhY2UgYWxsIHVzZXMgb2YgYHdlaWdodHNgIHRvIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLCBhbmQgaXMgc2FmZS4gSSBtdXN0IGNvbmZpcm0gdGhlIGltcGFjdCBvZiB0aGlzIGBrbWFsbG9jYCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo0Mi42MjU0OTA5OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTgzMTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MjYwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYzNC1cXG5tbS9tZW1wb2xpY3kuYzoyNjM1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYzNi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzc5PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTMtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo0My4wNzczMjk2MTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0ODIwOTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2VpZ2h0ZWQgaW50ZXJsZWF2aW5nIGlzIGltcGxlbWVudGVkIGF0IHRoZSBjb3JlIGFsbG9jYXRpb24gbGV2ZWwsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBrZXkgcGllY2UgaW4gY29vcmRpbmF0aW5nIHBhZ2UgZGlzdHJpYnV0aW9uIGFjcm9zcyBOVU1BIG5vZGVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgd2VpZ2h0cy4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBsZXZlcmFnZXMgdGhlIGV4aXN0aW5nIG1lbW9yeSBwb2xpY3kgaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBleHRlbmRzIGFuZCBvcHRpbWl6ZXMgaXQgZm9yIGJ1bGsgb3BlcmF0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBmYWlsdXJlcyBkdXJpbmcgYWxsb2NhdGlvbiwgYW5kIGlmIGl0IGltcGxlbWVudHMgYW55IGZvcm0gb2YgZmFpcm5lc3Mgb3IgcmV0cnkgbWVjaGFuaXNtcyB0byBkZWFsIHdpdGggcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgb3B0aW1pemF0aW9ucyBzcGVjaWZpYyB0byBidWxrIGFsbG9jYXRpb24gY29tcGFyZWQgdG8gc2luZ2xlLXBhZ2UgYWxsb2NhdGlvbiDigJMgcGVyaGFwcyBiYXRjaGluZyBvZiBub2RlIHNlbGVjdGlvbiBvciBwcmUtY2FsY3VsYXRpb24gb2YgYWxsb2NhdGlvbiB0YXJnZXRzLiBMZXQncyBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGxpbmVzIHVwIHdpdGggdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo0Ni41MjU1NDI0NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjM1OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuMjYzNjpcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuMjYzNzpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuMjYzODpcXHR7XFxuMjYzOTpcXHRcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxuMjY0MDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDtcXG4yNjQxOlxcdFxcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XFxuMjY0MjpcXHRcXHR1bnNpZ25lZCBsb25nIHRvdGFsX2FsbG9jYXRlZCA9IDA7XFxuMjY0MzpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZCA9IDA7XFxuMjY0NDpcXHRcXHR1bnNpZ25lZCBsb25nIHJvdW5kcztcXG4yNjQ1OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlcywgZGVsdGE7XFxuMjY0NjpcXHRcXHR1OCAqd2VpZ2h0cywgd2VpZ2h0O1xcbjI2NDc6XFx0XFx0dW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7XFxuMjY0ODpcXHRcXHR1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzO1xcbjI2NDk6XFx0XFx0bm9kZW1hc2tfdCBub2RlcztcXG4yNjUwOlxcdFxcdGludCBubm9kZXMsIG5vZGU7XFxuMjY1MTpcXHRcXHRpbnQgcmVzdW1lX25vZGUgPSBNQVhfTlVNTk9ERVMgLSAxO1xcbjI2NTI6XFx0XFx0dTggcmVzdW1lX3dlaWdodCA9IDA7XFxuMjY1MzpcXHRcXHRpbnQgcHJldl9ub2RlO1xcbjI2NTQ6XFx0XFx0aW50IGk7XFxuMjY1NTpcXHRcXG4yNjU2OlxcdFxcdGlmICghbnJfcGFnZXMpXFxuMjY1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjU4OlxcdFxcbjI2NTk6XFx0XFx0LyogcmVhZCB0aGUgbm9kZXMgb250byB0aGUgc3RhY2ssIHJldHJ5IGlmIGRvbmUgZHVyaW5nIHJlYmluZCAqL1xcbjI2NjA6XFx0XFx0ZG8ge1xcbjI2NjE6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG4yNjYyOlxcdFxcdFxcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcXHUwMDI2bm9kZXMpO1xcbjI2NjM6XFx0XFx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XFxuMjY2NDpcXHRcXG4yNjY1OlxcdFxcdC8qIGlmIHRoZSBub2RlbWFzayBoYXMgYmVjb21lIGludmFsaWQsIHdlIGNhbm5vdCBkbyBhbnl0aGluZyAqL1xcbjI2NjY6XFx0XFx0aWYgKCFubm9kZXMpXFxuMjY2NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjY4OlxcdFxcbjI2Njk6XFx0XFx0LyogQ29udGludWUgYWxsb2NhdGluZyBmcm9tIG1vc3QgcmVjZW50IG5vZGUgYW5kIGFkanVzdCB0aGUgbnJfcGFnZXMgKi9cXG4yNjcwOlxcdFxcdG5vZGUgPSBtZS1cXHUwMDNlaWxfcHJldjtcXG4yNjcxOlxcdFxcdHdlaWdodCA9IG1lLVxcdTAwM2VpbF93ZWlnaHQ7XFxuMjY3MjpcXHRcXHRpZiAod2VpZ2h0IFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgbm9kZXMpKSB7XFxuMjY3MzpcXHRcXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG4yNjc0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxuMjY3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbjI2NzY6XFx0XFx0XFx0cGFnZV9hcnJheSArPSBucl9hbGxvY2F0ZWQ7XFxuMjY3NzpcXHRcXHRcXHR0b3RhbF9hbGxvY2F0ZWQgKz0gbnJfYWxsb2NhdGVkO1xcbjI2Nzg6XFx0XFx0XFx0LyogaWYgdGhhdCdzIGFsbCB0aGUgcGFnZXMsIG5vIG5lZWQgdG8gaW50ZXJsZWF2ZSAqL1xcbjI2Nzk6XFx0XFx0XFx0aWYgKHJlbV9wYWdlcyBcXHUwMDNjPSB3ZWlnaHQpIHtcXG4yNjgwOlxcdFxcdFxcdFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgLT0gcmVtX3BhZ2VzO1xcbjI2ODE6XFx0XFx0XFx0XFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4yNjgyOlxcdFxcdFxcdH1cXG4yNjgzOlxcdFxcdFxcdC8qIE90aGVyd2lzZSB3ZSBhZGp1c3QgcmVtYWluaW5nIHBhZ2VzLCBjb250aW51ZSBmcm9tIHRoZXJlICovXFxuMjY4NDpcXHRcXHRcXHRyZW1fcGFnZXMgLT0gd2VpZ2h0O1xcbjI2ODU6XFx0XFx0fVxcbjI2ODY6XFx0XFx0LyogY2xlYXIgYWN0aXZlIHdlaWdodCBpbiBjYXNlIG9mIGFuIGFsbG9jYXRpb24gZmFpbHVyZSAqL1xcbjI2ODc6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IDA7XFxuMjY4ODpcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXFxuMjY5MTpcXHRcXHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XFxuMjY5MjpcXHRcXHRpZiAoIXdlaWdodHMpXFxuMjY5MzpcXHRcXHRcXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xcbjI2OTQ6XFx0XFxuMjY5NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjY5NjpcXHRcXHRzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7XFxuMjY5NzpcXHRcXHRpZiAoc3RhdGUpIHtcXG4yNjk4OlxcdFxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMjY5OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAwOlxcdFxcdH0gZWxzZSB7XFxuMjcwMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNzAyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjI3MDM6XFx0XFx0XFx0XFx0d2VpZ2h0c1tpXSA9IDE7XFxuMjcwNDpcXHRcXHR9XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXFxuMjcwNzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXFxuMjcwODpcXHRcXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4yNzA5OlxcdFxcbjI3MTA6XFx0XFx0LypcXG4yNzExOlxcdFxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbjI3MTI6XFx0XFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4yNzEzOlxcdFxcdCAqXFxuMjcxNDpcXHRcXHQgKiBpZiAocm91bmRzIFxcdTAwM2UgMCkgYW5kIChkZWx0YSA9PSAwKSwgcmVzdW1lX25vZGUgd2lsbCBhbHdheXMgYmVcXG4yNzE1OlxcdFxcdCAqIHRoZSBub2RlIGZvbGxvd2luZyBwcmV2X25vZGUgYW5kIGl0cyB3ZWlnaHQuXFxuMjcxNjpcXHRcXHQgKi9cXG4yNzE3OlxcdFxcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcXG4yNzE4OlxcdFxcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xcbjI3MTk6XFx0XFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMDpcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XFxuMjcyMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4yNzIyOlxcdFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuMjcyMzpcXHRcXHRcXHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xcbjI3MjQ6XFx0XFx0XFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcXG4yNzI1OlxcdFxcdFxcdC8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJ3MgcG9ydGlvbiBvZiB0aGUgZGVsdGEgKi9cXG4yNzI2OlxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbjI3Mjc6XFx0XFx0XFx0XFx0bm9kZV9wYWdlcyArPSB3ZWlnaHQ7XFxuMjcyODpcXHRcXHRcXHRcXHRkZWx0YSAtPSB3ZWlnaHQ7XFxuMjcyOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGRlbHRhKSB7XFxuMjczMDpcXHRcXHRcXHRcXHQvKiB3aGVuIGRlbHRhIGlzIGRlcGxldGVkLCByZXN1bWUgZnJvbSB0aGF0IG5vZGUgKi9cXG4yNzMxOlxcdFxcdFxcdFxcdG5vZGVfcGFnZXMgKz0gZGVsdGE7XFxuMjczMjpcXHRcXHRcXHRcXHRyZXN1bWVfbm9kZSA9IG5vZGU7XFxuMjczMzpcXHRcXHRcXHRcXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0IC0gZGVsdGE7XFxuMjczNDpcXHRcXHRcXHRcXHRkZWx0YSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjQ2LjUyNTg0NTM4MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjk3MjExMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQ29kZSBTbmlwcGV0KipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBncmFiYmluZyBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzLCBgd2VpZ2h0c2AuIEknbSB1c2luZyBga21hbGxvY2AgdG8gYWxsb2NhdGUgdGhlIG5lY2Vzc2FyeSBtZW1vcnksIGEgY29tbW9uIHByYWN0aWNlIHdpdGhpbiB0aGUga2VybmVsIGZvciBtYW5hZ2luZyBtZW1vcnkgZHluYW1pY2FsbHkuIFRoZW4gSSdtIGNoZWNraW5nIGlmIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsLCBpZiBub3QsIEknbGwgYmFpbCBvdXQgYW5kIHJldHVybiB0aGUgdG90YWwgYWxsb2NhdGVkLlxuXG5Ob3csIGhlcmUncyB0aGUgY2xldmVyIHBhcnQuIEknbSB1c2luZyBhbiBSQ1UgcmVhZCBsb2NrLCB3aGljaCBtZWFucyBJJ20gYWNjZXNzaW5nIHNoYXJlZCBkYXRhIChgd2lfc3RhdGVgKSB3aXRoIGEgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIEkgZGVyZWZlcmVuY2UgYHdpX3N0YXRlYCB1c2luZyBgcmN1X2RlcmVmZXJlbmNlYCwgd2hpY2ggaXMgaG93IHdlIHNhZmVseSBhY2Nlc3MgZGF0YSBwcm90ZWN0ZWQgYnkgUkNVLiBJJ20gY2hlY2tpbmcgaWYgdGhlIHN0YXRlIGlzIG5vbi1OVUxMLiBJZiBpdCBpcywgSSBjb3B5IHRoZSBjb250ZW50cyBvZiBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIGludG8gbXkgbG9jYWwgYHdlaWdodHNgIGFycmF5LiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgSSdtIGNvcHlpbmcgYG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KWAgYnl0ZXMsIGltcGx5aW5nIHRoYXQgYHN0YXRlLVx1MDAzZWl3X3RhYmxlYCBpcyBhbiBhcnJheSBvZiBzaXplIGBucl9ub2RlX2lkc2AsIHdoaWNoIGNvbnRhaW5zIHVuc2lnbmVkIDgtYml0IGludGVnZXJzLiBJJ20gcmVsZWFzaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIGFmdGVyIHRoaXMgY29weSBpcyBkb25lLCBjb21wbGV0aW5nIHRoZSBzYWZlIHJlYWQuXG5cbklmIGBzdGF0ZWAgKmlzKiBOVUxMLCBpbmRpY2F0aW5nIGl0J3MgdW5pbml0aWFsaXplZCwgSSByZWxlYXNlIHRoZSBsb2NrIGFuZCB0aGVuIGluaXRpYWxpemUgYWxsIGVsZW1lbnRzIG9mIHRoZSBgd2VpZ2h0c2AgYXJyYXkgdG8gMS4gVGhpcyBlbnN1cmVzIHRoYXQgYHdlaWdodHNgIGFsd2F5cyBoYXMgdmFsaWQgZGF0YS5cblxuU28sIGluIGJvdGggc2NlbmFyaW9zIOKAkyB3aGV0aGVyIHRoZSBzdGF0ZSBpcyBpbml0aWFsaXplZCBvciBub3Qg4oCTIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBhcnJheSBpcyBlaXRoZXIgcG9wdWxhdGVkIGJ5IGEgbWVtY3B5LCBpZiB0aGUgc3RhdGUgZXhpc3RzLCBvciBieSBhIGxvb3AgdGhhdCBpbml0aWFsaXplcyBlYWNoIGVsZW1lbnQgdG8gMS4gSXQgc2VlbXMgbGlrZSB0aGUgc3RhdGUgYmVpbmcgTlVMTCBpcyBoYW5kbGVkIGdyYWNlZnVsbHkgaGVyZS5cblxuSSdsbCBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoYXQgYHN0YXRlLVx1MDAzZWl3X3RhYmxlYCBpcyBpbmRlZWQgYW4gYXJyYXkgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUsIGdpdmVuIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAuIEdvb2QgcHJhY3RpY2UgdG8gYWx3YXlzIHZlcmlmeSBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIHN0cnVjdHVyZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzozOTo1Mi44MjMwNjA2NTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDA3NzUyNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTE1Mj1zdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNTctICovXFxubW0vbWVtcG9saWN5LmM6MTU4OnN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcXG5tbS9tZW1wb2xpY3kuYy0xNTktXFx0Ym9vbCBtb2RlX2F1dG87XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNjEtfTtcXG5tbS9tZW1wb2xpY3kuYzoxNjI6c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIF9fcmN1ICp3aV9zdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0xNjMtc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE3MT1zdGF0aWMgdTggZ2V0X2lsX3dlaWdodChpbnQgbm9kZSlcXG5tbS9tZW1wb2xpY3kuYy0xNzIte1xcbm1tL21lbXBvbGljeS5jOjE3MzpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMTc0LVxcdHU4IHdlaWdodCA9IDE7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjE9aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcXG5tbS9tZW1wb2xpY3kuYy0yMjIte1xcbm1tL21lbXBvbGljeS5jOjIyMzpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG5tbS9tZW1wb2xpY3kuYy0yMjQtXFx0dW5zaWduZWQgaW50ICpvbGRfYncsICpuZXdfYnc7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjA2PXN0YXRpYyB1bnNpZ25lZCBpbnQgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBwZ29mZl90IGlseClcXG5tbS9tZW1wb2xpY3kuYy0yMjA3LXtcXG5tbS9tZW1wb2xpY3kuYzoyMjA4OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0yMjA5LVxcdG5vZGVtYXNrX3Qgbm9kZW1hc2s7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNjM1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjM4LXtcXG5tbS9tZW1wb2xpY3kuYzoyNjM5OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG5tbS9tZW1wb2xpY3kuYy0yNjQwLVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzY0Mz1zdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNjQ1LXtcXG5tbS9tZW1wb2xpY3kuYzozNjQ2OlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xcbm1tL21lbXBvbGljeS5jLTM2NDctXFx0c3RydWN0IGl3X25vZGVfYXR0ciAqbm9kZV9hdHRyO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzY4Mj1zdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2ODQte1xcbm1tL21lbXBvbGljeS5jOjM2ODU6XFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xcbm1tL21lbXBvbGljeS5jLTM2ODYtXFx0Ym9vbCB3aV9hdXRvID0gdHJ1ZTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM2OTc9c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzY5OS17XFxubW0vbWVtcG9saWN5LmM6MzcwMDpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG5tbS9tZW1wb2xpY3kuYy0zNzAxLVxcdHVuc2lnbmVkIGludCAqYnc7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNzgxPXN0YXRpYyB2b2lkIHdpX3N0YXRlX2ZyZWUodm9pZClcXG5tbS9tZW1wb2xpY3kuYy0zNzgyLXtcXG5tbS9tZW1wb2xpY3kuYzozNzgzOlxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpvbGRfd2lfc3RhdGU7XFxubW0vbWVtcG9saWN5LmMtMzc4NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6NTQuNDYzODQxNDM5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njk3Mjc1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBkZWZpbml0aW9uIGluIGBtbS9tZW1wb2xpY3kuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBpbnRlcmxlYXZlIG1lbW9yeSBwb2xpY3kgaXMgaW1wbGVtZW50ZWQuIFRoaXMgaXMgYSBjcnVjaWFsIHN0cnVjdHVyZSBmb3IgdGhlIGBNUE9MX0lOVEVSTEVBVkVgIHBvbGljeSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wb25lbnRzIHRvIGdyYXNwIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgcGFnZXMgYXJlIGRpc3RyaWJ1dGVkIGFjcm9zcyBOVU1BIG5vZGVzLCBlc3BlY2lhbGx5IHdoZW4gd2VpZ2h0cyBhcmUgaW52b2x2ZWQuIEknbSBhc3N1bWluZyB0aGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gbWFuYWdlIHRoZSBpbnRlcmxlYXZpbmcgcHJvY2Vzcy4gVGhpbmdzIGxpa2Ugd2hpY2ggbm9kZSB0aGUgY3VycmVudCBwYWdlIGFsbG9jYXRpb24gaXMgXCJwb2ludGluZyB0b1wiIGFuZCBtYXliZSBzb21lIHNvcnQgb2Ygd2VpZ2h0aW5nIG1lY2hhbmlzbSB0byBjb25zaWRlciB3aGVuIHRoZSB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0LCBJIHN1c3BlY3QgdGhleSBoYXZlIGRpZmZlcmVudCBsb2dpYyBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB0eXBlLCBub3JtYWwgbWVtb3J5LCBodWdlIHBhZ2VzLCBldGMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYWN0dWFsbHkgbWFrZSB0aGUgZGVjaXNpb24gZm9yIGludGVybGVhdmluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjM5OjU4LjAzMzU3MjgwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdCAqIGJlZW4gZm91bmQgdG8gcGVyZm9ybSBhdCBhIHJlYXNvbmFibGUgY29tcHJvbWlzZSBiZXR3ZWVuIHRoZSB0d28gZ29hbHMuXFxuIDE1MTpcXHQgKi9cXG4gMTUyOlxcdHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0LypcXG4gMTU1OlxcdCAqIEEgbnVsbCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIGlzIGludGVycHJldGVkIGFzIGhhdmluZyAubW9kZT1cXFwiYXV0b1xcXCIsXFxuIDE1NjpcXHQgKiBhbmQgLml3X3RhYmxlIGlzIGludGVycHJldGVkIGFzIGFuIGFycmF5IG9mIDFzIHdpdGggbGVuZ3RoIG5yX25vZGVfaWRzLlxcbiAxNTc6XFx0ICovXFxuIDE1ODpcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XFxuIDE1OTpcXHRcXHRib29sIG1vZGVfYXV0bztcXG4gMTYwOlxcdFxcdHU4IGl3X3RhYmxlW107XFxuIDE2MTpcXHR9O1xcbiAxNjI6XFx0c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIF9fcmN1ICp3aV9zdGF0ZTtcXG4gMTYzOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdC8qXFxuIDE2NjpcXHQgKiB3aV9zdGF0ZV9sb2NrIHByb3RlY3RzIGJvdGggd2lfc3RhdGUgYW5kIG5vZGVfYndfdGFibGUuXFxuIDE2NzpcXHQgKiBub2RlX2J3X3RhYmxlIGlzIG9ubHkgdXNlZCBieSB3cml0ZXJzIHRvIHVwZGF0ZSB3aV9zdGF0ZS5cXG4gMTY4OlxcdCAqL1xcbiAxNjk6XFx0c3RhdGljIERFRklORV9NVVRFWCh3aV9zdGF0ZV9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6Mzk6NTguMDMzODIxNjY1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTYzNTU1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBgaXdfdGFibGVgIGFuZCBgd2lfc3RhdGVgKipcblxuUmlnaHQsIGBpd190YWJsZWAuIFRoYXQncyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgaXNuJ3QgaXQ/IE9rYXksIG5vIHByb2JsZW0sIHRoYXQgbWVhbnMgaXRzIHNpemUgaXMgZGV0ZXJtaW5lZCBhdCBydW50aW1lLCBsaWtlbHkgYXMgcGFydCBvZiBzb21lIGxhcmdlciBzdHJ1Y3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IGFycmF5IGFyZSBtYW5hZ2VkLiBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgYmFkIGRlc2lnbiwgaXQgYWxsb3dzIGZvciBkeW5hbWljIHNpemluZywgd2hpY2ggY2FuIGJlIHVzZWZ1bC5cblxuTm93LCBsZXQncyB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoaXMgYGl3X3RhYmxlYCBpcyBpbnN0YW50aWF0ZWQsIGFuZCBmb2xsb3cgdGhhdCB0byB1bmRlcnN0YW5kIGhvdyBgd2lfc3RhdGVgIGlzIGFsbG9jYXRlZC4gSSBuZWVkIHRvIHNlZSBpZiBgd2lfc3RhdGVgIGlzIGEgcGFydCBvZiB0aGF0IHBhcmVudCBzdHJ1Y3QsIGFuZCB0aGVyZWZvcmUgbGlrZWx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0b28sIG9yIGlmIGl0IGhhcyBzb21lIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3RyYXRlZ3kuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbC4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgd2lfc3RhdGVgIHZhcmlhYmxlIGV4aXN0cyBpbiBtZW1vcnkgcmVsYXRpdmUgdG8gdGhhdCBgaXdfdGFibGVgIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gVGhpcyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cywgbWVtb3J5IGxlYWtzLCBhbmQgb3ZlcmFsbCBjb2RlIHJvYnVzdG5lc3MuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IHNpemVkIGFuZCBpbml0aWFsaXplZDsgSSBzZWUgc29tZSBwb3RlbnRpYWwgaGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDowNi4xNTAxODAxMTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTQ5MTY1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvYy4qc2l6ZW9mLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDowNi4xOTcxNDMyNjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNjYwOTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBXaS1GaSBTdGF0ZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBhIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZSwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCdzIHJlbGF0ZWQgdG8gaG93IHRoZSBXaS1GaSBkcml2ZXIgaXMgbWFuYWdpbmcgaXRzIHN0YXRlIChgd2lfc3RhdGVgKS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHR5cGljYWwgZGVidWdnaW5nIGFwcHJvYWNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIG1lbW9yeSBhbGxvY2F0aW9ucyBzdXJyb3VuZGluZyB0aGF0IHN0cnVjdHVyZS4gTXkgZ3V0IHNheXMgdGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgaW4gaG93IHRoZSBgd2lfc3RhdGVgIGlzIGJlaW5nIGluaXRpYWxpemVkLCBhbGxvY2F0ZWQsIG9yIGRlYWxsb2NhdGVkLlxuXG5UaGVyZWZvcmUsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBhbmQgZWZmaWNpZW50bHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvZGUgc2VjdGlvbnMuIEknbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgaW5zdGFuY2VzIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGNvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggYHdpX3N0YXRlYC4gSSdsbCBmb2N1cyBvbiBhIGZldyBrZXkgb25lczogYHN0cnVjdF9zaXplYCwgdG8gc2VlIGhvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIGFyZSBjYWxjdWxhdGVkOyBga3phbGxvY2AsIHNpbmNlIGEgemVyb2VkIGFsbG9jYXRpb24gaXMgb2Z0ZW4gdXNlZCBhdCBzdGF0ZSBpbml0aWFsaXphdGlvbjsgYW5kIGBrbWFsbG9jYCwgYmVjYXVzZSBpdCdzIGEgY29tbW9uIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIGFyZSB1c2VkIGluIGNsb3NlIHByb3hpbWl0eSB0byBgd2lfc3RhdGVgLiBUaGF0J3MgZ29pbmcgdG8gZ2l2ZSBtZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgYWxsb2NhdGlvbiBzaXplcyBhbmQgbWVtb3J5IGRlcGVuZGVuY2llcy4gQnkgZm9jdXNpbmcgb24gdGhlc2UgZnVuY3Rpb24gY2FsbHMsIEkgY2FuIHplcm8gaW4gb24gdGhlIGV4YWN0IGxpbmVzIG9mIGNvZGUgd2hlcmUgdGhlIHN0YXRlIHZhcmlhYmxlIGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGFuZCB0aGVyZWZvcmUgcXVpY2tseSBzdGFydCBldmFsdWF0aW5nIHRoZSBsb2dpYyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjA5LjkzMzc1NjA2N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1ODE0NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdF9zaXplLip3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDowOS45NzkzNTMxOTJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MTI1NzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vbWVtcG9saWN5LmNgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBwb2xpY2llcyBhZ2FpbiwgYW5kIHNwZWNpZmljYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHN0cnVjdHVyZSBzaXplcy4gTXkgaW5pdGlhbCBhcHByb2FjaCB0byB1bmRlcnN0YW5kaW5nIHRoaXMgd291bGQgYmUgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc2VlLi4uIEknbSBnb2luZyB0byBzdGFydCBieSBncmVwcGluZyB0aGUgYG1tL21lbXBvbGljeS5jYCBmaWxlIGZvciBpbnN0YW5jZXMgb2YgYHN0cnVjdF9zaXplYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuIEl0J2xsIHByb2JhYmx5IGhpZ2hsaWdodCB3aGVyZSBhbmQgaG93IGBzdHJ1Y3Rfc2l6ZWAgaXMgdXNlZCBpbiBjYWxjdWxhdGluZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgaGFuZGxpbmcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgbWVtb3J5IHBvbGljeSBmcmFtZXdvcmsuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgaXQgaW4gcGxhY2VzIHJlbGF0ZWQgdG8gcmVzaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIGJhc2VkIG9uIHRoZSBwb2xpY3kgaW4gZWZmZWN0LiBUaGlzIGdyZXAgaXMgYSBxdWljayB3YXkgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUgYW5kIGNvbnRleHQsIGdpdmluZyBtZSBhIHNvbGlkIGJhc2lzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIHJlYXNvbmluZy4gSXQgaXMgYSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2ggdG8gZ2V0IHN0YXJ0ZWQuIEknbGwgbmVlZCB0byBmb2xsb3cgdXAgd2l0aCBjYXJlZnVsIGV4YW1pbmF0aW9uIG9mIHRoZSBhZGphY2VudCBjb2RlLCBidXQgdGhpcyBncmVwIHdpbGwgYmUgaW5zdHJ1bWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MTMuMzUwNjE0MTI3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxMjM3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0X3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjEzLjM5ODQ0MTc2MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE2NDQzMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBtbS9tZW1wb2xpY3kuY2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIGBtbS9tZW1wb2xpY3kuY2AgYW5kIHplcm9pbmcgaW4gb24gaG93IG1lbW9yeSBhbGxvY2F0aW9uIHBsYXlzIG91dCBhcm91bmQgdGhlIGBuZXdfd2lfc3RhdGVgIHZhcmlhYmxlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IEkgbmVlZCB0byBsb29rIGF0IGhvdyBkaWZmZXJlbnQgbWVtb3J5IHBvbGljaWVzIGludGVyYWN0IHdpdGggYWxsb2NhdGlvbiwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBmaWxlLiBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGttYWxsb2NgIGFuZCBga3phbGxvY2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHdoZW4gaXQgY29tZXMgdG8gYWxsb2NhdGluZyBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljaWVzLCBJIGZpZ3VyZSB0aGV5IGFyZSBnb2luZyB0byBwbGF5IGEga2V5IHJvbGUgaW4gc2V0dGluZyB1cCB0aGlzIG5ldyBzdGF0ZS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBhbGxvY2F0aW9uIHBvaW50cyBhbmQgaG93IHRoZSBtZW1wb2xpY3kgaXMgYXBwbGllZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlaXIgdXNhZ2UgdGhhdCBpbmZsdWVuY2UgcG9saWN5IGRlY2lzaW9ucywgb3IgcGVyaGFwcyB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgYWxsb2NhdGlvbiBmbGFncyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MTcuNzE0ODg3NjA5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxOTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfd2lfc3RhdGUuKmFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTIyMT1pbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjMyLVxcbm1tL21lbXBvbGljeS5jOjIzMzpcXHRuZXdfd2lfc3RhdGUgPSBrbWFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcXG5tbS9tZW1wb2xpY3kuYy0yMzQtXFx0aWYgKCFuZXdfd2lfc3RhdGUpIHtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM2NDM9c3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzY1NS1cXG5tbS9tZW1wb2xpY3kuYzozNjU2OlxcdG5ld193aV9zdGF0ZSA9IGt6YWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xcbm1tL21lbXBvbGljeS5jLTM2NTctXFx0aWYgKCFuZXdfd2lfc3RhdGUpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNjk3PXN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM3MDctXFxubW0vbWVtcG9saWN5LmM6MzcwODpcXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcXG5tbS9tZW1wb2xpY3kuYy0zNzA5LVxcdGlmICghbmV3X3dpX3N0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDoxNy43NjI2MTEzMjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NjMyNDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGlzIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhleSdyZSB1dGlsaXppbmcgYGttYWxsb2NfZmxleGAgYW5kIGBremFsbG9jX2ZsZXhgIGhlcmUuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIGZvY3VzIG9uIGZsZXhpYmxlIGFsbG9jYXRpb24gc2l6ZXMsIHBvdGVudGlhbGx5IGZvciBzbWFsbGVyIG9iamVjdHMgb3Igc3RydWN0dXJlcy4gTm93LCB3aGF0J3MgZ290IG15IGF0dGVudGlvbiBpcyBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIHVzaW5nIGBrbWFsbG9jX2ZsZXhgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgZGVhbHMgd2l0aCBtZW1vcnkgbm9kZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHBvbGljaWVzLCBzbyB0aGUgY2hvaWNlIG9mIGBrbWFsbG9jX2ZsZXhgIHRoZXJlIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5J3ZlIGNob3NlbiB0aGlzIGFsbG9jYXRpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgcG9saWNpZXMuIFdoYXQgaXMgYmVpbmcgYWxsb2NhdGVkLCB3aGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhbmQgZG9lcyBpdCBhbGlnbiB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneT8gSSdtIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBhbmQgZGlzc2VjdCB0aGF0IGxpbmUgdG8gc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjIxLjk1ODkzOTA2NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDUzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIxOlxcdGludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpXFxuIDIyMjpcXHR7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG4gMjI0OlxcdFxcdHVuc2lnbmVkIGludCAqb2xkX2J3LCAqbmV3X2J3O1xcbiAyMjU6XFx0XFx0dW5zaWduZWQgaW50IGJ3X3ZhbDtcXG4gMjI2OlxcdFxcdGludCBpO1xcbiAyMjc6XFx0XFxuIDIyODpcXHRcXHRid192YWwgPSBtaW4oY29vcmRzLVxcdTAwM2VyZWFkX2JhbmR3aWR0aCwgY29vcmRzLVxcdTAwM2V3cml0ZV9iYW5kd2lkdGgpO1xcbiAyMjk6XFx0XFx0bmV3X2J3ID0ga2NhbGxvYyhucl9ub2RlX2lkcywgc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpO1xcbiAyMzA6XFx0XFx0aWYgKCFuZXdfYncpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0bmV3X3dpX3N0YXRlID0ga21hbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxuIDIzNDpcXHRcXHRpZiAoIW5ld193aV9zdGF0ZSkge1xcbiAyMzU6XFx0XFx0XFx0a2ZyZWUobmV3X2J3KTtcXG4gMjM2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vtb2RlX2F1dG8gPSB0cnVlO1xcbiAyMzk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxuIDI0MDpcXHRcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0LypcXG4gMjQzOlxcdFxcdCAqIFVwZGF0ZSBiYW5kd2lkdGggaW5mbywgZXZlbiBpbiBtYW51YWwgbW9kZS4gVGhhdCB3YXksIHdoZW4gc3dpdGNoaW5nXFxuIDI0NDpcXHRcXHQgKiB0byBhdXRvIG1vZGUgaW4gdGhlIGZ1dHVyZSwgaXdfdGFibGUgY2FuIGJlIG92ZXJ3cml0dGVuIHVzaW5nXFxuIDI0NTpcXHRcXHQgKiBhY2N1cmF0ZSBidyBkYXRhLlxcbiAyNDY6XFx0XFx0ICovXFxuIDI0NzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0b2xkX2J3ID0gbm9kZV9id190YWJsZTtcXG4gMjUwOlxcdFxcdGlmIChvbGRfYncpXFxuIDI1MTpcXHRcXHRcXHRtZW1jcHkobmV3X2J3LCBvbGRfYncsIG5yX25vZGVfaWRzICogc2l6ZW9mKCpvbGRfYncpKTtcXG4gMjUyOlxcdFxcdG5ld19id1tub2RlXSA9IGJ3X3ZhbDtcXG4gMjUzOlxcdFxcdG5vZGVfYndfdGFibGUgPSBuZXdfYnc7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxuIDI1NjpcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG4gMjU3OlxcdFxcdGlmIChvbGRfd2lfc3RhdGUgXFx1MDAyNlxcdTAwMjYgIW9sZF93aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvKSB7XFxuIDI1ODpcXHRcXHRcXHQvKiBNYW51YWwgbW9kZTsgc2tpcCByZWR1Y2luZyB3ZWlnaHRzIGFuZCB1cGRhdGluZyB3aV9zdGF0ZSAqL1xcbiAyNTk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4gMjYwOlxcdFxcdFxcdGtmcmVlKG5ld193aV9zdGF0ZSk7XFxuIDI2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjYyOlxcdFxcdH1cXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0LyogTlVMTCB3aV9zdGF0ZSBhc3N1bWVzIGF1dG89dHJ1ZTsgcmVkdWNlIHdlaWdodHMgYW5kIHVwZGF0ZSB3aV9zdGF0ZSovXFxuIDI2NTpcXHRcXHRyZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKG5ld19idywgbmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZSk7XFxuIDI2NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxuIDI2OTpcXHRcXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuIDI3MDpcXHRcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MjEuOTU5MjQ2NzM0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTk2NDc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiBpbiBXZWlnaHRlZCBJbnRlcmxlYXZlIFN0YXRlKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YC4gUmlnaHQgYXdheSwgaXQgc2V0cyBgbmV3X3dpX3N0YXRlLVx1MDAzZW1vZGVfYXV0b2AgdG8gYHRydWVgLCBhbmQgdGhlbiBpdGVyYXRlcyB0aHJvdWdoIGBucl9ub2RlX2lkc2AgdG8gaW5pdGlhbGl6ZSBgbmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlYCB3aXRoIHRoZSB2YWx1ZSAxLiBTbywgYmFzZWQgb24gdGhhdCwgYG5ld193aV9zdGF0ZWAgc2hvdWxkIGJlIGZ1bGx5IGluaXRpYWxpemVkLCByaWdodD9cblxuQnV0IHdhaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWJvdXQgdGhhdCBga21hbGxvY19mbGV4YCBhbGxvY2F0aW9uLiBJdCdzIGRvaW5nIGBzaXplb2Yoc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUpICsgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpYC4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlJ3Mgbm8gcGFkZGluZyBpbiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgLiBPa2F5LCBsZXQncyBzZWUuLi5cblxuYGBgY1xuc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUge1xuXHRib29sIG1vZGVfYXV0bztcblx0dTggaXdfdGFibGVbXTtcbn07XG5gYGBcblxuQSBgYm9vbGAgaXMgb25lIGJ5dGUsIGFuZCBhIGB1OGAgaXMgb25lIGJ5dGUgYXMgd2VsbCwgc28gdGhlcmUncyAqbm8qIHBhZGRpbmcuIFRoaXMgY29uZmlybXMgdGhhdCBgbmV3X3dpX3N0YXRlYCBpcyBpbmRlZWQgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBwYXRjaCBtb3JlIGJyb2FkbHkuIEkgc2VlIGB3ZWlnaHRzYCBiZWluZyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AuIEl0J3MgZ2V0dGluZyBhc3NpZ25lZCBgbnJfbm9kZV9pZHNgIGJ5dGVzLlxuXG5gYGBjXG5cdHJjdV9yZWFkX2xvY2soKTtcblx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuXHRpZiAoc3RhdGUpIHtcblx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcblx0XHRcdHdlaWdodHNbaV0gPSAxO1xuXHR9XG5gYGBcblxuSW4gZWl0aGVyIGJyYW5jaCBvZiB0aGlzIGBpZmAgc3RhdGVtZW50LCBgd2VpZ2h0c2AgZ2V0cyBmdWxseSBpbml0aWFsaXplZC4gRWl0aGVyIGJ5IGNvcHlpbmcgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIG9yIGJ5IHNldHRpbmcgZXZlcnl0aGluZyB0byAxLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbnJfbm9kZV9pZHNgIGNvcnJlY3RseSByZWZsZWN0cyB0aGUgc2l6ZSBvZiBgc3RhdGUtXHUwMDNlaXdfdGFibGVgLiBZZXMsIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgaXMgYWxsb2NhdGVkIHdpdGggYG5yX25vZGVfaWRzYCBlbGVtZW50cywgYW5kIGB3ZWlnaHRzYCBhcmUgYWxzbyBhbGxvY2F0ZWQgd2l0aCBgbnJfbm9kZV9pZHNgIGJ5dGVzLiBTbyBgd2VpZ2h0c2Agc2hvdWxkIGJlIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5JcyB0aGVyZSBhbnkgY2hhbmNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZT8gSXQgbG9va3MgbGlrZSBgd2VpZ2h0c2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogaXQgZ2V0cyB1c2VkLiBIb3dldmVyLCB3aGF0IGlmIGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgaXRzZWxmIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBHb2luZyBiYWNrLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBpd190YWJsZWAgaXMgaW5pdGlhbGl6ZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBuZXZlciB0aGUgY2FzZS4gRnJvbSB3aGF0IEkgY2FuIHJlY2FsbCwgdGhlIGZ1bmN0aW9uIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgKmRvZXMqIGluaXRpYWxpemUgYGl3X3RhYmxlYCB0byAxLCBhbmQgdGhlbiBjYWxscyBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyhuZXdfYncsIG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZSlgLiBTbyBJIG5lZWQgdG8gZ28gb3ZlciBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDozMS45NTg4OTc3MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTc3OlxcdFxcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcXG4gMTc4OlxcdFxcdGlmIChzdGF0ZSlcXG4gMTc5OlxcdFxcdFxcdHdlaWdodCA9IHN0YXRlLVxcdTAwM2Vpd190YWJsZVtub2RlXTtcXG4gMTgwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAxODE6XFx0XFx0cmV0dXJuIHdlaWdodDtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0LypcXG4gMTg1OlxcdCAqIENvbnZlcnQgYmFuZHdpZHRoIHZhbHVlcyBpbnRvIHdlaWdodGVkIGludGVybGVhdmUgd2VpZ2h0cy5cXG4gMTg2OlxcdCAqIENhbGwgd2l0aCB3aV9zdGF0ZV9sb2NrLlxcbiAxODc6XFx0ICovXFxuIDE4ODpcXHRzdGF0aWMgdm9pZCByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKHVuc2lnbmVkIGludCAqYncsIHU4ICpuZXdfaXcpXFxuIDE4OTpcXHR7XFxuIDE5MDpcXHRcXHR1NjQgc3VtX2J3ID0gMDtcXG4gMTkxOlxcdFxcdHVuc2lnbmVkIGludCBjYXN0X3N1bV9idywgc2NhbGluZ19mYWN0b3IgPSAxLCBpd19nY2QgPSAwO1xcbiAxOTI6XFx0XFx0aW50IG5pZDtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxcbiAxOTU6XFx0XFx0XFx0c3VtX2J3ICs9IGJ3W25pZF07XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdC8qIFNjYWxlIGJhbmR3aWR0aHMgdG8gd2hvbGUgbnVtYmVycyBpbiB0aGUgcmFuZ2UgWzEsIHdlaWdodGluZXNzXSAqL1xcbiAxOTg6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuIDE5OTpcXHRcXHRcXHQvKlxcbiAyMDA6XFx0XFx0XFx0ICogVHJ5IG5vdCB0byBwZXJmb3JtIDY0LWJpdCBkaXZpc2lvbi5cXG4gMjAxOlxcdFxcdFxcdCAqIElmIHN1bV9idyBcXHUwMDNjIHNjYWxpbmdfZmFjdG9yLCB0aGVuIHN1bV9idyBcXHUwMDNjIFUzMl9NQVguXFxuIDIwMjpcXHRcXHRcXHQgKiBJZiBzdW1fYncgXFx1MDAzZSBzY2FsaW5nX2ZhY3RvciwgdGhlbiByb3VuZCB0aGUgd2VpZ2h0IHVwIHRvIDEuXFxuIDIwMzpcXHRcXHRcXHQgKi9cXG4gMjA0OlxcdFxcdFxcdHNjYWxpbmdfZmFjdG9yID0gd2VpZ2h0aW5lc3MgKiBid1tuaWRdO1xcbiAyMDU6XFx0XFx0XFx0aWYgKGJ3W25pZF0gXFx1MDAyNlxcdTAwMjYgc3VtX2J3IFxcdTAwM2Mgc2NhbGluZ19mYWN0b3IpIHtcXG4gMjA2OlxcdFxcdFxcdFxcdGNhc3Rfc3VtX2J3ID0gKHVuc2lnbmVkIGludClzdW1fYnc7XFxuIDIwNzpcXHRcXHRcXHRcXHRuZXdfaXdbbmlkXSA9IHNjYWxpbmdfZmFjdG9yIC8gY2FzdF9zdW1fYnc7XFxuIDIwODpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMDk6XFx0XFx0XFx0XFx0bmV3X2l3W25pZF0gPSAxO1xcbiAyMTA6XFx0XFx0XFx0fVxcbiAyMTE6XFx0XFx0XFx0aWYgKCFpd19nY2QpXFxuIDIxMjpcXHRcXHRcXHRcXHRpd19nY2QgPSBuZXdfaXdbbmlkXTtcXG4gMjEzOlxcdFxcdFxcdGl3X2djZCA9IGdjZChpd19nY2QsIG5ld19pd1tuaWRdKTtcXG4gMjE0OlxcdFxcdH1cXG4gMjE1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDozMS45NTkxNDcxOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE2ODAzMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEludGVybGVhdmUgV2VpZ2h0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0c2AgZnVuY3Rpb24uLi4gaXQgc2VlbXMgdG8gb25seSBiZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbm9kZSBzdGF0ZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKWAuICBUaGF0J3MgZm9jdXNlZCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IGl0J3MgaW1wb3J0YW50IGZvciBpbnRlcmxlYXZlIHdlaWdodHMuIE15IGNvbmNlcm4gaXMgdGhhdCBgbmV3X2l3YCwgd2hpY2ggcmVmZXJzIHRvIHRoZSBgbmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlYCwgaGFzIGEgc2l6ZSBkZWZpbmVkIGJ5IGBucl9ub2RlX2lkc2AuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIuLi4gd2hhdCBhYm91dCB0aGUgbm9kZXMgKm5vdCogY3VycmVudGx5IHByZXNlbnQgd2l0aGluIGBOX01FTU9SWWA/XG5cblRoZW4gSSBzYXcgdGhpcyBpbml0aWFsaXphdGlvbiBpbiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgOlxuXG5gYGBjXG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG5cdFx0bmV3X3dpX3N0YXRlLVx1MDAzZWl3X3RhYmxlW2ldID0gMTtcbmBgYFxuXG5BaGEhIEl0J3MgKmluaXRpYWxpemluZyogYWxsIGBucl9ub2RlX2lkc2AgZWxlbWVudHMgb2YgdGhlIGludGVybGVhdmUgd2VpZ2h0cyB0byAxLCByZWdhcmRsZXNzLiBBbmQgKnRoZW4qIGByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzYCBzZWxlY3RpdmVseSBvdmVyd3JpdGVzIHRoZSB2YWx1ZXMgZm9yIHRoZSBub2RlcyB0aGF0ICphcmUqIGluIGBOX01FTU9SWWAuICBTbywgKmFsbCogZWxlbWVudHMgaW4gYGl3X3RhYmxlYCBzdGFydCBhdCAxIGFuZCBhcmUgdGhlbiAocG90ZW50aWFsbHkpIG1vZGlmaWVkLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gb3B0aW1pemluZywgYXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGludGVybGVhdmUgd2VpZ2h0cyBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGFsbG9jYXRpb24gcG9pbnRzIHRoYXQgd291bGQgY2hhbmdlIHRoaXMgYmVoYXZpb3IuIExldCBtZSBzZWUgd2hlcmUgZWxzZSBgbmV3X3dpX3N0YXRlYCBpcyBhbGxvY2F0ZWQuIExldCdzIGxvb2sgYXQgYG5vZGVfc3RvcmVgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDk5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MzguNTc1OTU0NDU5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjQzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjQzOlxcdHN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4zNjQ0OlxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMzY0NTpcXHR7XFxuMzY0NjpcXHRcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqbmV3X3dpX3N0YXRlLCAqb2xkX3dpX3N0YXRlID0gTlVMTDtcXG4zNjQ3OlxcdFxcdHN0cnVjdCBpd19ub2RlX2F0dHIgKm5vZGVfYXR0cjtcXG4zNjQ4OlxcdFxcdHU4IHdlaWdodCA9IDA7XFxuMzY0OTpcXHRcXHRpbnQgaTtcXG4zNjUwOlxcdFxcbjM2NTE6XFx0XFx0bm9kZV9hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBpd19ub2RlX2F0dHIsIGtvYmpfYXR0cik7XFxuMzY1MjpcXHRcXHRpZiAoY291bnQgPT0gMCB8fCBzeXNmc19zdHJlcShidWYsIFxcXCJcXFwiKSB8fFxcbjM2NTM6XFx0XFx0ICAgIGtzdHJ0b3U4KGJ1ZiwgMCwgXFx1MDAyNndlaWdodCkgfHwgd2VpZ2h0ID09IDApXFxuMzY1NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNjU1OlxcdFxcbjM2NTY6XFx0XFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxuMzY1NzpcXHRcXHRpZiAoIW5ld193aV9zdGF0ZSlcXG4zNjU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM2NTk6XFx0XFxuMzY2MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4zNjYxOlxcdFxcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXFxuMzY2MjpcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNndpX3N0YXRlX2xvY2spKTtcXG4zNjYzOlxcdFxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG4zNjY0OlxcdFxcdFxcdG1lbWNweShuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLFxcbjM2NjU6XFx0XFx0XFx0XFx0XFx0XFx0bnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcXG4zNjY2OlxcdFxcdH0gZWxzZSB7XFxuMzY2NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcXG4zNjY4OlxcdFxcdFxcdFxcdG5ld193aV9zdGF0ZS1cXHUwMDNlaXdfdGFibGVbaV0gPSAxO1xcbjM2Njk6XFx0XFx0fVxcbjM2NzA6XFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZVtub2RlX2F0dHItXFx1MDAzZW5pZF0gPSB3ZWlnaHQ7XFxuMzY3MTpcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZW1vZGVfYXV0byA9IGZhbHNlO1xcbjM2NzI6XFx0XFxuMzY3MzpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XFxuMzY3NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbjM2NzU6XFx0XFx0aWYgKG9sZF93aV9zdGF0ZSkge1xcbjM2NzY6XFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuMzY3NzpcXHRcXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbjM2Nzg6XFx0XFx0fVxcbjM2Nzk6XFx0XFx0cmV0dXJuIGNvdW50O1xcbjM2ODA6XFx0fVxcbjM2ODE6XFx0XFxuMzY4MjpcXHRzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6MzguNTc2MTE3NDc5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDg5ODA5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIHNuaXBwZXQ6XG5cbioqSW5pdGlhbGl6YXRpb24gb2YgYG5ld193aV9zdGF0ZWAgYW5kIGl0cyBXZWlnaHRlZCBJbnRlcmxlYXZlIFRhYmxlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgbmV3X3dpX3N0YXRlYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleGAuIFRoYXQncyBpbXBvcnRhbnQ7IGl0IG1lYW5zIHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgYWxsIGl0cyBtZW1iZXJzLCBnZXRzIHplcm9lZCBvdXQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFdlJ3JlIGdldHRpbmcgYSBjbGVhbiBzbGF0ZSBoZXJlLCBhbmQgdGhhdCB6ZXJvLWluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwuXG5cbk5vdywgd2UncmUgZWl0aGVyIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIGBvbGRfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGVgIGludG8gdGhlIG5ldyBvbmUsIG9yLCBpZiB3ZSBkb24ndCBjb3B5LCB3ZSBzZXQgYWxsIGVsZW1lbnRzIG9mIHRoZSB0YWJsZSB0byAxLiBJbiBib3RoIHNjZW5hcmlvcywgdGhlIGBpd190YWJsZWAgaXMgZ2V0dGluZyBmdWxseSBhbmQgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQuIFRoaXMgbWFrZXMgc2Vuc2UuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGludGVybGVhdmUgdGFibGUgaXMgaW4gYSBrbm93biwgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgYW55dGhpbmcgZWxzZSBoYXBwZW5zLiBUaGUgY2hvaWNlIG9mIGNvcHlpbmcgdmVyc3VzIGluaXRpYWxpemluZyB3aXRoIG9uZXMgbGlrZWx5IGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGxvZ2ljIGFuZCB3aGF0IHJlcHJlc2VudHMgYSB2YWxpZCBzdGFydGluZyBwb2ludCBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkgbmV4dCBzdGVwIHRvIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDo0Mi45MjUxMDIyNjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2OTcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2OTc6XFx0c3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjM2OTg6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4zNjk5OlxcdHtcXG4zNzAwOlxcdFxcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpuZXdfd2lfc3RhdGUsICpvbGRfd2lfc3RhdGUgPSBOVUxMO1xcbjM3MDE6XFx0XFx0dW5zaWduZWQgaW50ICpidztcXG4zNzAyOlxcdFxcdGJvb2wgaW5wdXQ7XFxuMzcwMzpcXHRcXHRpbnQgaTtcXG4zNzA0OlxcdFxcbjM3MDU6XFx0XFx0aWYgKGtzdHJ0b2Jvb2woYnVmLCBcXHUwMDI2aW5wdXQpKVxcbjM3MDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzcwNzpcXHRcXG4zNzA4OlxcdFxcdG5ld193aV9zdGF0ZSA9IGt6YWxsb2NfZmxleCgqbmV3X3dpX3N0YXRlLCBpd190YWJsZSwgbnJfbm9kZV9pZHMpO1xcbjM3MDk6XFx0XFx0aWYgKCFuZXdfd2lfc3RhdGUpXFxuMzcxMDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zNzExOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbjM3MTI6XFx0XFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZVtpXSA9IDE7XFxuMzcxMzpcXHRcXG4zNzE0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbjM3MTU6XFx0XFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcXG4zNzE2OlxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2d2lfc3RhdGVfbG9jaykpO1xcbjM3MTc6XFx0XFxuMzcxODpcXHRcXHRpZiAob2xkX3dpX3N0YXRlIFxcdTAwMjZcXHUwMDI2IGlucHV0ID09IG9sZF93aV9zdGF0ZS1cXHUwMDNlbW9kZV9hdXRvKSB7XFxuMzcxOTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbjM3MjA6XFx0XFx0XFx0a2ZyZWUobmV3X3dpX3N0YXRlKTtcXG4zNzIxOlxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4zNzIyOlxcdFxcdH1cXG4zNzIzOlxcdFxcbjM3MjQ6XFx0XFx0aWYgKCFpbnB1dCkge1xcbjM3MjU6XFx0XFx0XFx0aWYgKG9sZF93aV9zdGF0ZSlcXG4zNzI2OlxcdFxcdFxcdFxcdG1lbWNweShuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLCBvbGRfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlLFxcbjM3Mjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuMzcyODpcXHRcXHRcXHRnb3RvIHVwZGF0ZV93aV9zdGF0ZTtcXG4zNzI5OlxcdFxcdH1cXG4zNzMwOlxcdFxcbjM3MzE6XFx0XFx0YncgPSBub2RlX2J3X3RhYmxlO1xcbjM3MzI6XFx0XFx0aWYgKCFidykge1xcbjM3MzM6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcXG4zNzM0OlxcdFxcdFxcdGtmcmVlKG5ld193aV9zdGF0ZSk7XFxuMzczNTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4zNzM2OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6NDIuOTI1Mjg4OTgyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTQ0MjQyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXZWlnaHQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBuZXdfd2lfc3RhdGVgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX2ZsZXhgIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0IGJlY2F1c2UgYGt6YWxsb2NgIHplcm9lcyB0aGUgbWVtb3J5LiBUaGVuIGFsbCBlbGVtZW50cyBhcmUgZXhwbGljaXRseSBzZXQgdG8gMS4gIFNvLCBpbiB0aGlzIGNvbnRleHQsIHdlIGNhbiBzYXkgaXQncyBmdWxseSBpbml0aWFsaXplZC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0LCB0aGlzIHBhdGNoIGNoYW5nZWQgYGt6YWxsb2NgIHRvIGBrbWFsbG9jYCBpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmb3IgdGhlIGB3ZWlnaHRzYCB2YXJpYWJsZTpcblxuYGBgY1xuLyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuLVx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xuK1x0d2VpZ2h0cyA9IGttYWxsb2MobnJfbm9kZV9pZHMsIGdmcCBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSyk7XG5gYGBcblxuQW5kIHRoZW4gdGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB3ZWlnaHRzIGZyb20gYSBjb3B5OlxuXG5gYGBjXG5cdHJjdV9yZWFkX2xvY2soKTtcblx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuXHRpZiAoc3RhdGUpIHtcblx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcblx0XHRcdHdlaWdodHNbaV0gPSAxO1xuXHR9XG5gYGBcblxuTXkgZmlyc3QgdGhvdWdodDogaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IGB3ZWlnaHRzYCBnZXRzIHVzZWQgdW5pbml0aWFsaXplZD8gIE5vLCBpdCBjYW4ndCBiZS4gIEVpdGhlciB0aGUgYG1lbWNweWAgd2lsbCBjb3B5IGBucl9ub2RlX2lkc2AgYnl0ZXMgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIHRvIGB3ZWlnaHRzYCwgd2hpY2ggaW1wbGljaXRseSBndWFyYW50ZWVzIGluaXRpYWxpemF0aW9uLCBvciB0aGUgbG9vcCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBgbnJfbm9kZV9pZHNgIGJ5dGVzIHRvIDEuXG5cbkJ1dCwgd2FpdCwgd2hhdCBpZiBgc3RhdGUtXHUwMDNlaXdfdGFibGVgIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgd2UndmUganVzdCBlc3RhYmxpc2hlZCB0aGF0IGBzdGF0ZS1cdTAwM2Vpd190YWJsZWAgX2lzXyBmdWxseSBpbml0aWFsaXplZCBpbiBldmVyeSBpbnN0YW5jZSB3aGVyZSBpdCBpcyBhbGxvY2F0ZWQuIFNvIGB3ZWlnaHRzYCBzaG91bGQgYmUgZ3VhcmFudGVlZCBmdWxseSBpbml0aWFsaXplZC5cblxuT2theSwgbGV0J3MgY29uc2lkZXIgcGFkZGluZy4gSXMgdGhlcmUgYW55IHBhZGRpbmcgaW4gYHdlaWdodHNgPyAgSXQncyBhbiBhcnJheSBvZiBgdThgICh1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykuIE5vIHBhZGRpbmcgdGhlcmUuXG5cbk5vdywgY29uc2lkZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczogYW55IGluZm8tbGVhayB0byB1c2VyIHNwYWNlPyBgd2VpZ2h0c2AgaXMgdXNlZCBsb2NhbGx5IHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCB0byBjYWxjdWxhdGUgYHdlaWdodF90b3RhbGAgYW5kIGByb3VuZHNgIGFuZCB0aGVuLi4uIHdoZXJlIGlzIGl0IGZyZWVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNzo0MDo1MC40Nzk3MTU0NTdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzA6XFx0XFx0XFx0XFx0Lyogd2hlbiBkZWx0YSBpcyBkZXBsZXRlZCwgcmVzdW1lIGZyb20gdGhhdCBub2RlICovXFxuMjczMTpcXHRcXHRcXHRcXHRub2RlX3BhZ2VzICs9IGRlbHRhO1xcbjI3MzI6XFx0XFx0XFx0XFx0cmVzdW1lX25vZGUgPSBub2RlO1xcbjI3MzM6XFx0XFx0XFx0XFx0cmVzdW1lX3dlaWdodCA9IHdlaWdodCAtIGRlbHRhO1xcbjI3MzQ6XFx0XFx0XFx0XFx0ZGVsdGEgPSAwO1xcbjI3MzU6XFx0XFx0XFx0fVxcbjI3MzY6XFx0XFx0XFx0Lyogbm9kZV9wYWdlcyBjYW4gYmUgMCBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzIGFuZCByb3VuZHMgPT0gMCAqL1xcbjI3Mzc6XFx0XFx0XFx0aWYgKCFub2RlX3BhZ2VzKVxcbjI3Mzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjczOTpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbjI3NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4yNzQxOlxcdFxcdFxcdHBhZ2VfYXJyYXkgKz0gbnJfYWxsb2NhdGVkO1xcbjI3NDI6XFx0XFx0XFx0dG90YWxfYWxsb2NhdGVkICs9IG5yX2FsbG9jYXRlZDtcXG4yNzQzOlxcdFxcdFxcdGlmICh0b3RhbF9hbGxvY2F0ZWQgPT0gbnJfcGFnZXMpXFxuMjc0NDpcXHRcXHRcXHRcXHRicmVhaztcXG4yNzQ1OlxcdFxcdFxcdHByZXZfbm9kZSA9IG5vZGU7XFxuMjc0NjpcXHRcXHR9XFxuMjc0NzpcXHRcXHRtZS1cXHUwMDNlaWxfcHJldiA9IHJlc3VtZV9ub2RlO1xcbjI3NDg6XFx0XFx0bWUtXFx1MDAzZWlsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7XFxuMjc0OTpcXHRcXHRrZnJlZSh3ZWlnaHRzKTtcXG4yNzUwOlxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuMjc1MTpcXHR9XFxuMjc1MjpcXHRcXG4yNzUzOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbjI3NTQ6XFx0XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjI3NTU6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbjI3NTY6XFx0e1xcbjI3NTc6XFx0XFx0Z2ZwX3QgcHJlZmVycmVkX2dmcDtcXG4yNzU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcXG4yNzU5OlxcdFxcbjI3NjA6XFx0XFx0cHJlZmVycmVkX2dmcCA9IGdmcCB8IF9fR0ZQX05PV0FSTjtcXG4yNzYxOlxcdFxcdHByZWZlcnJlZF9nZnAgXFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XFxuMjc2MjpcXHRcXG4yNzYzOlxcdFxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbjI3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbjI3NjU6XFx0XFxuMjc2NjpcXHRcXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxuMjc2NzpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG4yNzY4OlxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbjI3Njk6XFx0XFx0XFx0XFx0XFx0cGFnZV9hcnJheSArIG5yX2FsbG9jYXRlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE3OjQwOjUwLjQ3OTg4MDUxN1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk1NDA2Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga3phbGxvYyB0byBrbWFsbG9jIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJZZXMsIGBrZnJlZSh3ZWlnaHRzKWAgKmlzKiBjYWxsZWQgYXQgdGhlIGVuZCBvZiBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC5cIiBCdXQgd2FpdCBhIG1pbnV0ZSwgd2hhdCBpZiB0aGUgZnVuY3Rpb24gZXhpdHMgZWFybHksIGR1ZSB0byBhIGZhaWx1cmUgaW4gcGFnZSBhbGxvY2F0aW9uPyBDaGVja2luZyB0aGUgY29kZSwgSSBzZWUgYSBicmVhayBzdGF0ZW1lbnQ6XG5cbmBgYGNcblx0XHQvKiBub2RlX3BhZ2VzIGNhbiBiZSAwIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMgYW5kIHJvdW5kcyA9PSAwICovXG5cdFx0aWYgKCFub2RlX3BhZ2VzKVxuXHRcdFx0YnJlYWs7XG5gYGBcblxuUmlnaHQsIGlmIGl0IGJyZWFrcyBvdXQgZWFybHksIHRoZSBjb2RlIHByb2NlZWRzIHRvOlxuXG5gYGBjXG5cdG1lLVx1MDAzZWlsX3ByZXYgPSByZXN1bWVfbm9kZTtcblx0bWUtXHUwMDNlaWxfd2VpZ2h0ID0gcmVzdW1lX3dlaWdodDtcblx0a2ZyZWUod2VpZ2h0cyk7XG5cdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XG5gYGBcblxuU28sIGB3ZWlnaHRzYCBpcyBwcm9wZXJseSBmcmVlZCBldmVuIGluIGFuIGVhcmx5IGV4aXQsIHdoaWNoIGlzIGdvb2QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNoYW5nZSBpcyBga3phbGxvY2AgdG8gYGttYWxsb2NgLCBtZWFuaW5nIHdlIGFyZW4ndCB6ZXJvLWluaXRpYWxpemluZyB0aGUgYHdlaWdodHNgIGFycmF5IGFueW1vcmUuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSAqaW1tZWRpYXRlbHkqIGFmdGVyIHRoZSBhbGxvY2F0aW9uIGVpdGhlciBkb2VzIGEgYG1lbWNweWAgZnJvbSBgc3RhdGUtXHUwMDNlaXdfdGFibGVgLCB3aGljaCBpdHNlbGYgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIG9yIGl0IHNldHMgYWxsIGVsZW1lbnRzIGluIHRoZSBgd2VpZ2h0c2AgYXJyYXkgdG8gMS4gU28sIGB3ZWlnaHRzYCAqaXMqIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgcmVhZC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiwgYXZvaWRpbmcgcmVkdW5kYW50IHplcm9pbmcuIFRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLCBzbyBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSBzb21ldGhpbmcgZGlmZmVyZW50LiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCAqaXMqIG9ubHkgdGhpcyBvbmUgY2hhbmdlOlxuXG5gYGBjXG4gXHQvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovXG4tXHR3ZWlnaHRzID0ga3phbGxvYyhucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7XG4rXHR3ZWlnaHRzID0ga21hbGxvYyhucl9ub2RlX2lkcywgZ2ZwIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKTtcbiBcdGlmICghd2VpZ2h0cylcbmBgYFxuXG5ZdXAsIGp1c3QgdGhlIG9uZS4gQmVjYXVzZSBgd2VpZ2h0c2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgYWZ0ZXIgYWxsb2NhdGlvbiB2aWEgZWl0aGVyIGBtZW1jcHlgIG9yIHRoZSBsb29wLCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY29ycnVwdGlvbiwgYW5kIGNhdGNoIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhbmQgbm8gc3BlY2lhbCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjcsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTc6NDA6NTkuOTc1Mjg5Njg2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBga3phbGxvY2Agd2l0aCBga21hbGxvY2AgZm9yIHRoZSBgd2VpZ2h0c2AgYXJyYXkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIFdoaWxlIHRoaXMgcmVtb3ZlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgYWxsb2NhdGlvbiB3aXRoIGVpdGhlciBhIGBtZW1jcHlgIHRoYXQgZnVsbHkgcG9wdWxhdGVzIHRoZSBhcnJheSBmcm9tIGBzdGF0ZS1cXHUwMDNlaXdfdGFibGVgICh3aGljaCBpcyBpdHNlbGYgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbikgb3IgYSBsb29wIHRoYXQgc2V0cyBhbGwgZWxlbWVudHMgdG8gMS4gVGh1cywgdGhlIGB3ZWlnaHRzYCBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9mIGl0cyBlbGVtZW50cyBhcmUgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowst2r9[1] Phase: Succeeded StartedAt: 2026-08-21 17:41:11 +0000 UTC FinishedAt: 2026-08-21 17:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 17:41:11 +0000 UTC FinishedAt: 2026-08-21 17:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2] Phase: Succeeded StartedAt: 2026-08-21 17:41:11 +0000 UTC FinishedAt: 2026-08-21 21:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 17:41:11 +0000 UTC FinishedAt: 2026-08-21 21:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 17:41:11 +0000 UTC FinishedAt: 2026-08-21 17:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 17:41:11 +0000 UTC FinishedAt: 2026-08-21 17:41:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowst2r9/series-workflowst2r9-convert-artifact-4240547146/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 17:41:21 +0000 UTC FinishedAt: 2026-08-21 17:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 17:41:21 +0000 UTC FinishedAt: 2026-08-21 17:57:26 +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:*1e893ac6-940a-4141-a3b1-30f4897f714d,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-workflowst2r9/series-workflowst2r9-convert-artifact-4240547146/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": "ae006742-9bae-4db9-82c4-f0f5c3a80d08", "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-workflowst2r9/series-workflowst2r9-build-action-806761784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 17:41:21 +0000 UTC FinishedAt: 2026-08-21 17:57:16 +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:*1e893ac6-940a-4141-a3b1-30f4897f714d,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-workflowst2r9/series-workflowst2r9-convert-artifact-4240547146/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": "ae006742-9bae-4db9-82c4-f0f5c3a80d08", "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-workflowst2r9/series-workflowst2r9-build-action-806761784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 17:57:26 +0000 UTC FinishedAt: 2026-08-21 17:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 17:57:26 +0000 UTC FinishedAt: 2026-08-21 17:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 17:57:26 +0000 UTC FinishedAt: 2026-08-21 17:57:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 17:57:26 +0000 UTC FinishedAt: 2026-08-21 17:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowst2r9/series-workflowst2r9-convert-artifact-3366660325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 17:57:36 +0000 UTC FinishedAt: 2026-08-21 17:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 17:57:36 +0000 UTC FinishedAt: 2026-08-21 17:59:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae006742-9bae-4db9-82c4-f0f5c3a80d08,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-workflowst2r9/series-workflowst2r9-build-action-806761784/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-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 17:59:24 +0000 UTC FinishedAt: 2026-08-21 17:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 17:59:24 +0000 UTC FinishedAt: 2026-08-21 17:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 17:59:24 +0000 UTC FinishedAt: 2026-08-21 18:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 17:59:24 +0000 UTC FinishedAt: 2026-08-21 18:15:26 +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:*1e893ac6-940a-4141-a3b1-30f4897f714d,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-workflowst2r9/series-workflowst2r9-convert-artifact-3366660325/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": "cd3836ac-86c4-4372-aa63-db08ccc4ddd8", "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-workflowst2r9/series-workflowst2r9-build-action-1693318449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 17:59:24 +0000 UTC FinishedAt: 2026-08-21 18:15:16 +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:*1e893ac6-940a-4141-a3b1-30f4897f714d,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-workflowst2r9/series-workflowst2r9-convert-artifact-3366660325/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": "cd3836ac-86c4-4372-aa63-db08ccc4ddd8", "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-workflowst2r9/series-workflowst2r9-build-action-1693318449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 18:15:26 +0000 UTC FinishedAt: 2026-08-21 18:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 18:15:26 +0000 UTC FinishedAt: 2026-08-21 18:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 18:15:26 +0000 UTC FinishedAt: 2026-08-21 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 18:15:26 +0000 UTC FinishedAt: 2026-08-21 18:17:05 +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:*cd3836ac-86c4-4372-aa63-db08ccc4ddd8,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-workflowst2r9/series-workflowst2r9-build-action-1693318449/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-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 21:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 21:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ae006742-9bae-4db9-82c4-f0f5c3a80d08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd3836ac-86c4-4372-aa63-db08ccc4ddd8,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-workflowst2r9/series-workflowst2r9-build-action-806761784/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-workflowst2r9/series-workflowst2r9-build-action-1693318449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 18:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 18:17:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowst2r9/series-workflowst2r9-convert-artifact-1152170346/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 18:17:15 +0000 UTC FinishedAt: 2026-08-21 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 18:17:25 +0000 UTC FinishedAt: 2026-08-21 21:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowst2r9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"575152a248b8192994b64d0b746a93890373715c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"dbff0c1a-80f5-4dea-abf2-db3c044cc6bd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 18:17:25 +0000 UTC FinishedAt: 2026-08-21 21:20:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae006742-9bae-4db9-82c4-f0f5c3a80d08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd3836ac-86c4-4372-aa63-db08ccc4ddd8,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-workflowst2r9/series-workflowst2r9-build-action-806761784/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-workflowst2r9/series-workflowst2r9-build-action-1693318449/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-workflowst2r9/series-workflowst2r9-convert-artifact-1152170346/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,}