Name: series-workflowbcjlw Phase: Succeeded StartedAt: 2026-09-12 09:21:07 +0000 UTC FinishedAt: 2026-09-12 12:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[0] Phase: Succeeded StartedAt: 2026-09-12 09:21:07 +0000 UTC FinishedAt: 2026-09-12 10:09:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 09:21:07 +0000 UTC FinishedAt: 2026-09-12 10:09:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "8450f72f-8d44-4836-bd3d-5172fe78f991" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "__vhost_scsi_complete_events", "vhost_scsi_complete_events", "vhost_scsi_send_evt", "vhost_scsi_evt_handle_kick", "vhost_scsi_do_plug" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfc2VuZF9ldnQmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9kb19wbHVnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZWN1cnNpdmUgbXV0ZXggbG9ja2luZyBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSW4gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdnEtXHUwMDNlbXV0ZXguIFByZXZpb3VzbHksIGlmIHZob3N0X3ZxX3dvcmtfcXVldWUoKSBmYWlsZWQsIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgd2FzIGludm9rZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB2cS1cdTAwM2VtdXRleCBhIHNlY29uZCB0aW1lLiBUaGUgcGF0Y2ggc3BsaXRzIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgaW50byBhbiB1bmxvY2tlZCBoZWxwZXIgKF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSkgYW5kIGNhbGxzIHRoYXQgZGlyZWN0bHkgd2hlbiB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQuXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXIgY29weWluZywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcy4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4sIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBldmVudCBjb21wbGV0aW9uIGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jIGJ5IGludHJvZHVjaW5nIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgdG8gYXZvaWQgZG91YmxlLWxvY2tpbmcgdnEtXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuaW5kZXggN2ExZjM5YTMyN2RhNi4uN2M5MDVlOWFkNDlhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuQEAgLTYzMCwxOSAmIzQzOzYzMCwyNiBAQCB2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG4gXHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4mIzQzOy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbiB7XG4tXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCwgKnQ7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIFx0XHRpZiAoIWRyb3ApXG4gXHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiBcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiBcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiB9XG4gXG5AQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiBcbiBcdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuLVx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4mIzQzO1x0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX3BsdWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXZlbnQgY29tcGxldGlvbiBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYyBieSBpbnRyb2R1Y2luZyBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzIHRvIGF2b2lkIGRvdWJsZS1sb2NraW5nIHZxLVx1MDAzZW11dGV4IHdoZW4gcXVldWluZyB3b3JrIGZhaWxzIGluIHZob3N0X3Njc2lfc2VuZF9ldnQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgL2Rldi92aG9zdC1zY3NpIGRldmljZSBpb2N0bCBpbnRlcmZhY2UgYW5kIFRDTSB0YXJnZXQgY29uZmlnZnMgb3BlcmF0aW9ucy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBldmVudCB2aXJ0cXVldWUgcHJvY2Vzc2luZyBhbmQgY29uY3VycmVuY3kvbG9ja2luZyBpbnZhcmlhbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWY0YjU5NjJjNGVkNjI5NGFiYmJhNDdkZDg3ZGJhYjFiZDVhYzQ5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEwOjA4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCA3YTFmMzlhMzI3ZGE2Li43YzkwNWU5YWQ0OWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtNjMwLDE5ICYjNDM7NjMwLDI2IEBAIHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCkKIAl2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTsKIH0KIAotc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApCiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqLwomIzQzO3N0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApCiB7Ci0Jc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwogCXN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwogCi0JbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiAJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO3ZzLSZndDt2c19ldmVudF9saXN0KTsKIAlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7CiAJCWlmICghZHJvcCkKIAkJCXZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7CiAJCXZob3N0X3Njc2lfZnJlZV9ldnQodnMsIGV2dCk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gJmFtcDt2cy0mZ3Q7dnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiYjNDM7CV9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApOwogCW11dGV4X3VubG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiB9CiAKQEAgLTE4MjksNyAmIzQzOzE4MzYsNyBAQCB2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiAKIAlsbGlzdF9hZGQoJmFtcDtldnQtJmd0O2xpc3QsICZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwogCWlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfd29yaykpCi0JCXZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTsKJiM0MzsJCV9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZGlmZiBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGUgY2hhbmdlcyBzZWVtIGZvY3VzZWQgYXJvdW5kIHRoZSBldmVudCBoYW5kbGluZyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgZXZlbnQgY29tcGxldGlvbiBhbmQgcXVldWluZyBsb2dpYy4KCkZpcnN0LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gVGhpcyBzdWdnZXN0cyBhIGNsZWFyIHNlcGFyYXRpb24gb2YgY29uY2VybnMuIFRoZSBvcmlnaW5hbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGZ1bmN0aW9uIGlzIG5vdyBqdXN0IGEgd3JhcHBlci4gSXQgYWNxdWlyZXMgdGhlIHZpcnRxdWV1ZSBtdXRleCwgY2FsbHMgdGhlIGludGVybmFsIGZ1bmN0aW9uIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIG11dGV4LiBUaGlzIGlzIGEgdmVyeSBzdGFuZGFyZCBwYXR0ZXJuLCBsaWtlbHkgdG8gYWxsb3cgdGhlIGNvcmUgY29tcGxldGlvbiBsb2dpYyB0byBiZSBjYWxsZWQgaW4gY29udGV4dHMgd2hlcmUgdGhlIG11dGV4IGlzIGFscmVhZHkgaGVsZC4gSXQgbWFrZXMgdGhlIGNvZGUgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgoKTm93LCBsb29raW5nIGF0IHRoZSBpbmxpbmUgZnVuY3Rpb25zLCBJIG9ic2VydmUgdGhhdCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBoYXBwZW5zLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBldmVudCBsaXN0LCBhbmQgY2FsbHMgYHZob3N0X3Njc2lfZG9fZXZ0X3dvcmtgIGZvciBlYWNoIGV2ZW50IGlmIGBkcm9wYCBpcyBmYWxzZS4gSWYgaXQgaXNuJiMzOTt0IGRyb3BwZWQsIGl0IHByb2Nlc3NlcyB0aGUgZXZlbnQuIFRoZW4sIGl0IGFsd2F5cyBmcmVlcyB0aGUgZXZlbnQgYWZ0ZXIgaGFuZGxpbmcuIFRoZSBsb2NrIHByb3RlY3RzIHRoZSBsaW5rZWQgbGlzdC4KClRoZSBrZXkgY2hhbmdlLCBhdCBsaW5lIDE4MzYsIGlzIHRoZSBjYWxsIHRvIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkaXJlY3RseSBmcm9tIHdpdGhpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2hlbiB0aGUgZXZlbnQgd29yayBxdWV1ZSBmYWlscy4gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGF0aCB3aGVyZSBldmVudHMgbWlnaHQgYmUgZHJvcHBlZCBvciBwcm9jZXNzZWQgaW1tZWRpYXRlbHkuIFRoZSBjaGFuZ2UgZnJvbSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHRvIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpbXBsaWVzIHRoYXQgdGhlIG11dGV4IGlzIGFscmVhZHkgaGVsZCBieSB0aGUgY2FsbCBzaXRlLiBUaGUgZ29hbCBzZWVtcyB0byBiZSB0byBjb21wbGV0ZSBhbmQgaGFuZGxlIHRoZSBldmVudHMgaW1tZWRpYXRlbHkgaW4gY2FzZXMgd2hlcmUgdGhlIHF1ZXVlaW5nIGZhaWxzLiBUaGUgYGRyb3BgIGZsYWcgaGVyZSBzdWdnZXN0cyB0aGF0IHRoZXJlJiMzOTtzIGEgcG9zc2liaWxpdHkgb2YgZGlzY2FyZGluZyBldmVudHMgaW4gZXJyb3IgY29uZGl0aW9ucy4gSSB3b25kZXIgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBwb3RlbnRpYWxseSBkcm9wcGluZyBldmVudHMgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgaW50ZW5kZWQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLCBidXQgd2hhdCBpcyB0aGUgY29zdCBvZiBkcm9wcGluZz8gSXMgdGhlcmUgYW55IGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGFzc29jaWF0ZWQgd2l0aCBkcm9wcGVkIGV2ZW50cz8KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBjYW4gZmFpbCBhbmQgd2h5IGRyb3BwaW5nIGFuIGV2ZW50IG1pZ2h0IGJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgdGhlc2UgZXZlbnRzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoZXkgKmFyZW4mIzM5O3QqIGRyb3BwZWQuIFRoaXMgYWxsIGZlZWxzIGxpa2UgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9yIGJ1ZyBmaXggcmVsYXRlZCB0byBldmVudCBoYW5kbGluZyB1bmRlciBoaWdoIGxvYWQgb3IgZXJyb3IgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHR2aG9zdF9zY3NpX2N0bF9oYW5kbGVfdnEodnMsIHZxKTtcbjE4MTE6XHR9XG4xODEyOlx0XG4xODEzOlx0c3RhdGljIHZvaWRcbjE4MTQ6XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4xODE1Olx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuLFxuMTgxNjpcdFx0XHQgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0O1xuMTgxOTpcdFxuMTgyMDpcdFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xuMTgyMTpcdFx0aWYgKCFldnQpXG4xODIyOlx0XHRcdHJldHVybjtcbjE4MjM6XHRcbjE4MjQ6XHRcdGlmICh0cGcgXHUwMDI2XHUwMDI2IGx1bikge1xuMTgyNTpcdFx0XHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXG4xODI2Olx0XHRcdC8qXG4xODI3Olx0XHRcdCAqIE5vdGU6IGV2dC1cdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcbjE4Mjg6XHRcdFx0ICogbHVuWzQtN10gbmVlZCB0byBiZSB6ZXJvIGFjY29yZGluZyB0byB2aXJ0aW8tc2NzaSBzcGVjLlxuMTgyOTpcdFx0XHQgKi9cbjE4MzA6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blswXSA9IDB4MDE7XG4xODMxOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXHUwMDNldHBvcnRfdHBndDtcbjE4MzI6XHRcdFx0aWYgKGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlPSAyNTYpXG4xODMzOlx0XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blsyXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlXHUwMDNlIDggfCAweDQwIDtcbjE4MzQ6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDI2IDB4RkY7XG4xODM1Olx0XHR9XG4xODM2Olx0XG4xODM3Olx0XHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuMTgzODpcdFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF93b3JrKSlcbjE4Mzk6XHRcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4xODQwOlx0fVxuMTg0MTpcdFxuMTg0MjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuMTg0MzpcdHtcbjE4NDQ6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXG4xODQ1Olx0XHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbjE4NDY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xuMTg0NzpcdFxuMTg0ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODQ5Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbjE4NTA6XHRcdFx0Z290byBvdXQ7XG4xODUxOlx0XG4xODUyOlx0XHRpZiAodnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZClcbjE4NTM6XHRcdFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIE5VTEwsIE5VTEwsIFZJUlRJT19TQ1NJX1RfTk9fRVZFTlQsXG4xODU0Olx0XHRcdFx0XHQgICAgMCk7XG4xODU1Olx0b3V0OlxuMTg1NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjE4NTc6XHR9XG4xODU4Olx0XG4xODU5Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBEZWFkbG9jayBpbiB0aGUgU0NTSSB2aG9zdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGl0JiMzOTtzIGdyYWJiaW5nIGB2cS0mZ3Q7bXV0ZXhgLiBQZXJmZWN0bHkgbm9ybWFsLCBwcm90ZWN0aW5nIHNoYXJlZCByZXNvdXJjZXMgd2l0aGluIHRoZSB2aXJ0dWFsIHF1ZXVlLiBUaGVuLCBpdCBjaGVja3MgaWYgdGhlcmUmIzM5O3MgYSB2YWxpZCBiYWNrZW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlydHVhbCBxdWV1ZS4gSWYgbm90LCBpdCBza2lwcyB0aGUgcmVzdCBhbmQgdW5sb2NrcyB0aGUgbXV0ZXguIEJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IGl0ICptaWdodCogY2FsbCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgaWYgZXZlbnRzIHdlcmUgbWlzc2VkLgoKQW5kIGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYmVmb3JlIHRoZSBmaXgsIHRoZSBjb2RlIGNhbGxzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7YC4gV2FpdCBhIHNlY29uZOKApiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFsc28gbG9ja3MgYHZxLSZndDttdXRleGAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgZGVhZGxvY2shIElmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5zIGZhbHNlIChpbXBseWluZyB0aGUgcXVldWUgaXNuJiMzOTt0IHJlYWR5IG9yIGFibGUgdG8gcHJvY2VzcyksIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgbWlnaHQgYmUgc3R1Y2sgaG9sZGluZyBgdnEtJmd0O211dGV4YCB3aGlsZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgICphbHNvKiB0cmllcyB0byBncmFiIGl0LiBCb29tLiBEZWFkbG9jayEKClRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBpcyBjYWxsZWQuIEdyZXAgdGltZSEgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG90aGVyIHBhdGhzIHRocm91Z2ggdGhlIGNvZGUgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoaXMgc2FtZSBtdXRleCBjb250ZW50aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIG9mIG5lc3RlZCBsb2NraW5nIGFuZCBuZWVkcyBhIHRob3JvdWdoIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX3NlbmRfZXZ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3Rfc2NzaV9kb19wbHVnIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9kb19wbHVnYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgU0NTSSBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGRldmljZSBwbHVnZ2luZy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCBhbmQgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsaW5lcyAyNTAwIHRocm91Z2ggMjU0MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZpcnR1YWwgU0NTSSBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSBhZGRlZCBvciByZW1vdmVkIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBsaW5lcyBiZWNhdXNlIHRoZXkgcHJvYmFibHkgaGFuZGxlIHRoZSBjcnVjaWFsIGxvZ2ljIG9mIHJlZ2lzdGVyaW5nIG9yIHVucmVnaXN0ZXJpbmcgYSB2aXJ0dWFsIGRldmljZSwgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IHF1ZXVlcywgYW5kIHBvdGVudGlhbGx5IG5vdGlmeWluZyB0aGUgdXNlci1zcGFjZSB2aG9zdC1zY3NpIGJhY2tlbmQgYWJvdXQgdGhlIGRldmljZSYjMzk7cyBhdmFpbGFiaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHZob3N0X3Njc2lfZGV2YCBzdHJ1Y3R1cmUgaXMgbWFuaXB1bGF0ZWQsIGhvdyBjb21tYW5kIHF1ZXVlcyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGUgZGV2aWNlJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHRoYXQgaGFuZGxlIHRoZSBtb3N0IGltcG9ydGFudCBzdGVwcyAtIHRoZSBhY3R1YWwgcGx1Z2dpbmcgYW5kIHVucGx1Z2dpbmcgb3BlcmF0aW9ucy4gVGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTAwOlx0XHRyZXR1cm4gXCYjMzQ7VW5rbm93blwmIzM0OztcbjI1MDE6XHR9XG4yNTAyOlx0XG4yNTAzOlx0c3RhdGljIHZvaWRcbjI1MDQ6XHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4yNTA1Olx0XHRcdCAgc3RydWN0IHNlX2x1biAqbHVuLCBib29sIHBsdWcpXG4yNTA2Olx0e1xuMjUwNzpcdFxuMjUwODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gdHBnLVx1MDAzZXZob3N0X3Njc2k7XG4yNTA5Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbjI1MTA6XHRcdHUzMiByZWFzb247XG4yNTExOlx0XG4yNTEyOlx0XHRpZiAoIXZzKVxuMjUxMzpcdFx0XHRyZXR1cm47XG4yNTE0Olx0XG4yNTE1Olx0XHRpZiAocGx1ZylcbjI1MTY6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcbjI1MTc6XHRcdGVsc2VcbjI1MTg6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFTU9WRUQ7XG4yNTE5Olx0XG4yNTIwOlx0XHR2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4yNTIxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MjI6XHRcdC8qXG4yNTIzOlx0XHQgKiBXZSBjYW4mIzM5O3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcbjI1MjQ6XHRcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXG4yNTI1Olx0XHQgKi9cbjI1MjY6XHRcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxuMjUyNzpcdFx0XHRnb3RvIHVubG9jaztcbjI1Mjg6XHRcbjI1Mjk6XHRcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbjI1MzA6XHRcdFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIHRwZywgbHVuLFxuMjUzMTpcdFx0XHRcdFx0ICAgVklSVElPX1NDU0lfVF9UUkFOU1BPUlRfUkVTRVQsIHJlYXNvbik7XG4yNTMyOlx0dW5sb2NrOlxuMjUzMzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MzQ6XHR9XG4yNTM1Olx0XG4yNTM2Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXG4yNTM3Olx0e1xuMjUzODpcdFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCB0cnVlKTtcbjI1Mzk6XHR9XG4yNTQwOlx0XG4yNTQxOlx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3R1bnBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcbjI1NDI6XHR7XG4yNTQzOlx0XHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIGZhbHNlKTtcbjI1NDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBEZWFkbG9jayBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgdmhvc3Qtc2NzaWAgaXNzdWUsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBjbGVhci4gSXQgc2VlbXMgYHZob3N0X3Njc2lfZG9fcGx1Z2Agd2FzIGFsc28gZ3JhYmJpbmcgdGhlIGAmYW1wO3ZxLSZndDttdXRleGAgbG9jaywgd2hpY2ggaXMgdGhlIHNhbWUgbXV0ZXggdGhhdCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIHVzZXMuIEJvdGggb2YgdGhlc2UgZnVuY3Rpb25zLCB0aGUgZm9ybWVyIGZvciBwbHVnZ2luZyBvcGVyYXRpb25zIGFuZCB0aGUgbGF0dGVyIGZvciBoYW5kbGluZyBldmVudHMgYXJlIGNhbGxpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgLgoKTm93LCB0aGUgY2xhc3NpYyBidWcgd2FzIGhlcmU6IFdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxlZCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdvdWxkIHByZXZpb3VzbHkgY2FsbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgKip0aGF0KiogZnVuY3Rpb24gd2FzIGdyYWJiaW5nIHRoZSBsb2NrIGFnYWluISBgbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7YCBzcGVjaWZpY2FsbHkuIFNvLCB3ZSBoYWQgYSBjbGFzc2ljIG11dGV4IGRlYWRsb2NrIHNpdHVhdGlvbi4KClRoZSBmaXggSSYjMzk7bSBzZWVpbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIHByb2JsZW1hdGljIGNhbGwgd2l0aCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7YC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIG5ldyBmdW5jdGlvbiBkb2VzbiYjMzk7dCB0cnkgdG8gYWNxdWlyZSB0aGUgbXV0ZXggaXRzZWxmLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlczogJiMzNDtDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5LgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB1c2VyIHNwYWNlIGNhbiBldmVuICpyZWFjaCogdGhpcyBgdmhvc3Qtc2NzaWAgY29kZS4gU28sIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgYHZob3N0LXNjc2lgIHByb3ZpZGVzIGEgY2hhcmFjdGVyIGRldmljZSwgYC9kZXYvdmhvc3Qtc2NzaWAsIG9yIGlvY3RscyBvbiB2aG9zdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy92aG9zdC9zY3NpLmNgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZGV2aWNlIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgZml4IGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pc2NfcmVnaXN0ZXJ8ZmlsZV9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xODY4PXN0YXRpYyBfX3BvbGxfdCB2aG9zdF9uZXRfY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxODc2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xuZHJpdmVycy92aG9zdC9uZXQuYy0xODc3LVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xODk0PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X25ldF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODk3LVx0XHR2aG9zdF9uZXRfZW5hYmxlX3pjb3B5KFZIT1NUX05FVF9WUV9UWCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4OTg6XHRyZXR1cm4gbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9uZXRfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4OTktfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzODY9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYzLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ3Nz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9zY3NpX3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDc4LXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0Nzk6XHRyZXR1cm4gbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4MC19XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTktXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNjA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdGVzdF9mb3BzID0ge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzYxLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTUzMz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2Ny1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2OS1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05NjQ9c3RhdGljIF9fcG9sbF90IHZob3N0X3Zzb2NrX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NzEtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Zzb2NrX2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTczLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTk5MD1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF92c29ja19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTk5OC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5OTk6XHRyZXQgPSBtaXNjX3JlZ2lzdGVyKFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgQW5hbHlzaXMgb2YgdGhlIHZob3N0LXNjc2kgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyBgdmhvc3Qtc2NzaWAgaGFzIGJlZW4gcmVnaXN0ZXJlZC4gVGhlIGtlcm5lbCBpcyB1c2luZyBgbWlzY19yZWdpc3RlcigmYW1wO3Zob3N0X3Njc2lfbWlzYylgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgbWlzY2VsbGFuZW91cyBkZXZpY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIGl0cyByb2xlLiBXZSBoYXZlIGEgcmVnaXN0cmF0aW9uLCBzbyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4KCk5vdywgaG93IGFyZSBMVU5zIGNvbmZpZ3VyZWQ/IEFoYSwgbG9va3MgbGlrZSB3ZSBoYXZlIGEgY291cGxlIG9mIG9wdGlvbnMuIEl0JiMzOTtzIGVpdGhlciBnb2luZyB0byBiZSB1c2luZyB0aGUgc3RhbmRhcmQgYHRhcmdldC9jb25maWdmc2AgbWV0aG9kLCBvciwgYW5kIHRoaXMgaXMgbW9yZSBpbnRlcmVzdGluZyBmcm9tIGFuIEkvTyBwYXRoIHBlcnNwZWN0aXZlLCB0aGV5JiMzOTtyZSBsZWFuaW5nIG9uIHRoZSB2aXJ0aW8tc2NzaSB2aG9zdCYjMzk7cyBpb2N0bHMsIHNwZWNpZmljYWxseSBgVkhPU1RfU0NTSV9TRVRfRU5EUE9JTlRgIGFuZCBgVkhPU1RfU0NTSV9DTEVBUl9FTkRQT0lOVGAuIFRoYXQgc2lnbmFscyBhIG1vcmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdGhlIHZob3N0IGxheWVyIGZvciBlbmRwb2ludCBtYW5hZ2VtZW50LgoKVGltZSB0byBkaXZlIGRlZXBlci4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYHZob3N0X3Njc2lfbWlzY2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gcmVnaXN0ZXJlZCwgd2hhdCB0aGUgaW50ZXJmYWNlIGxvb2tzIGxpa2UsIGFuZCB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9ucyBpdCYjMzk7cyBzdXBwb3J0aW5nLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGxpZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfbWlzYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDcxOnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF9zY3NpX21pc2MgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcyLVx0TUlTQ19EWU5BTUlDX01JTk9SLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3OC17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDc5Olx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODAtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0ODI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kZXJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0ODQ6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIHZob3N0L3Njc2kuYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMgb2YgYHZob3N0L3Njc2kuY2AsIHdoaWNoIGxpa2VseSBtZWFucyBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBkb2VzIHRoaXMgcGllY2UgZml0IGludG8gdGhlIGxhcmdlciB2aG9zdCBmcmFtZXdvcmssIGFuZCBTQ1NJIHNwZWNpZmljYWxseT8mIzM0OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgYGNvbmZpZ2Agc3ltYm9scyB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZSBgdmhvc3Qvc2NzaS5jYCwgb3IgcG90ZW50aWFsbHkgaW5kaXJlY3RseSB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMgbGlrZSB0aGUgdmhvc3QgY29yZSBvciBTQ1NJIHN1YnN5c3RlbSBvcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSB0cmlzdGF0ZSBvciBib29sZWFuIHNldHRpbmdzIHRoYXQgbWlnaHQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgbW9kdWxlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhlIGB2aG9zdC9zY3NpLmNgIG1vZHVsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzLiBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIG9wdGlvbmFsIGZlYXR1cmVzIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY29udHJvbGxlZCBieSBLY29uZmlnIHNldHRpbmdzIHdpdGhpbiB0aGlzIGZpbGU/IFRoaXMgc2VhcmNoIHdpbGwgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCB0byBnZXQgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIHdpbGwgYWxzbyBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhpcyBtb2R1bGUsIHNvIEkgYW0gcHJlcGFyZWQgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gd2l0aCBhbnkgZGVmYXVsdCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTI0MiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTUyLVx0aGVscFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjUzOlx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NC1cdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcbi0tXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlPTM9dmhvc3RfbmV0LXkgOj0gbmV0Lm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNC1cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgJiM0Mzs9IHZob3N0X3Njc2kub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo2OnZob3N0X3Njc2kteSA6PSBzY3NpLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01My1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU0OnN0YXRpYyB1bnNpZ25lZCBpbnQgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250ID0gVkhPU1RfU0NTSV9QUkVBTExPQ19TR0xTO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNTUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Ni0jaWZkZWYgQ09ORklHX0FSQ0hfTk9fU0dfQ0hBSU5cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU3OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01OC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMtI2Vsc2VcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzgtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3OTpcdHZob3N0X3Njc2lfaW5saW5lX3NnX2NudCA9IGNudDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTgwLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NDpzdGF0aWMgaW50IHZob3N0X3Njc2lfZ2V0X2lubGluZV9zZ19jbnQoY2hhciAqYnVmLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODUtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODYte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6ODc6XHRyZXR1cm4gc3ByaW50ZihidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtODgtfVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5MDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250X29wID0ge1xuZHJpdmVycy92aG9zdC9zY3NpLmM6OTE6XHQuZ2V0ID0gdmhvc3Rfc2NzaV9nZXRfaW5saW5lX3NnX2NudCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjkyOlx0LnNldCA9IHZob3N0X3Njc2lfc2V0X2lubGluZV9zZ19jbnQsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05My19O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtOTQtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5NTptb2R1bGVfcGFyYW1fY2IoaW5saW5lX3NnX2NudCwgXHUwMDI2dmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250X29wLCBOVUxMLCAwNjQ0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk2LU1PRFVMRV9QQVJNX0RFU0MoaW5saW5lX3NnX2NudCwgXCYjMzQ7U2V0IHRoZSBudW1iZXIgb2Ygc2NhdHRlcmxpc3QgZW50cmllcyB0byBwcmUtYWxsb2NhdGUuIFRoZSBkZWZhdWx0IGlzIDIwNDguXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDQ6c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA1LVx0LyogV2FpdCBmb3IgdGhlIGZsdXNoIG9wZXJhdGlvbiB0byBmaW5pc2ggKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMTAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMTE6c3RydWN0IHZob3N0X3Njc2lfY21kIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMi1cdC8qIERlc2NyaXB0b3IgZnJvbSB2aG9zdF9nZXRfdnFfZGVzYygpIGZvciB2aXJ0X3F1ZXVlIHNlZ21lbnQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDMtXHQvKiBVc2VkIHRvIHRyYWNrIGluZmxpZ2h0IGNtZCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ0Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ1LX07XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDYtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDc6c3RydWN0IHZob3N0X3Njc2lfbmV4dXMge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ4LVx0LyogUG9pbnRlciB0byBUQ00gc2Vzc2lvbiBmb3IgSV9UIE5leHVzICovXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTUyOnN0cnVjdCB2aG9zdF9zY3NpX3RwZyB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTMtXHQvKiBWaG9zdCBwb3J0IHRhcmdldCBwb3J0YWwgZ3JvdXAgdGFnIGZvciBUQ00gKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTYtXHRpbnQgdHZfdHBnX3BvcnRfY291bnQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTc6XHQvKiBVc2VkIGZvciB2aG9zdF9zY3NpIGRldmljZSByZWZlcmVuY2UgdG8gdHBnX25leHVzLCBwcm90ZWN0ZWQgYnkgdHZfdHBnX211dGV4ICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTgtXHRpbnQgdHZfdHBnX3Zob3N0X2NvdW50O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2MC1cdGludCB0dl9mYWJyaWNfcHJvdF90eXBlO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYxOlx0LyogbGlzdCBmb3Igdmhvc3Rfc2NzaV9saXN0ICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjItXHRzdHJ1Y3QgbGlzdF9oZWFkIHR2X3RwZ19saXN0O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NS1cdC8qIFBvaW50ZXIgdG8gdGhlIFRDTSBWSG9zdCBJX1QgTmV4dXMgZm9yIHRoaXMgVFBHIGVuZHBvaW50ICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjY6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqdHBnX25leHVzO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY3Olx0LyogUG9pbnRlciBiYWNrIHRvIHZob3N0X3Njc2lfdHBvcnQgKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2ODpcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2OTpcdC8qIFJldHVybmVkIGJ5IHZob3N0X3Njc2lfbWFrZV90cGcoKSAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTcwLVx0c3RydWN0IHNlX3BvcnRhbF9ncm91cCBzZV90cGc7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNzE6XHQvKiBQb2ludGVyIGJhY2sgdG8gdmhvc3Rfc2NzaSwgcHJvdGVjdGVkIGJ5IHR2X3RwZ19tdXRleCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTcyOlx0c3RydWN0IHZob3N0X3Njc2kgKnZob3N0X3Njc2k7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzMtfTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE3NC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE3NTpzdHJ1Y3Qgdmhvc3Rfc2NzaV90cG9ydCB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzYtXHQvKiBTQ1NJIHByb3RvY29sIHRoZSB0cG9ydCBpcyBwcm92aWRpbmcgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODEtXHRjaGFyIHRwb3J0X25hbWVbVkhPU1RfU0NTSV9OQU1FTEVOXTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MjpcdC8qIFJldHVybmVkIGJ5IHZob3N0X3Njc2lfbWFrZV90cG9ydCgpICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODMtXHRzdHJ1Y3Qgc2Vfd3duIHRwb3J0X3d3bjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODY6c3RydWN0IHZob3N0X3Njc2lfZXZ0IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4Ny1cdC8qIGV2ZW50IHRvIGJlIHNlbnQgdG8gZ3Vlc3QgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTM9ZW51bSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk5LS8qIE5vdGU6IGNhbiYjMzk7dCBzZXQgVklSVElPX0ZfVkVSU0lPTl8xIHlldCwgc2luY2UgdGhhdCBpbXBsaWVzIEFOWV9MQVlPVVQuICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMDA6c3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwMS1cdFZIT1NUX0ZFQVRVUkVTLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwNS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIwNjojZGVmaW5lIFZIT1NUX1NDU0lfRkVBVFVSRVMgVkhPU1RfRkVBVFVSRVNfVTY0KHZob3N0X3Njc2lfYml0cywgMClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTEtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTI6c3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxMzptb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNC1NT0RVTEVfUEFSTV9ERVNDKG1heF9pb192cXMsIFwmIzM0O1NldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LlwmIzM0Oyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTY6c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNy1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnE7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTg6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTktXHQvKlxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyMy1cdCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjI0Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgaW5mbGlnaHRzWzJdO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjI1LVx0Lypcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjktXHRpbnQgaW5mbGlnaHRfaWR4O1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjMwOlx0c3RydWN0IHZob3N0X3Njc2lfY21kICpzY3NpX2NtZHM7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzEtXHRzdHJ1Y3Qgc2JpdG1hcCBzY3NpX3RhZ3M7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM4LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjM5OnN0cnVjdCB2aG9zdF9zY3NpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0MDpcdC8qIFByb3RlY3RlZCBieSB2aG9zdF9zY3NpLVx1MDAzZWRldi5tdXRleCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQxOlx0c3RydWN0IHZob3N0X3Njc2lfdHBnICoqdnNfdHBnO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQyLVx0Y2hhciB2c192aG9zdF93d3BuW1RSQU5TUE9SVF9JUU5fTEVOXTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQtXHRzdHJ1Y3Qgdmhvc3RfZGV2IGRldjtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NTpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqdnFzO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKipvbGRfaW5mbGlnaHQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDctXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU2LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjU3OnN0cnVjdCB2aG9zdF9zY3NpX3RtZiB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTgtXHRzdHJ1Y3Qgdmhvc3Rfd29yayB2d29yaztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1OS1cdHN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3JrO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjYwOlx0c3RydWN0IHZob3N0X3Njc2kgKnZob3N0O1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjYxOlx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNjItXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjY0LVx0dTggc2NzaV9yZXNwO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjY1Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjY2LVx0c3RydWN0IGlvdmVjIHJlc3BfaW92O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI3OS0gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI4MDpzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHgge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjgxLVx0aW50IGhlYWQ7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjkwLS8qXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTE6ICogR2xvYmFsIG11dGV4IHRvIHByb3RlY3Qgdmhvc3Rfc2NzaSBUUEcgbGlzdCBmb3Igdmhvc3QgSU9DVExzIGFuZCBMSU9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI5Mi0gKiBjb25maWdmcyBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTMtICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTQ6c3RhdGljIERFRklORV9NVVRFWCh2aG9zdF9zY3NpX211dGV4KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5NTpzdGF0aWMgTElTVF9IRUFEKHZob3N0X3Njc2lfbGlzdCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTYtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kb25lX2luZmxpZ2h0KHN0cnVjdCBrcmVmICprcmVmKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk4LXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5OTpcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwMC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMwMTpcdGluZmxpZ2h0ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0LCBrcmVmKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwMi1cdGNvbXBsZXRlKFx1MDAyNmluZmxpZ2h0LVx1MDAzZWNvbXApO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwNC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMwNTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2luaXRfaW5mbGlnaHQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzA2Olx0XHRcdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICpvbGRfaW5mbGlnaHRbXSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwNy17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMDg6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqbmV3X2luZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMzA5LVx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzMxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzMyOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMzM6dmhvc3Rfc2NzaV9nZXRfaW5mbGlnaHQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMzQte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MzM1Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MzM2Olx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMzctXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMzg6XHRzdnEgPSBjb250YWluZXJfb2YodnEsIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMzM5LVx0aW5mbGlnaHQgPSBcdTAwMjZzdnEtXHUwMDNlaW5mbGlnaHRzW3N2cS1cdTAwM2VpbmZsaWdodF9pZHhdO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM0NC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM0NTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3B1dF9pbmZsaWdodChzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDYte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MzQ3Olx0a3JlZl9wdXQoXHUwMDI2aW5mbGlnaHQtXHUwMDNla3JlZiwgdmhvc3Rfc2NzaV9kb25lX2luZmxpZ2h0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM0OC19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNTA6c3RhdGljIGludCB2aG9zdF9zY3NpX2NoZWNrX3RydWUoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzUxLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNTQtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNTU6c3RhdGljIGNoYXIgKnZob3N0X3Njc2lfZ2V0X2ZhYnJpY193d24oc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzU2LXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1NzpcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnID0gY29udGFpbmVyX29mKHNlX3RwZyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1ODpcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZywgc2VfdHBnKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1OTpcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydCA9IHRwZy1cdTAwM2V0cG9ydDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2MC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNjMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjQ6c3RhdGljIHUxNiB2aG9zdF9zY3NpX2dldF90cGd0KHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2NS17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjY6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjc6XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNjgtXHRyZXR1cm4gdHBnLVx1MDAzZXRwb3J0X3RwZ3Q7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzcwLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzcxOnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jaGVja19wcm90X2ZhYnJpY19vbmx5KHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM3Mi17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNzM6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNzQ6XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNzUtXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzc4LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mzc5OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jb3B5X2NtZF9sb2coc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozODA6XHRcdFx0XHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM4MS1cdFx0XHRcdCAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zOTctXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozOTg6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zOTktXHRcdFx0XHQgc3RydWN0IHZob3N0X2xvZyAqbG9nLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQxNS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQxNjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00MTcte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NDE4Olx0c3RydWN0IHZob3N0X3Njc2lfY21kICp0dl9jbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDE5Olx0XHRcdFx0c3RydWN0IHZob3N0X3Njc2lfY21kLCB0dmNfc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMDpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKHR2X2NtZC1cdTAwM2V0dmNfdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MjE6XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUsIHZxKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMjpcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHN2cS1cdTAwM2V2cztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMzpcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodCA9IHR2X2NtZC1cdTAwM2VpbmZsaWdodDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyNC1cdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU0LVx0c2JpdG1hcF9jbGVhcl9iaXQoXHUwMDI2c3ZxLVx1MDAzZXNjc2lfdGFncywgc2VfY21kLVx1MDAzZW1hcF90YWcpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NDU1Olx0dmhvc3Rfc2NzaV9wdXRfaW5mbGlnaHQoaW5mbGlnaHQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU2LX1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ1Ny1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ1ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ1OS17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NjA6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQgPSB0bWYtXHUwMDNlaW5mbGlnaHQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NjEtXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDY2LVx0a2ZyZWUodG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ2NzpcdHZob3N0X3Njc2lfcHV0X2luZmxpZ2h0KGluZmxpZ2h0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ2OC19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NjktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NzA6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kcm9wX2NtZHMoc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzEte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcyOlx0c3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsICp0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDczLVx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzYtXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgdCwgbGxub2RlLCB0dmNfY29tcGxldGlvbl9saXN0KVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDc3Olx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzgtfVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDc5LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDgwOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDgxLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ4Mi1cdGlmIChzZV9jbWQtXHUwMDNlc2VfY21kX2ZsYWdzIFx1MDAyNiBTQ0ZfU0NTSV9UTVJfQ0RCKSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODM6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3RtZiAqdG1mID0gY29udGFpbmVyX29mKHNlX2NtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4NDpcdFx0XHRcdFx0c3RydWN0IHZob3N0X3Njc2lfdG1mLCBzZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDg1LVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ4Ny1cdH0gZWxzZSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4OTpcdFx0XHRcdFx0c3RydWN0IHZob3N0X3Njc2lfY21kLCB0dmNfc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ5MDpcdFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSAgY29udGFpbmVyX29mKGNtZC1cdTAwM2V0dmNfdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTE6XHRcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDkyLVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5NC1cdFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnN2cS1cdTAwM2V2cSwgXHUwMDI2c3ZxLVx1MDAzZWNvbXBsZXRpb25fd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTU6XHRcdFx0dmhvc3Rfc2NzaV9kcm9wX2NtZHMoc3ZxKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5Ni1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTgtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTk6c3RhdGljIGludCB2aG9zdF9zY3NpX3dyaXRlX3BlbmRpbmcoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTAwLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1MDY6c3RhdGljIGludCB2aG9zdF9zY3NpX3F1ZXVlX2RhdGFfaW4oc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTEtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1MTI6c3RhdGljIGludCB2aG9zdF9zY3NpX3F1ZXVlX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUxNy1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTkte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NTIwOlx0c3RydWN0IHZob3N0X3Njc2lfdG1mICp0bWYgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MjEtXHRcdFx0XHRcdFx0ICBzZV9jbWQpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUyNi1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUyNzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2Fib3J0ZWRfdGFzayhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Mjgte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUzMS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzMjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2ZyZWVfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MzMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUzNy1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzODpzdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzOTp2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDAtXHRcdCAgICAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTQyLVx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NTQzOlx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDQtXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTUxLVx0aWYgKCFldnQpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU1MjpcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgdmhvc3Rfc2NzaV9ldnRcXG5cJiMzNDspO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNTUzLVx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NjMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1NjQ6c3RhdGljIGludCB2aG9zdF9zY3NpX2NoZWNrX3N0b3BfZnJlZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NjUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTU2OT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTcwOnZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU3MS17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjI3LVx0ZWxzZVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjI4Olx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhdWx0ZWQgb24gdmhvc3Rfc2NzaV9zZW5kX2V2ZW50XFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYyOS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzMDpcdHZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMxLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzMtLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzUte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM2Olx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM3LVx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDEtXHRcdGlmICghZHJvcClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0MjpcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjQzOlx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQ0LVx0fVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0Ni1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0NzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0OC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUxLVx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTI6XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1My1cdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjU2OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTcte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjU4Olx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU5LVx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjYwOlx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2MS19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjItXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NjM6c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2NC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjkyLSAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjkzOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfY21kX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02OTQte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6Njk1Olx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2Yod29yayxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY5NjpcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgY29tcGxldGlvbl93b3JrKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY5Ny1cdHN0cnVjdCB2aXJ0aW9fc2NzaV9jbWRfcmVzcCB2X3JzcDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY5ODpcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCAqdDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY5OS1cdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzE1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzE2Olx0XHRpZiAoY21kLVx1MDAzZXJlYWRfaXRlciBcdTAwMjZcdTAwMjYgdmhvc3Rfc2NzaV9jb3B5X3NnbF90b19pb3YoY21kKSkge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNzE3LVx0XHRcdHZfcnNwLnJlc3BvbnNlID0gVklSVElPX1NDU0lfU19CQURfVEFSR0VUO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTczOC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjczOTpcdFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUoY21kLVx1MDAzZXR2Y192cSwgY21kLVx1MDAzZXR2Y19sb2csXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDAtXHRcdFx0XHQgICAgIGNtZC1cdTAwM2V0dmNfbG9nX251bSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDEtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NDI6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHNlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDMtXHR9XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzUwLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzUxOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKlxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzUyOnZob3N0X3Njc2lfZ2V0X2NtZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IHNjc2lfdGFnKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzUzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1NDpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKHZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzU1Olx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUsIHZxKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1NjpcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNzU3LVx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsICpwcm90X3NnbDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NzUtXHRjbWQtXHUwMDNldHZjX3NlX2NtZC5tYXBfdGFnID0gdGFnO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6Nzc2Olx0Y21kLVx1MDAzZWluZmxpZ2h0ID0gdmhvc3Rfc2NzaV9nZXRfaW5mbGlnaHQodnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNzc3LVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc4MC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc4MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JldmVydF9tYXBfaW92X3RvX3NnbChzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03ODItXHRcdFx0XHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJyLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTgwNz1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4MDg6dmhvc3Rfc2NzaV9tYXBfdG9fc2dsKHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODA5LVx0XHQgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODEzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjgxNDpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKGNtZC1cdTAwM2V0dmNfdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4MTU6XHRcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtODE2LVx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IHN2cS1cdTAwM2V1cGFnZXM7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODU5LXJldmVydF9pdGVyX2dldF9wYWdlczpcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjg2MDpcdHZob3N0X3Njc2lfcmV2ZXJ0X21hcF9pb3ZfdG9fc2dsKGl0ZXIsICpzZ2wsIHNnKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg2MS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz04NzM9c3RhdGljIGludFxuZHJpdmVycy92aG9zdC9zY3NpLmM6ODc0OnZob3N0X3Njc2lfY2FsY19zZ2xzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IGJ5dGVzLCBpbnQgbWF4X3NnbHMpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04NzUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTg5Mz1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4OTQ6dmhvc3Rfc2NzaV9jb3B5X2lvdl90b19zZ2woc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg5NS1cdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNnX3RhYmxlLCBpbnQgc2dfY291bnQsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9OTUzPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk1NDp2aG9zdF9zY3NpX21hcF9pb3ZfdG9fc2dsKHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NTUtXHRcdFx0ICBzdHJ1Y3Qgc2dfdGFibGUgKnNnX3RhYmxlLCBpbnQgc2dfY291bnQsIGJvb2wgaXNfcHJvdClcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NjAtXHR3aGlsZSAoaW92X2l0ZXJfY291bnQoaXRlcikpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk2MTpcdFx0cmV0ID0gdmhvc3Rfc2NzaV9tYXBfdG9fc2dsKGNtZCwgaXRlciwgc2dfdGFibGUsIFx1MDAyNnNnLCBpc19wcm90KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk2Mi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuZHJpdmVycy92aG9zdC9zY3NpLmM6OTYzOlx0XHRcdHZob3N0X3Njc2lfcmV2ZXJ0X21hcF9pb3ZfdG9fc2dsKGl0ZXIsIHNnX3RhYmxlLVx1MDAzZXNnbCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk2NC1cdFx0XHRcdFx0XHRcdCBzZyk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9OTcyPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk3Mzp2aG9zdF9zY3NpX21hcGFsKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NzQtXHRcdCBzaXplX3QgcHJvdF9ieXRlcywgc3RydWN0IGlvdl9pdGVyICpwcm90X2l0ZXIsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTc5LVx0aWYgKHByb3RfYnl0ZXMpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk4MDpcdFx0c2dsX2NvdW50ID0gdmhvc3Rfc2NzaV9jYWxjX3NnbHMocHJvdF9pdGVyLCBwcm90X2J5dGVzLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTgxLVx0XHRcdFx0XHRcdCBWSE9TVF9TQ1NJX1BSRUFMTE9DX1BST1RfU0dMUyk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTk1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTk2Olx0XHRyZXQgPSB2aG9zdF9zY3NpX21hcF9pb3ZfdG9fc2dsKGNtZCwgcHJvdF9pdGVyLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTk3LVx0XHRcdFx0XHRcdFx1MDAyNmNtZC1cdTAwM2Vwcm90X3RhYmxlLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMDUtXHR9XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDA2Olx0c2dsX2NvdW50ID0gdmhvc3Rfc2NzaV9jYWxjX3NnbHMoZGF0YV9pdGVyLCBkYXRhX2J5dGVzLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAwNy1cdFx0XHRcdFx0IFZIT1NUX1NDU0lfUFJFQUxMT0NfU0dMUyk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwMjE6XHRyZXQgPSB2aG9zdF9zY3NpX21hcF9pb3ZfdG9fc2dsKGNtZCwgZGF0YV9pdGVyLCBcdTAwMjZjbWQtXHUwMDNldGFibGUsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDIyLVx0XHRcdFx0XHRjbWQtXHUwMDNldHZjX3NnbF9jb3VudCwgZmFsc2UpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMy1cdGlmIChyZXQgPT0gLUVJTlZBTClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwMjQ6XHRcdHJldCA9IHZob3N0X3Njc2lfY29weV9pb3ZfdG9fc2dsKGNtZCwgZGF0YV9pdGVyLCBcdTAwMjZjbWQtXHUwMDNldGFibGUsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDI1LVx0XHRcdFx0XHRcdCBjbWQtXHUwMDNldHZjX3NnbF9jb3VudCwgZGF0YV9kaXIpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMzMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDM0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV90b190Y21fYXR0cihpbnQgYXR0cilcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMzUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNTAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDUxOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdGFyZ2V0X3F1ZXVlX2NtZChzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqbmV4dXMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDUyOlx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNTMtXHRcdFx0XHRcdHVuc2lnbmVkIGNoYXIgKmNkYiwgdTE2IGx1bixcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDczLVx0dGFyZ2V0X2luaXRfY21kKHNlX2NtZCwgbmV4dXMtXHUwMDNldHZuX3NlX3Nlc3MsIFx1MDAyNmNtZC1cdTAwM2V0dmNfc2Vuc2VfYnVmWzBdLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTA3NDpcdFx0XHRsdW4sIGV4cF9kYXRhX2xlbiwgdmhvc3Rfc2NzaV90b190Y21fYXR0cih0YXNrX2F0dHIpLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA3NS1cdFx0XHRkYXRhX2RpciwgVEFSR0VUX1NDRl9BQ0tfS1JFRik7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTA4NT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTA4Njp2aG9zdF9zY3NpX3NlbmRfc3RhdHVzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDg3Olx0XHQgICAgICAgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YywgdTggc3RhdHVzKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA4OC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTExMT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTExMjp2aG9zdF9zY3NpX3NlbmRfYmFkX3RhcmdldChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMTEzLVx0XHRcdCAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTExNDpcdFx0XHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHggKnZjLCBpbnQgdHlwZSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMTUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTExNDk9c3RhdGljIGludFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTE1MDp2aG9zdF9zY3NpX2dldF9kZXNjKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMTUxOlx0XHQgICAgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExNTItXHRcdCAgICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMjAzPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMDQ6dmhvc3Rfc2NzaV9jaGtfc2l6ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyMDUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyMjE9c3RhdGljIGludFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTIyMjp2aG9zdF9zY3NpX2dldF9yZXEoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2aG9zdF9zY3NpX2N0eCAqdmMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjIzOlx0XHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKip0cGdwKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIyNC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIzMy1cdH0gZWxzZSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjM0Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKip2c190cGcsICp0cGcgPSBOVUxMO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIzNS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMjUyPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyNTM6dmhvc3Rfc2NzaV9zZXR1cF9yZXNwX2lvdnMoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZlYyAqaW5faW92cyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyNTQtXHRcdFx0ICAgdW5zaWduZWQgaW50IGluX2lvdnNfY250KVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyOTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyOTQ6dmhvc3Rfc2NzaV9oYW5kbGVfdnEoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyOTUte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTI5NjpcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqKnZzX3RwZywgKnRwZztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyOTctXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3JlcSB2X3JlcTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyOTgtXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3JlcV9waSB2X3JlcV9waTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyOTk6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqbmV4dXM7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMzAwOlx0c3RydWN0IHZob3N0X3Njc2lfY3R4IHZjO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTMwMTpcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTMwMi1cdHN0cnVjdCBpb3ZfaXRlciBpbl9pdGVyLCBwcm90X2l0ZXIsIGRhdGFfaXRlcjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMzMwLVx0ZG8ge1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTMzMTpcdFx0cmV0ID0gdmhvc3Rfc2NzaV9nZXRfZGVzYyh2cywgdnEsIFx1MDAyNnZjLCB2cV9sb2csIFx1MDAyNmxvZ19udW0pO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZIT1NUX1NDU0kgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBCZWZvcmUgSSBzdGFydCBkZWJ1Z2dpbmcgYW55dGhpbmcgb3IgbWFraW5nIGFueSBjaGFuZ2VzLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVuZGVkIGJlaGF2aW9yIG9mIGBDT05GSUdfVkhPU1RfU0NTSWAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHZob3N0LCBhbmQgaXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBmaW5kOgoKKiAgICoqUHJlcmVxdWlzaXRlczoqKiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBgQ09ORklHX1ZIT1NUX1NDU0lgIHRvIGV2ZW4gbWFrZSBzZW5zZT8gQXJlIHRoZXJlIHNwZWNpZmljIFNDU0kgY29udHJvbGxlciBvcHRpb25zIHRoYXQgbXVzdCBiZSBzZWxlY3RlZCBmaXJzdD8gTWF5YmUgc29tZSBzcGVjaWZpYyB2aXJ0aW8gZmVhdHVyZXM/CiogICAqKkNvbnRleHQ6KiogV2hhdCBkb2VzIGBDT05GSUdfVkhPU1RfU0NTSWAgYWN0dWFsbHkgKmRvKj8gV2hhdCYjMzk7cyB0aGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbj8gRG9lcyBpdCBwcm92aWRlIGEgdmhvc3QgaW50ZXJmYWNlIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBzdG9yYWdlLCBvciBpcyBpdCBtb3JlIGdlbmVyaWM/CiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGVyZSYjMzk7cyBhIGhlbHBmdWwgZGVzY3JpcHRpb24gb3IgZXZlbiBhIGxpbmsgdG8gZnVydGhlciBkb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGJvbnVzLCBzYXZlcyBtZSBmcm9tIGhhdmluZyB0byBiYWNrdHJhY2sgYW5kIGRpZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSBpbW1lZGlhdGVseS4gSSB3YW50IHRvIGhhdmUgYSBob2xpc3RpYyBwaWN0dXJlIGhlcmUuCgpGcm9tIHRoZXJlLCBJIGNhbiBidWlsZCB1cCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gd29yay4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZGV2ZWxvcCBhIHBsYW4gZm9yIHRlc3Rpbmcgb3IgbW9kaWZpY2F0aW9uLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxuICA0MTpcdFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICA0NDpcdFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDQ5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNTA6XHRcdHNlbGVjdCBTR19QT09MXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXG4gIDU0Olx0XHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFZIT1NUX1ZTT0NLXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDU5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNjA6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDYxOlx0XHRkZWZhdWx0IG5cbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXG4gIDY0Olx0XHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXG4gIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZob3N0X3Njc2lgIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBDT05GSUdfVkhPU1RfU0NTSWAgcmVsaWVzIG9uIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gRmlyc3QgcXVlc3Rpb246IGlzIGB2aG9zdF9zY3NpYCBzb21ldGhpbmcgc3l6a2FsbGVyIGNhbiBldmVuICpyZWFjaCo/IFllcywgaXQgbG9va3MgbGlrZSBpdCBvcGVucyBgL2Rldi92aG9zdC1zY3NpYCBhbmQgdXNlcyB0aGUgc3RhbmRhcmQgaW9jdGxzIGxpa2UgYFZIT1NUX1NFVF9PV05FUmAsIGBWSE9TVF9TQ1NJX1NFVF9FTkRQT0lOVGAsIGFuZCBzbyBvbiwgYWxvbmdzaWRlIHRhcmdldCBjb3JlIGNvbmZpZ2ZzIGF0IGAvc3lzL2tlcm5lbC9jb25maWcvdGFyZ2V0Ly4uLmAuIEdvb2QuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIGlmIHN5emthbGxlciBoYXMgdGhlIG5lY2Vzc2FyeSBkZXNjcmlwdGlvbnMgZm9yIHRob3NlIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGAvZGV2L3Zob3N0LXNjc2lgIGFuZCB0aGUgdmhvc3QgaW9jdGxzIGluIGdlbmVyYWwuIEFoLCBnb29kIG5ld3MsIHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBpdCEgRXZlbiBiZXR0ZXIsIHRoZSBjcml0ZXJpYSBleHBsaWNpdGx5IG1lbnRpb25zIHZpcnR1YWwgYnVzZXMgbGlrZSB2aXJ0aW8g4oCTIGFuZCB0aGF0IGluY2x1ZGVzIGB2aG9zdF9zY3NpYCBieSBpbXBsaWNhdGlvbi4gU28sIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGluIHRoZSAmIzM0O3JlYWNoYWJsZSBkcml2ZXImIzM0OyBjYXRlZ29yeSBhcyBwZXIgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4KCk5vdywgdW5kZXIgU2VjdGlvbiAzLCB0aGUgY3JpdGVyaWEgc3RhdGUgdGhhdCB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgYW5kIG9mIGNvdXJzZSwgcmVhY2hhYmxlIGRyaXZlcnMuIFRoaXMgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIGEgcmVhY2hhYmxlIGRyaXZlci4KCk5vdywgZGlnZ2luZyBkZWVwZXIgaW50byB0aGlzIHNwZWNpZmljIHBhdGNoOiBpdCBtb2RpZmllcyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGVzc2VudGlhbGx5IHNwbGl0dGluZyBvdXQgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGlzIGludHJpZ3VpbmcuIEl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBjaGFuZ2UuIFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZT8KClRpbWUgdG8gY2hlY2sgdGhlIGdpdCBsb2cuIEkgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgY29udGV4dC4uLiB0aGUgZnVsbCBoaXN0b3J5IG9mIHRoZSBjaGFuZ2UuIExldCYjMzk7cyBsb29rIGF0IGBnaXQgbG9nIC0xYCBvciBsaW5lcyA2MzAtNjYwIG9mIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBoYXBwZW5lZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHJlZmFjdG9yaW5nIHRoYXQgZXhwb3NlcyBuZXcgcG90ZW50aWFsIGZ1enppbmcgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcbiA2MzE6XHR9XG4gNjMyOlx0XG4gNjMzOlx0LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuIDYzNDpcdHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4gNjM1Olx0e1xuIDYzNjpcdFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xuIDYzNzpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbiA2Mzg6XHRcbiA2Mzk6XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gNjQwOlx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4gNjQxOlx0XHRcdGlmICghZHJvcClcbiA2NDI6XHRcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuIDY0MzpcdFx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuIDY0NDpcdFx0fVxuIDY0NTpcdH1cbiA2NDY6XHRcbiA2NDc6XHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbiA2NDg6XHR7XG4gNjQ5Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4gNjUwOlx0XG4gNjUxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiA2NTI6XHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIDY1MzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiA2NTQ6XHR9XG4gNjU1Olx0XG4gNjU2Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiA2NTc6XHR7XG4gNjU4Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXG4gNjU5Olx0XHRcdFx0XHRcdCAgICAgdnNfZXZlbnRfd29yayk7XG4gNjYwOlx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xuIDY2MTpcdH1cbiA2NjI6XHRcbiA2NjM6XHRzdGF0aWMgaW50IHZob3N0X3Njc2lfY29weV9zZ2xfdG9faW92KHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kKVxuIDY2NDpcdHtcbiA2NjU6XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlciA9IGNtZC1cdTAwM2VyZWFkX2l0ZXI7XG4gNjY2Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuIDY2NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gNjY4Olx0XHRzaXplX3QgbGVuO1xuIDY2OTpcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbmQgRml4aW5nIGEgUG90ZW50aWFsIFJlY3Vyc2l2ZSBNdXRleCBEZWFkbG9jayBpbiB2aG9zdC1zY3NpKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgZGVhZGxvY2sgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBTcGVjaWZpY2FsbHksIHRoZSBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCBzZWVtcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgZXZlbnRzIHRvIHRoZSB2aXJ0dWFsIFNDU0kgYmFja2VuZC4gSXQgYWxsb2NhdGVzIGFuIGB2aG9zdF9zY3NpX2V2dGAgc3RydWN0dXJlLCBwb3B1bGF0ZXMgaXQgd2l0aCBldmVudCBkYXRhIChpbmNsdWRpbmcgTFVOIGluZm9ybWF0aW9uIHdoZW4gYXBwbGljYWJsZSksIGFuZCBhZGRzIGl0IHRvIGFuIGV2ZW50IGxpc3QuIENydWNpYWxseSwgaXQgdGhlbiBjYWxscyBgdmhvc3RfdnFfd29ya19xdWV1ZWAgdG8gc2NoZWR1bGUgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQuCgpUaGUgY3JpdGljYWwgaXNzdWUgYXJpc2VzIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgICpmYWlscyouIFRoaXMgY2FuIGhhcHBlbiBmb3IgdmFyaW91cyByZWFzb25zOiB0aGUgd29yayBxdWV1ZSBjb3VsZCBiZSBzdG9wcGVkLCBub3QgcnVubmluZywgb3IgdGhlcmUgY291bGQgYmUgc29tZSBvdGhlciByZXNvdXJjZSBjb25zdHJhaW50LiBJbiB0aGUgb3JpZ2luYWwgY29kZSwgaWYgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxlZCwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKWAgd2FzIGNhbGxlZC4gVGhlIHByb2JsZW0/IGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2FzIHRyeWluZyB0byBhY3F1aXJlIGB2cS0mZ3Q7bXV0ZXhgIQoKTG9va2luZyBhdCB0aGUgY29udGV4dCwgYW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcsIEkgc2VlIHRoYXQgdGhpcyBtdXRleCBpcyBhbHJlYWR5ICpoZWxkKiBieSB0aGUgY2FsbGVyIG9mIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCEgQ2FsbHMgc3VjaCBhcyB0aG9zZSBtYWRlIGJ5IGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBsb2NrIHRoZSB2cSBtdXRleCBiZWZvcmUgY2FsbGluZyBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFNvLCBpZiB0aGUgd29yayBxdWV1ZSBmYWlscywgYW5kIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdHJpZXMgdG8gcmVhY3F1aXJlIHRoZSBzYW1lIG11dGV4LCB3ZSBoYXZlIGEgcmVjdXJzaXZlIG11dGV4IGRlYWRsb2NrLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBlcnJvciwgYW5kIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyB0aGF0LgoKVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IEluc3RlYWQgb2YgY2FsbGluZyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCBkb2VzIHRoZSBsb2NrLCB3ZSBjYWxsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgcmVhY3F1aXJpbmcgdGhlIGxvY2sgYW5kIHByZXZlbnRzIHRoZSBkZWFkbG9jay4KCkkmIzM5O2QgYWxzbyBsaWtlIHRvIG1ha2UgYSBxdWljayBub3RlIHRoYXQgdGhlIExVTiBwb3B1bGF0aW9uIGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBsb29rcyBhIGxpdHRsZSBjb252b2x1dGVkLiBUaGVyZSYjMzk7cyBhIGNvbW1lbnQgYWJvdXQgc2hhcmluZyBzZXR1cCBjb2RlIHdpdGggYHZpcnRpby1zY3NpLmtvYCwgc28gcGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBjb2RlIGNvbnNvbGlkYXRpb24gdGhlcmUgZG93biB0aGUgbGluZS4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXggY292ZXJzIGFsbCBwb3NzaWJsZSBkZWFkbG9jayBzY2VuYXJpb3MuIEkmIzM5O2xsIGdyZXAgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9NTcwPXZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzMtLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0Ni1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0NzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0OC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUxLVx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTI6XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1My1cdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9NjU2PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU5LVx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjYwOlx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2MS19XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzOC1cdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM5Olx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCBjYWxscyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKWAuIFRoYXQmIzM5O3MgdGhlIGtleSBsaW5lIHRvIGZvY3VzIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdXp6YWJsZT8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKRmlyc3QsIGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBZZXMsIHRoZSBwYXRoIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgY2xlYXJseSBpZGVudGlmaWVzIHRoaXMgYXMgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBhbmQgYSByZWxldmFudCBkcml2ZXIgYXQgdGhhdC4gU28sIHRoZSBjb2RlIHBhdGggaXRzZWxmIGlzIHZpYWJsZS4gR29vZC4KCk5vdywgZG9lcyBpdCBtZWV0IHRoZSBmdXp6aW5nIGNyaXRlcmlhPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIERvIGFueSBvZiB0aGVzZSBhcHBseT8gTm9wZS4gSXQmIzM5O3Mgbm90IGRvY3VtZW50YXRpb24sIGl0JiMzOTtzIG5vdCB1c2VyLXNwYWNlIGNvZGUsIGl0JiMzOTtzIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGFuZCBpdCYjMzk7cyBub3QgYnVpbGQgc3lzdGVtIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgYWZmZWN0IGNvbXBpbGVkIGxvZ2ljLiBBbHNvLCB0aGlzIGlzbiYjMzk7dCBzb21lIHVucmVhY2hhYmxlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgYW5kIGl0JiMzOTtzIG5vdCBhIHRlYXJkb3duIHBhdGggZXhlY3V0ZWQgb25seSBkdXJpbmcgaG90LXVucGx1Zy4KClNpbmNlIG5vbmUgb2YgdGhlIG5lZ2F0aXZlIGNvbmRpdGlvbnMgYXBwbHksIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gRG9lcyBpdCB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlPyBZZXMhICBBbmQgZXZlbiBiZXR0ZXIsIHRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgaXQgaXMgd29ydGh3aGlsZS4gQW5kIGl0IGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMqIHNpbmNlIGl04oCZcyBhc3NvY2lhdGVkIHdpdGggYSB2aXJ0dWFsIGJ1cy4gKkRlZmluaXRlbHkgd29ydGggZnV6emluZyEqCgpTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuICBOb3csIHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3M/IExldCYjMzk7cyBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhZ2FpbiB0byB3b3JrIG91dCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBJdCBkZXBlbmRzIG9uIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYCwgYW5kIGl0IHNlbGVjdHMgYFZIT1NUYCBhbmQgYFNHX1BPT0xgLiBUaGlzIGlzIGtleSBpbmZvcm1hdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4gIFdlJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgYFRBUkdFVF9DT1JFYCB0byBiZSBlbmFibGVkLCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRBUkdFVF9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90YXJnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgVEFSR0VUX0NPUkVgLiBXaGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gdGhlIGBkcml2ZXJzL3RhcmdldGAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvdGFyZ2V0L0tjb25maWdgIGFuZCBzY2FuIHRocm91Z2ggaXQsIGxvb2tpbmcgZm9yIHRoZSBgVEFSR0VUX0NPUkVgIHN5bWJvbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgYGNvbmZpZyBUQVJHRVRfQ09SRWAgYmxvY2sgd2l0aCBhIGRlcGVuZGVuY3kgY2hhaW4gb3V0bGluZWQuIEkmIzM5O20gYW50aWNpcGF0aW5nIGxvb2tpbmcgYXQgdGhlIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgVEFSR0VUX0NPUkVgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSwgYnV0IEkganVzdCB3YW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIFRBUkdFVF9DT1JFXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDY6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgNzpcdFx0c2VsZWN0IENSQ19UMTBESUZcbiAgIDg6XHRcdHNlbGVjdCBTQ1NJX0NPTU1PTlxuICAgOTpcdFx0c2VsZWN0IFNHTF9BTExPQ1xuICAxMDpcdFx0ZGVmYXVsdCBuXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcbiAgMTM6XHRcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xuICAxNDpcdFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xuICAxNTpcdFxuICAxNjpcdGlmIFRBUkdFVF9DT1JFXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIFRDTV9JQkxPQ0tcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O1RDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcJiMzNDtcbiAgMjA6XHRcdHNlbGVjdCBCTEtfREVWX0lOVEVHUklUWVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmhvc3QtU0NTSSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIGFzIEkgc2VlIGl0LiBJdCBsb29rcyBsaWtlIGBDT05GSUdfVkhPU1RfU0NTSWAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYENPTkZJR19UQVJHRVRfQ09SRWAg4oCTIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGJ1aWxkaW5nIG9uLiBBbmQsIGFzIGV4cGVjdGVkLCB3ZSBuZWVkIGBFVkVOVEZEYCwgd2hpY2ggaXMgdXN1YWxseSBhIG5vbi1pc3N1ZSBhcyBpdCYjMzk7cyB0eXBpY2FsbHkgZW5hYmxlZC4gU2luY2UgYENPTkZJR19WSE9TVF9TQ1NJYCBhbHNvIHB1bGxzIGluIGBDT05GSUdfVkhPU1RgLCBpdCBzb2xpZGlmaWVzIHRoZSByZWxhdGlvbnNoaXAgdGhlcmUuIFNvLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgZGlyZWN0bHkuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGRlcGVuZGVuY2llcyBvciBvdGhlciBjb25maWcgb3B0aW9ucyBkZWZpbmVkIHRoZXJlIHRoYXQgYXJlIGNyaXRpY2FsLiBBIHF1aWNrIHNjYW4gaXMgaW4gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz01ND1zdGF0aWMgdW5zaWduZWQgaW50IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudCA9IFZIT1NUX1NDU0lfUFJFQUxMT0NfU0dMUztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTY6I2lmZGVmIENPTkZJR19BUkNIX05PX1NHX0NIQUlOXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Ny1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2lubGluZV9zZ19jbnQoY29uc3QgY2hhciAqYnVmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYzOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkhPU1RfU0NTSSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhhdCBtZWFucywgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQuIGBFbmFibGVDb25maWdzYCBuZWVkcyB0byBpbmNsdWRlIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBJIHNlZTogYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhIG5ldyBzdGF0aWMgaGVscGVyLCBhbmQgdGhlbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGJvdGggb2Ygd2hpY2ggYXJlIGFsc28gc3RhdGljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyAqd2h5KiB0aGV5IGFyZSBzdGF0aWMuIEFyZSB0aGV5IGlubGluZWQ/IFdoYXQgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgY2FsbCB0aGVtPwoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMuIEkgc2VlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgY2FsbGVkIG9ubHkgd2l0aGluIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgd2hpY2ggaXRzZWxmIGlzIGEgd29yayBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBgdnMtJmd0O3ZzX2V2ZW50X3dvcmtgLiBUaGF0IG1ha2VzIHNlbnNlLiBGb3IgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBJIGhhdmUgYSBmZXcgbW9yZSBwbGFjZXMuIEl0JiMzOTtzIHVzZWQgaW4gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgd2hpY2ggaXMgYW5vdGhlciBraWNrIHdvcmsgaGFuZGxlciAodGhpcyB0aW1lIGZvciB0aGUgZXZlbnQgdmlydHF1ZXVlKSwgYW5kIGFsc28gaW4gYHZob3N0X3Njc2lfZG9fcGx1Z2AuIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZob3N0X3Njc2lfaG90cGx1Z2AgYW5kIGB2aG9zdF9zY3NpX2hvdHVucGx1Z2AuIFNvLCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgKnRob3NlKiBhcmUgdXNlZC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9ob3RwbHVnfHZob3N0X3Njc2lfaG90dW5wbHVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUzNS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzY6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTM3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTQwLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjU0MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHVucGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU0Mi17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjU0Nj1zdGF0aWMgaW50IHZob3N0X3Njc2lfcG9ydF9saW5rKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTUzLVx0dHBnLVx1MDAzZXR2X3RwZ19wb3J0X2NvdW50JiM0MzsmIzQzOztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1NTQ6XHR2aG9zdF9zY3NpX2hvdHBsdWcodHBnLCBsdW4pO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU1NS1cdG11dGV4X3VubG9jayhcdTAwMjZ0cGctXHUwMDNldHZfdHBnX211dGV4KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNTYwPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcG9ydF91bmxpbmsoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NjctXHR0cGctXHUwMDNldHZfdHBnX3BvcnRfY291bnQtLTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1Njg6XHR2aG9zdF9zY3NpX2hvdHVucGx1Zyh0cGcsIGx1bik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTY5LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnRwZy1cdTAwM2V0dl90cGdfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNDU0kgVmlydGlvLVNDU0kgQ29udW5kcnVtKioKClJpZ2h0LCBgdmhvc3Rfc2NzaV9wb3J0X2xpbmtgIGFuZCBgdmhvc3Rfc2NzaV9wb3J0X3VubGlua2AuLi4gdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiBvZiBTQ1NJIHBvcnRzIGluIHRoZSB2aG9zdC1zY3NpIHNldHVwLiBBbmQsIG9mIGNvdXJzZSwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBpcyB0aGUgY3JpdGljYWwgY2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHZpcnRxdWV1ZSBpcyAmIzM0O2tpY2tlZC4mIzM0OyBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGRvIHRoYXQsIEkgbmVlZCB0byB0cmFjZSB0aGlzIGtpY2sgY2FsbGJhY2suLi4gbGV0IG1lIGp1c3QgZmluZCB3aGVyZSBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGlzIGFjdHVhbGx5IGJlaW5nIHJlZ2lzdGVyZWQuIE5lZWQgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQuIEdvdCB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhpcyBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODE0PXZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTg0MjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIyOTU9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzNy1cdHZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0NUTF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljaztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMzg6XHR2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxLmhhbmRsZV9raWNrID0gdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzM5LVx0Zm9yIChpID0gVkhPU1RfU0NTSV9WUV9JTzsgaSBcdTAwM2MgbnZxczsgaSYjNDM7JiM0MzspIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFNDU0kgdmhvc3QgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgU0NTSSB2aG9zdCBldmVudHMgYXJlIHByb2Nlc3NlZC4gVGhlIGNvZGUmIzM5O3MgdGVsbGluZyBtZSBgdmhvc3Rfc2NzaV9vcGVuYCBpcyBzZXR0aW5nIGB2cy0mZ3Q7dnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cS5oYW5kbGVfa2lja2AgdG8gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYC4gVGhhdCYjMzk7cyB0aGUgZXZlbnQgcXVldWUmIzM5O3Mga2ljayBoYW5kbGVyLCByaWdodD8gSXQmIzM5O3Mga2V5IGZvciB0cmlnZ2VyaW5nIHdvcmsuCgpOb3csIHdoZXJlIGlzIGB2aG9zdF9zY3NpX2V2dF93b3JrYCBpbml0aWFsaXplZD8gSSBuZWVkIHRvIHRyYWNrIHdoZXJlIHRoYXQgd29yayBmdW5jdGlvbiBnZXRzIHNldCB1cCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBMZXQmIzM5O3MgbG9vayBhdCBgdnNfZXZlbnRfd29ya2AhIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNfZXZlbnRfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4Olx0c3RydWN0IHZob3N0X3dvcmsgdnNfZXZlbnRfd29yazsgLyogZXZ0IGluamVjdGlvbiB3b3JrIGl0ZW0gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0OS1cdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz02NTY9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTgtXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XHRcdFx0XHRcdCAgICAgdnNfZXZlbnRfd29yayk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MzctXHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzODpcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjk1PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzMwOlx0dmhvc3Rfd29ya19pbml0KFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmssIHZob3N0X3Njc2lfZXZ0X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMzgKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3VpdGFibGUgZm9yIGZ1enppbmcuIEkmIzM5O20gbG9va2luZyBhdCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZSBrZXkgaGVyZSwgYXMgcGVyIHRoZSBndWlkZWxpbmVzLCBpcyB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSAqbm90KiBnZW5lcmFsLXB1cnBvc2U7IHRoZXkmIzM5O3JlIHZlcnkgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdmhvc3Qtc2NzaSBldmVudCBoYW5kbGluZywgc28gdGhleSBwYXNzIHRoZSBpbml0aWFsIHNjcmVlbmluZy4KCk5vdywgbGV0JiMzOTtzIGNvbnN1bHQgU2VjdGlvbiA0LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLiBHcmVhdCwgdGhlc2UgZnVuY3Rpb25zIGRlZmluaXRlbHkgZml0IHRoZSBiaWxsLiBUaGV5IGltcGxlbWVudCB0aGUgY29yZSBsb2dpYyBiZWluZyBhbHRlcmVkLiBBbHNvLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciBvbiBoYW5kbGluZyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgbm8gcHJvYmxlbSBoZXJlLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhbmQgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGFyZSBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgZmlsZS4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgbXkgbGlzdCBvZiByZWxldmFudCBmdW5jdGlvbnM6IGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZXkgYWxsIHNlZW0gcmVsZXZhbnQuCgpOb3csIHRoZSBmaW5hbCBjb25maXJtYXRpb24uIGBXb3J0aEZ1enppbmdgOiBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgYW5kIGNoYW5nZXMgZXZlbnQgY29tcGxldGlvbiB3aXRoIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AvYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGlzICpleGVjdXRhYmxlIGtlcm5lbCBjb2RlKiByZWFjaGFibGUgdmlhIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBkZXZpY2UgYW5kIFRDTSBjb25maWdmcyBpbnRlcmZhY2VzLiBUaGlzIGhpdHMgYWxsIHRoZSBuZWNlc3NhcnkgcmVxdWlyZW1lbnRzLgoKRm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTttIGxpc3RpbmcgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBgdmhvc3Rfc2NzaV9kb19wbHVnYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgd2FudCB0aGUgZnV6emVyIHRvIGZvY3VzIG9uLgoKRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgSSBuZWVkIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCB0byBiZSBlbmFibGVkLCB3aGljaCBpcyBjb3JyZWN0LgoKT2theSwgbGV0JiMzOTtzIHRyaXBsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCBmb3JtYXQuIFRoZSByZXN1bHQgaXM6CmBFbmFibGVDb25maWdzYDogYFsmIzM0O1ZIT1NUX1NDU0kmIzM0OywgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7XWAKYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywgJiMzNDt2aG9zdF9zY3NpX3NlbmRfZXZ0JiMzNDssICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywgJiMzNDt2aG9zdF9zY3NpX2RvX3BsdWcmIzM0O11gCmBXb3J0aEZ1enppbmdgOiB0cnVlCmBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LgpOb3csIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX3BsdWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXZlbnQgY29tcGxldGlvbiBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYyBieSBpbnRyb2R1Y2luZyBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzIHRvIGF2b2lkIGRvdWJsZS1sb2NraW5nIHZxLVx1MDAzZW11dGV4IHdoZW4gcXVldWluZyB3b3JrIGZhaWxzIGluIHZob3N0X3Njc2lfc2VuZF9ldnQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgL2Rldi92aG9zdC1zY3NpIGRldmljZSBpb2N0bCBpbnRlcmZhY2UgYW5kIFRDTSB0YXJnZXQgY29uZmlnZnMgb3BlcmF0aW9ucy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBldmVudCB2aXJ0cXVldWUgcHJvY2Vzc2luZyBhbmQgY29uY3VycmVuY3kvbG9ja2luZyBpbnZhcmlhbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9TQ1NJJiMzNDssCiAgICAmIzM0O1RBUkdFVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3NlbmRfZXZ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fcGx1ZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBldmVudCBjb21wbGV0aW9uIGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jIGJ5IGludHJvZHVjaW5nIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgdG8gYXZvaWQgZG91YmxlLWxvY2tpbmcgdnEtXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlY3Vyc2l2ZSBtdXRleCBsb2NraW5nIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJbiB2aG9zdF9zY3NpX3NlbmRfZXZ0KCksIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB2cS1cdTAwM2VtdXRleC4gUHJldmlvdXNseSwgaWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB3YXMgaW52b2tlZCwgYXR0ZW1wdGluZyB0byBhY3F1aXJlIHZxLVx1MDAzZW11dGV4IGEgc2Vjb25kIHRpbWUuIFRoZSBwYXRjaCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciAoX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpKSBhbmQgY2FsbHMgdGhhdCBkaXJlY3RseSB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZC5cblxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGJ1ZmZlciBjb3B5aW5nLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLiBEZWFkbG9ja3MgYW5kIGxvY2tpbmcgaXNzdWVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTiwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDdhMWYzOWEzMjdkYTYuLjdjOTA1ZTlhZDQ5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC02MzAsMTkgJiM0Mzs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KQogCXZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pOwogfQogCi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovCiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnMtJmd0O3Zxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7CiAJc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0OwogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiAKLQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIAlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHsKIAkJaWYgKCFkcm9wKQogCQkJdmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTsKIAkJdmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIH0KIApAQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAogCWxsaXN0X2FkZCgmYW1wO2V2dC0mZ3Q7bGlzdCwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCk7CiAJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKLQkJdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwomIzQzOwkJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2aG9zdC1zY3NpYCBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgZGlmZiBpcyBmb2N1c2VkIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBldmVudHMgYXJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZ1bmN0aW9uIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuCgpJbml0aWFsbHksIHRoZSBmdW5jdGlvbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdhcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBhbmQgZnJlZWluZyBldmVudHMgc3RvcmVkIGluIGB2cy0mZ3Q7dnNfZXZlbnRfbGlzdGAuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBmdW5jdGlvbiwgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhbmQgaXQgYXBwZWFycyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG5vdyByZXNpZGVzLiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgZG9lcyB0aGUgYWN0dWFsIGV2ZW50IHByb2Nlc3NpbmcgYW5kIGZyZWVpbmcuIFRoZSBvcmlnaW5hbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIG5vdyBzaW1wbHkgY2FsbHMgdGhlIGludGVybmFsIGZ1bmN0aW9uIGFmdGVyIGxvY2tpbmcgdGhlIHZpcnRxdWV1ZSBtdXRleCBgdnEtJmd0O211dGV4YC4gVGhpcyBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcuCgpUaGUga2V5IGxpbmUgdG8gaW52ZXN0aWdhdGUgc2VlbXMgdG8gYmUgd2hlcmUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGlzIGNhbGxlZC4gSXQgdXNlcyBgbGxpc3RfYWRkYCB0byBhZGQgZXZlbnQgdG8gdGhlIGV2ZW50IGxpc3QuIFRoZW4gaXQgY2FsbHMgZWl0aGVyIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBvciwgaWYgdGhhdCByZXR1cm5zIGZhbHNlLCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2l0aCB0aGUgYGRyb3BgIGZsYWcgc2V0IHRvIHRydWUuICBUaGUgaW1wb3J0YW50IG9ic2VydmF0aW9uIGlzIHRoZSBuZXcgY2FsbCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gY29tcGxldGUgdGhlIGV2ZW50cywgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY2FsbCB0byBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLgoKU28gdGhlIGludGVudCBpcyB0byBwcm90ZWN0IGV2ZW50IGhhbmRsaW5nLiBUaGUgdXNlIG9mIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2l0aCB0aGUgbXV0ZXgsIGNvdXBsZWQgd2l0aCBgbGxpc3RfZGVsX2FsbGAgYW5kIGBsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgY29uZmlybXMgdGhhdCB0aGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGV2ZW50IGxpc3QgZHVyaW5nIHByb2Nlc3NpbmcsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBnb29kIGNoYW5nZSB0byBpbXByb3ZlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIGludGVncml0eSBpbiB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci4gSeKAmWxsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgcmVmYWN0b3JpbmcsIGJ1dCBhdCBmaXJzdCBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC1tb3RpdmF0ZWQgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHR2aG9zdF9zY3NpX2N0bF9oYW5kbGVfdnEodnMsIHZxKTtcbjE4MTE6XHR9XG4xODEyOlx0XG4xODEzOlx0c3RhdGljIHZvaWRcbjE4MTQ6XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4xODE1Olx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuLFxuMTgxNjpcdFx0XHQgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0O1xuMTgxOTpcdFxuMTgyMDpcdFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xuMTgyMTpcdFx0aWYgKCFldnQpXG4xODIyOlx0XHRcdHJldHVybjtcbjE4MjM6XHRcbjE4MjQ6XHRcdGlmICh0cGcgXHUwMDI2XHUwMDI2IGx1bikge1xuMTgyNTpcdFx0XHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXG4xODI2Olx0XHRcdC8qXG4xODI3Olx0XHRcdCAqIE5vdGU6IGV2dC1cdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcbjE4Mjg6XHRcdFx0ICogbHVuWzQtN10gbmVlZCB0byBiZSB6ZXJvIGFjY29yZGluZyB0byB2aXJ0aW8tc2NzaSBzcGVjLlxuMTgyOTpcdFx0XHQgKi9cbjE4MzA6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blswXSA9IDB4MDE7XG4xODMxOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXHUwMDNldHBvcnRfdHBndDtcbjE4MzI6XHRcdFx0aWYgKGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlPSAyNTYpXG4xODMzOlx0XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blsyXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlXHUwMDNlIDggfCAweDQwIDtcbjE4MzQ6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDI2IDB4RkY7XG4xODM1Olx0XHR9XG4xODM2Olx0XG4xODM3Olx0XHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuMTgzODpcdFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF93b3JrKSlcbjE4Mzk6XHRcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4xODQwOlx0fVxuMTg0MTpcdFxuMTg0MjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuMTg0MzpcdHtcbjE4NDQ6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXG4xODQ1Olx0XHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbjE4NDY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xuMTg0NzpcdFxuMTg0ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODQ5Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwaXZvdGFsIGZvciBldmVudCBzaWduYWxpbmcgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yaywgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGFuZCAqd2h5KiBpdCYjMzk7cyBpbnZva2VkIGlzIGtleSB0byBncmFzcGluZyBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aC4gSSBuZWVkIHRvIGtub3c6IHdoYXQgdHJpZ2dlcnMgdGhlIGV2ZW50LCB3aGF0IGRvZXMgaXQgc2lnbmFsLCBhbmQgd2hhdCBhY3Rpb25zIGFyZSB0YWtlbiBiYXNlZCBvbiB0aGF0IHNpZ25hbD8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBkaXJlY3QgY2FsbHMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN1cnJvdW5kaW5nIGxvZ2ljIHRoYXQgcHJvdmlkZXMgY2x1ZXMgYWJvdXQgdGhlIGV2ZW50JiMzOTtzIHB1cnBvc2UgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIHdoZW4gaXQmIzM5O3MgdHJpZ2dlcmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucywgc3VjaCBhcyBjb25kaXRpb25hbCBjYWxscyBiYXNlZCBvbiBkZXZpY2Ugc3RhdGUgb3IgZXJyb3IgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGdyYWJiaW5nIGB2cS0mZ3Q7bXV0ZXhgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCBuZWVkcyB0byBwcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSB2aXJ0cXVldWUuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgY29uZGl0aW9uYWwgY2FsbCB0byBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2hlbiBgdnMtJmd0O3ZzX2V2ZW50c19taXNzZWRgIGlzIHNldC4KCkluc2lkZSBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGl0JiMzOTtzIGNoZWNraW5nIGB2aG9zdF92cV93b3JrX3F1ZXVlYC4gQW5kICp0aGF0JiMzOTtzKiB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgZmFpbHMsIHdlIGhpdCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgdGhpcyBjYWxscyBgbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleClgISBIYW5nIG9uLCBpc24mIzM5O3QgdGhhdC4uLiBhIHJlY3Vyc2l2ZSBsb2NrPyBZZXMsIGl0IGlzLgoKU28sIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZ3JhYnMgdGhlIG11dGV4LCBhbmQgKnRoZW4qIGNhbGxzIGEgZnVuY3Rpb24gdGhhdCAqbWlnaHQqIHRyeSB0byBncmFiIHRoZSBzYW1lIG11dGV4IGFnYWluLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby4gSXQmIzM5O3MgbGlrZWx5IGRlYWRsb2NraW5nIGlmIGB2cy0mZ3Q7dnNfZXZlbnRzX21pc3NlZGAgaXMgdHJ1ZS4KCkJ1dCB3YWl0LCBpcyB0aGlzIHRoZSBvbmx5IHBsYWNlPyBMZXQmIzM5O3MgY29uc2lkZXIgb3RoZXIgY29kZSBwYXRocyB3aGVyZSBgdnEtJmd0O211dGV4YCBtaWdodCBhbHJlYWR5IGJlIGhlbGQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gRm9yIGV4YW1wbGUsIGB2aG9zdF9zY3NpX2RvX3BsdWdgIG1pZ2h0IGFsc28gYmUgaG9sZGluZyB0aGUgbXV0ZXgsIGFuZCB0aGUgc2FtZSBwcm9ibGVtIGNvdWxkIGFyaXNlIGlmIHdlIGhpdCB0aGUgc2FtZSByZWN1cnNpdmUgbXV0ZXggbG9jay4gVGhpcyBjb3VsZCBiZSBhIG11Y2ggbW9yZSB3aWRlc3ByZWFkIGlzc3VlIHRoYW4gSSBpbml0aWFsbHkgc3VzcGVjdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgYHZob3N0X3Njc2lfZG9fcGx1Z2AgaXMgdXNlZCB0byBjb25maXJtIHRoaXMuIFRoaXMgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUwMDpcdFx0cmV0dXJuIFwmIzM0O1Vua25vd25cJiMzNDs7XG4yNTAxOlx0fVxuMjUwMjpcdFxuMjUwMzpcdHN0YXRpYyB2b2lkXG4yNTA0Olx0dmhvc3Rfc2NzaV9kb19wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxuMjUwNTpcdFx0XHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxuMjUwNjpcdHtcbjI1MDc6XHRcbjI1MDg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHRwZy1cdTAwM2V2aG9zdF9zY3NpO1xuMjUwOTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4yNTEwOlx0XHR1MzIgcmVhc29uO1xuMjUxMTpcdFxuMjUxMjpcdFx0aWYgKCF2cylcbjI1MTM6XHRcdFx0cmV0dXJuO1xuMjUxNDpcdFxuMjUxNTpcdFx0aWYgKHBsdWcpXG4yNTE2Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRVNDQU47XG4yNTE3Olx0XHRlbHNlXG4yNTE4Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xuMjUxOTpcdFxuMjUyMDpcdFx0dnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuMjUyMTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTIyOlx0XHQvKlxuMjUyMzpcdFx0ICogV2UgY2FuJiMzOTt0IHF1ZXVlIGV2ZW50cyBpZiB0aGUgYmFja2VuZCBoYXMgYmVlbiBjbGVhcmVkLCBiZWNhdXNlXG4yNTI0Olx0XHQgKiB3ZSBjb3VsZCBlbmQgdXAgcXVldWVpbmcgYW4gZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoLlxuMjUyNTpcdFx0ICovXG4yNTI2Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbjI1Mjc6XHRcdFx0Z290byB1bmxvY2s7XG4yNTI4Olx0XG4yNTI5Olx0XHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19TQ1NJX0ZfSE9UUExVRykpXG4yNTMwOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbjI1MzE6XHRcdFx0XHRcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xuMjUzMjpcdHVubG9jazpcbjI1MzM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTM0Olx0fVxuMjUzNTpcdFxuMjUzNjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90cGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxuMjUzNzpcdHtcbjI1Mzg6XHRcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XG4yNTM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYWRsb2NrIEZpeCBmb3Igdmhvc3Qtc2NzaSBFdmVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBjb2RlLCBhbmQgSSYjMzk7dmUgc3BvdHRlZCBhIG5hc3R5IHBvdGVudGlhbCBkZWFkbG9jay4gSXQgbG9va3MgbGlrZSBgdmhvc3Rfc2NzaV9kb19wbHVnYCB3YXMgbG9ja2luZyBgdnEtJmd0O211dGV4YCwgYW5kIHRoZW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgICphbHNvKiByZXF1aXJlcyB0aGF0IHRoZSBjYWxsZXIgaG9sZCBgdnEtJmd0O211dGV4YC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxzOyBpdCB0aGVuIGNhbGxzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoLCBpbiB0dXJuLCB0cmllcyB0byBsb2NrIGB2cS0mZ3Q7bXV0ZXhgICphZ2FpbiohIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJlY3Vyc2l2ZSBtdXRleCBhY3F1aXNpdGlvbiBidWcsIHJpZ2h0IHRoZXJlLgoKVGhlIHBhdGNoIGFpbXMgdG8gZml4IHRoaXMgYnkgY2FyZWZ1bGx5IHJlc3RydWN0dXJpbmcgdGhlIGxvY2tpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgY3JlYXRlZCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIG9wZXJhdGVzIHdpdGhvdXQgbG9ja2luZyBgdnEtJmd0O211dGV4YOKAlHRoZSBhc3N1bXB0aW9uIGJlaW5nIHRoZSBjYWxsZXIgKmFscmVhZHkqIGhvbGRzIGl0LiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIG5vdyByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcgYG11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpYCBhcm91bmQgdGhlIGNhbGwgdG8gdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjbGV2ZXIgcGFydCBpcyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGA7IHNpbmNlIGl0JiMzOTtzIGNhbGxlZCB3aXRoIGB2cS0mZ3Q7bXV0ZXhgIGFscmVhZHkgaGVsZCwgaXQganVzdCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLiBUaGlzIGF2b2lkcyB0aGUgZG91YmxlLWxvY2sgYW5kLCBob3BlZnVsbHksIHRoZSBkZWFkbG9jay4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZml4IGlzIHNvdW5kLCBzbyBJIHNob3VsZCByZWFsbHkgY2hlY2sgYWxsIHRoZSBsb2NhdGlvbnMgd2hlcmUgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpcyBub3cgY2FsbGVkIHRvIHNlZSBpZiB0aGlzIG5ldyBsb2NraW5nIHNjaGVtZSBpcyBiZWluZyBob25vcmVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTU3MD12aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMzLS8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzNDpzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDYtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDgte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1MS1cdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjUyOlx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTMtXHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1OS1cdFx0XHRcdFx0ICAgICB2c19ldmVudF93b3JrKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY2MDpcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjEtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MzgtXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzOTpcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NQoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBmb3Igdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgUmVmYWN0b3JpbmcqKgoKT2theSwgc28gYHZob3N0X3Njc2lfZXZ0X3dvcmtgIGlzIGNhbGxpbmcgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIHJlZmFjdG9yaW5nIHdhcnJhbnRzIGVuYWJsaW5nIEtNU0FOLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgZG9lcyB0aGlzIHBhdGNoIGV2ZW4gKnRvdWNoKiBhbnl0aGluZyB0aGF0JiMzOTtzIGNvcGllZCB0byB1c2Vyc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBUaGlzIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsLiBOZXh0LCBhbSBJIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdmFyaWFibGVzPyBOb3BlLCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgaXQuIEl0JiMzOTtzIGFib3V0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBvbiB0aGF0IGB2cS0mZ3Q7bXV0ZXhgLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgcHJldmVudGluZyByZWN1cnNpdmUgbG9ja2luZyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4KClNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG9ja3MsIHRoZSBwcmltYXJ5IGNvbmNlcm5zIGFyZSBnb2luZyB0byBiZSB0aG9zZSB0aGF0IExPQ0tERVAgaXMgZGVzaWduZWQgdG8gY2F0Y2gsIG9yLCBwb3RlbnRpYWxseSwgYSBzaW1wbGUgaGFuZy4gIFRoZXNlIGtpbmRzIG9mIHByb2JsZW1zIGFyZSBub3Qgd2hhdCBLTVNBTiBpcyBmb3IuIEtNU0FOIGlzIHRoZSBLZXJuZWxNZW1vcnlTYW5pdGl6ZXI7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGZpbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2UuIFRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlIGhlcmUuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gJiMzNDtSdW5uaW5nIGEgS01TQU4gc2Vzc2lvbiBpcyBwb2ludGxlc3MgaWYgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2ggdGhlIHByb2JsZW0uJiMzNDsgIFRoaXMgcmVmYWN0b3Jpbmcgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggbG9ja2luZy4gIEtNU0FOIGZ1enppbmcgaGFzIHJlc291cmNlIGNvc3RzLiBJdCBhbHNvIHNheXMgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgIG9ubHkgaWYgdGhlIGNvZGUgaW50cm9kdWNlcyByaXNrcyBvZiBVTklOSVRJQUxJWkVEIE1FTU9SWSB0aGF0IGlzIE9OTFkgZGV0ZWN0ZWQgYnkgS01TQU4uCgpUaGUgZ3VpZGVsaW5lcyBhbHNvIHNheSB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmIHRoZSBjb2RlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAoY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQKS4gQW5kLCBpZiBhbnkgbmV3IHN0cnVjdHVyZXMgaW50cm9kdWNlZCBhcmUgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSByZWFkL2NvcHksIG9yIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgYW5zd2VyIGlzIHVuZXF1aXZvY2FsbHkgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQmIzM5O3MgYnVpbGQgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVjdXJzaXZlIG11dGV4IGxvY2tpbmcgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEluIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHZxLVx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVjdXJzaXZlIG11dGV4IGxvY2tpbmcgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEluIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHZxLVx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MDkuODUwOTQ2NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQxMTEwNDk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3NlbmRfZXZ0XCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlY3Vyc2l2ZSBtdXRleCBsb2NraW5nIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJbiB2aG9zdF9zY3NpX3NlbmRfZXZ0KCksIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB2cS1cXHUwMDNlbXV0ZXguIFByZXZpb3VzbHksIGlmIHZob3N0X3ZxX3dvcmtfcXVldWUoKSBmYWlsZWQsIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgd2FzIGludm9rZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB2cS1cXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxcblxcblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXIgY29weWluZywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcy4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4sIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMgYnkgaW50cm9kdWNpbmcgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyB0byBhdm9pZCBkb3VibGUtbG9ja2luZyB2cS1cXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjA5Ljg1MDk1MTUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2NzI2NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWY0YjU5NjJjNGVkNjI5NGFiYmJhNDdkZDg3ZGJhYjFiZDVhYzQ5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMDowODowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuaW5kZXggN2ExZjM5YTMyN2RhNi4uN2M5MDVlOWFkNDlhOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuQEAgLTYzMCwxOSArNjMwLDI2IEBAIHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG4gXFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbisvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovXFxuK3N0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIHtcXG4tXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuIFxcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcXG4gXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuIFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG4gXFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xcbiBcXHRcXHRpZiAoIWRyb3ApXFxuIFxcdFxcdFxcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7XFxuIFxcdFxcdHZob3N0X3Njc2lfZnJlZV9ldnQodnMsIGV2dCk7XFxuIFxcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuK3tcXG4rXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbitcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiB9XFxuIFxcbkBAIC0xODI5LDcgKzE4MzYsNyBAQCB2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIFxcbiBcXHRsbGlzdF9hZGQoXFx1MDAyNmV2dC1cXHUwMDNlbGlzdCwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG4gXFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X3dvcmspKVxcbi1cXHRcXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XFxuK1xcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MTEuNDI4MzM0NjM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzM5OTg4ODQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3NlbmRfZXZ0XCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXZlbnQgY29tcGxldGlvbiBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYyBieSBpbnRyb2R1Y2luZyBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzIHRvIGF2b2lkIGRvdWJsZS1sb2NraW5nIHZxLVxcdTAwM2VtdXRleCB3aGVuIHF1ZXVpbmcgd29yayBmYWlscyBpbiB2aG9zdF9zY3NpX3NlbmRfZXZ0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIC9kZXYvdmhvc3Qtc2NzaSBkZXZpY2UgaW9jdGwgaW50ZXJmYWNlIGFuZCBUQ00gdGFyZ2V0IGNvbmZpZ2ZzIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZXZlbnQgdmlydHF1ZXVlIHByb2Nlc3NpbmcgYW5kIGNvbmN1cnJlbmN5L2xvY2tpbmcgaW52YXJpYW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li43YzkwNWU5YWQ0OWE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4gXHRcdGlmICghZHJvcClcbiBcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuIFx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuIFx0fVxuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbitcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiB9XG4gXG5AQCAtMTgyOSw3ICsxODM2LDcgQEAgdmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIFxuIFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbiBcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4tXHRcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbitcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MTEuNDI4MzM2MzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzQ0OTczNjI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhlIGNoYW5nZXMgc2VlbSBmb2N1c2VkIGFyb3VuZCB0aGUgZXZlbnQgaGFuZGxpbmcgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgZXZlbnQgY29tcGxldGlvbiBhbmQgcXVldWluZyBsb2dpYy5cblxuRmlyc3QsIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVGhlIG9yaWdpbmFsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgZnVuY3Rpb24gaXMgbm93IGp1c3QgYSB3cmFwcGVyLiBJdCBhY3F1aXJlcyB0aGUgdmlydHF1ZXVlIG11dGV4LCBjYWxscyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhbmQgdGhlbiByZWxlYXNlcyB0aGUgbXV0ZXguIFRoaXMgaXMgYSB2ZXJ5IHN0YW5kYXJkIHBhdHRlcm4sIGxpa2VseSB0byBhbGxvdyB0aGUgY29yZSBjb21wbGV0aW9uIGxvZ2ljIHRvIGJlIGNhbGxlZCBpbiBjb250ZXh0cyB3aGVyZSB0aGUgbXV0ZXggaXMgYWxyZWFkeSBoZWxkLiBJdCBtYWtlcyB0aGUgY29kZSBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IGVhc2llciB0byByZWFzb24gYWJvdXQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgaW5saW5lIGZ1bmN0aW9ucywgSSBvYnNlcnZlIHRoYXQgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucy4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZXZlbnQgbGlzdCwgYW5kIGNhbGxzIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYCBmb3IgZWFjaCBldmVudCBpZiBgZHJvcGAgaXMgZmFsc2UuIElmIGl0IGlzbid0IGRyb3BwZWQsIGl0IHByb2Nlc3NlcyB0aGUgZXZlbnQuIFRoZW4sIGl0IGFsd2F5cyBmcmVlcyB0aGUgZXZlbnQgYWZ0ZXIgaGFuZGxpbmcuIFRoZSBsb2NrIHByb3RlY3RzIHRoZSBsaW5rZWQgbGlzdC5cblxuVGhlIGtleSBjaGFuZ2UsIGF0IGxpbmUgMTgzNiwgaXMgdGhlIGNhbGwgdG8gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGRpcmVjdGx5IGZyb20gd2l0aGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aGVuIHRoZSBldmVudCB3b3JrIHF1ZXVlIGZhaWxzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwYXRoIHdoZXJlIGV2ZW50cyBtaWdodCBiZSBkcm9wcGVkIG9yIHByb2Nlc3NlZCBpbW1lZGlhdGVseS4gVGhlIGNoYW5nZSBmcm9tIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGltcGxpZXMgdGhhdCB0aGUgbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IHRoZSBjYWxsIHNpdGUuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIGNvbXBsZXRlIGFuZCBoYW5kbGUgdGhlIGV2ZW50cyBpbW1lZGlhdGVseSBpbiBjYXNlcyB3aGVyZSB0aGUgcXVldWVpbmcgZmFpbHMuIFRoZSBgZHJvcGAgZmxhZyBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBhIHBvc3NpYmlsaXR5IG9mIGRpc2NhcmRpbmcgZXZlbnRzIGluIGVycm9yIGNvbmRpdGlvbnMuIEkgd29uZGVyIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgcG90ZW50aWFsbHkgZHJvcHBpbmcgZXZlbnRzIGluIHRoaXMgY29udGV4dC4gSXQncyBsaWtlbHkgaW50ZW5kZWQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLCBidXQgd2hhdCBpcyB0aGUgY29zdCBvZiBkcm9wcGluZz8gSXMgdGhlcmUgYW55IGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGFzc29jaWF0ZWQgd2l0aCBkcm9wcGVkIGV2ZW50cz9cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGNhbiBmYWlsIGFuZCB3aHkgZHJvcHBpbmcgYW4gZXZlbnQgbWlnaHQgYmUgdGhlIGNvcnJlY3QgYmVoYXZpb3IuIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgaG93IHRoZXNlIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiB0aGV5ICphcmVuJ3QqIGRyb3BwZWQuIFRoaXMgYWxsIGZlZWxzIGxpa2UgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9yIGJ1ZyBmaXggcmVsYXRlZCB0byBldmVudCBoYW5kbGluZyB1bmRlciBoaWdoIGxvYWQgb3IgZXJyb3IgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjE4Ljg3ODA3NTU4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdFxcdHZob3N0X3Njc2lfY3RsX2hhbmRsZV92cSh2cywgdnEpO1xcbjE4MTE6XFx0fVxcbjE4MTI6XFx0XFxuMTgxMzpcXHRzdGF0aWMgdm9pZFxcbjE4MTQ6XFx0dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjE4MTU6XFx0XFx0XFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXFxuMTgxNjpcXHRcXHRcXHQgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxcbjE4MTc6XFx0e1xcbjE4MTg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XFxuMTgxOTpcXHRcXG4xODIwOlxcdFxcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcXG4xODIxOlxcdFxcdGlmICghZXZ0KVxcbjE4MjI6XFx0XFx0XFx0cmV0dXJuO1xcbjE4MjM6XFx0XFxuMTgyNDpcXHRcXHRpZiAodHBnIFxcdTAwMjZcXHUwMDI2IGx1bikge1xcbjE4MjU6XFx0XFx0XFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xcbjE4MjY6XFx0XFx0XFx0LypcXG4xODI3OlxcdFxcdFxcdCAqIE5vdGU6IGV2dC1cXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXFxuMTgyODpcXHRcXHRcXHQgKiBsdW5bNC03XSBuZWVkIHRvIGJlIHplcm8gYWNjb3JkaW5nIHRvIHZpcnRpby1zY3NpIHNwZWMuXFxuMTgyOTpcXHRcXHRcXHQgKi9cXG4xODMwOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzBdID0gMHgwMTtcXG4xODMxOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVxcdTAwM2V0cG9ydF90cGd0O1xcbjE4MzI6XFx0XFx0XFx0aWYgKGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwM2U9IDI1NilcXG4xODMzOlxcdFxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzJdID0gbHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZVxcdTAwM2UgOCB8IDB4NDAgO1xcbjE4MzQ6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDI2IDB4RkY7XFxuMTgzNTpcXHRcXHR9XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2ZXZ0LVxcdTAwM2VsaXN0LCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpO1xcbjE4Mzg6XFx0XFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X3dvcmspKVxcbjE4Mzk6XFx0XFx0XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XFxuMTg0MDpcXHR9XFxuMTg0MTpcXHRcXG4xODQyOlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbjE4NDM6XFx0e1xcbjE4NDQ6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSxcXG4xODQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHBvbGwud29yayk7XFxuMTg0NjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Njc2ksIGRldik7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMTg0OTpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4xODUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRpZiAodnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQpXFxuMTg1MzpcXHRcXHRcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcXG4xODU0OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4xODU1OlxcdG91dDpcXG4xODU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODU3OlxcdH1cXG4xODU4OlxcdFxcbjE4NTk6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MTguODc4MjM1NTc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcwMjc5MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdGhlIFNDU0kgdmhvc3QgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBpdCdzIGdyYWJiaW5nIGB2cS1cdTAwM2VtdXRleGAuIFBlcmZlY3RseSBub3JtYWwsIHByb3RlY3Rpbmcgc2hhcmVkIHJlc291cmNlcyB3aXRoaW4gdGhlIHZpcnR1YWwgcXVldWUuIFRoZW4sIGl0IGNoZWNrcyBpZiB0aGVyZSdzIGEgdmFsaWQgYmFja2VuZCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgcXVldWUuIElmIG5vdCwgaXQgc2tpcHMgdGhlIHJlc3QgYW5kIHVubG9ja3MgdGhlIG11dGV4LiBCdXQgaGVyZSdzIHRoZSBraWNrZXI6IGl0ICptaWdodCogY2FsbCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgaWYgZXZlbnRzIHdlcmUgbWlzc2VkLlxuXG5BbmQgaW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBiZWZvcmUgdGhlIGZpeCwgdGhlIGNvZGUgY2FsbHMgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtgLiBXYWl0IGEgc2Vjb25k4oCmIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYWxzbyBsb2NrcyBgdnEtXHUwMDNlbXV0ZXhgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGRlYWRsb2NrISBJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSAoaW1wbHlpbmcgdGhlIHF1ZXVlIGlzbid0IHJlYWR5IG9yIGFibGUgdG8gcHJvY2VzcyksIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgbWlnaHQgYmUgc3R1Y2sgaG9sZGluZyBgdnEtXHUwMDNlbXV0ZXhgIHdoaWxlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgKmFsc28qIHRyaWVzIHRvIGdyYWIgaXQuIEJvb20uIERlYWRsb2NrIVxuXG5UbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBpcyBjYWxsZWQuIEdyZXAgdGltZSEgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3Qgb3RoZXIgcGF0aHMgdGhyb3VnaCB0aGUgY29kZSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhpcyBzYW1lIG11dGV4IGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgbmVzdGVkIGxvY2tpbmcgYW5kIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MjIuNTgxMDI3NjU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTg2ODM5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODoyNC4xMzk3MTY5NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDQyNTg3MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2aG9zdF9zY3NpX2RvX3BsdWcgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9kb19wbHVnYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgU0NTSSBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGRldmljZSBwbHVnZ2luZy4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCwgYW5kIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsaW5lcyAyNTAwIHRocm91Z2ggMjU0MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZpcnR1YWwgU0NTSSBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSBhZGRlZCBvciByZW1vdmVkIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dC4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGxpbmVzIGJlY2F1c2UgdGhleSBwcm9iYWJseSBoYW5kbGUgdGhlIGNydWNpYWwgbG9naWMgb2YgcmVnaXN0ZXJpbmcgb3IgdW5yZWdpc3RlcmluZyBhIHZpcnR1YWwgZGV2aWNlLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgcXVldWVzLCBhbmQgcG90ZW50aWFsbHkgbm90aWZ5aW5nIHRoZSB1c2VyLXNwYWNlIHZob3N0LXNjc2kgYmFja2VuZCBhYm91dCB0aGUgZGV2aWNlJ3MgYXZhaWxhYmlsaXR5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHZob3N0X3Njc2lfZGV2YCBzdHJ1Y3R1cmUgaXMgbWFuaXB1bGF0ZWQsIGhvdyBjb21tYW5kIHF1ZXVlcyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGUgZGV2aWNlJ3Mgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIG1hbmFnZWQuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0aGF0IGhhbmRsZSB0aGUgbW9zdCBpbXBvcnRhbnQgc3RlcHMgLSB0aGUgYWN0dWFsIHBsdWdnaW5nIGFuZCB1bnBsdWdnaW5nIG9wZXJhdGlvbnMuIFRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODoyNy4xODIzMDYzNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUwMDpcXHRcXHRyZXR1cm4gXFxcIlVua25vd25cXFwiO1xcbjI1MDE6XFx0fVxcbjI1MDI6XFx0XFxuMjUwMzpcXHRzdGF0aWMgdm9pZFxcbjI1MDQ6XFx0dmhvc3Rfc2NzaV9kb19wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxcbjI1MDU6XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VfbHVuICpsdW4sIGJvb2wgcGx1ZylcXG4yNTA2OlxcdHtcXG4yNTA3OlxcdFxcbjI1MDg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gdHBnLVxcdTAwM2V2aG9zdF9zY3NpO1xcbjI1MDk6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XFxuMjUxMDpcXHRcXHR1MzIgcmVhc29uO1xcbjI1MTE6XFx0XFxuMjUxMjpcXHRcXHRpZiAoIXZzKVxcbjI1MTM6XFx0XFx0XFx0cmV0dXJuO1xcbjI1MTQ6XFx0XFxuMjUxNTpcXHRcXHRpZiAocGx1ZylcXG4yNTE2OlxcdFxcdFxcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRVNDQU47XFxuMjUxNzpcXHRcXHRlbHNlXFxuMjUxODpcXHRcXHRcXHRyZWFzb24gPSBWSVJUSU9fU0NTSV9FVlRfUkVTRVRfUkVNT1ZFRDtcXG4yNTE5OlxcdFxcbjI1MjA6XFx0XFx0dnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuMjUyMTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjI1MjI6XFx0XFx0LypcXG4yNTIzOlxcdFxcdCAqIFdlIGNhbid0IHF1ZXVlIGV2ZW50cyBpZiB0aGUgYmFja2VuZCBoYXMgYmVlbiBjbGVhcmVkLCBiZWNhdXNlXFxuMjUyNDpcXHRcXHQgKiB3ZSBjb3VsZCBlbmQgdXAgcXVldWVpbmcgYW4gZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoLlxcbjI1MjU6XFx0XFx0ICovXFxuMjUyNjpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4yNTI3OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjI1Mjg6XFx0XFxuMjUyOTpcXHRcXHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19TQ1NJX0ZfSE9UUExVRykpXFxuMjUzMDpcXHRcXHRcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgdHBnLCBsdW4sXFxuMjUzMTpcXHRcXHRcXHRcXHRcXHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcXG4yNTMyOlxcdHVubG9jazpcXG4yNTMzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4yNTM0OlxcdH1cXG4yNTM1OlxcdFxcbjI1MzY6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXFxuMjUzNzpcXHR7XFxuMjUzODpcXHRcXHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIHRydWUpO1xcbjI1Mzk6XFx0fVxcbjI1NDA6XFx0XFxuMjU0MTpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHVucGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxcbjI1NDI6XFx0e1xcbjI1NDM6XFx0XFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCBmYWxzZSk7XFxuMjU0NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjI3LjE4MjQ0OTkzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMjkwMDA0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIHZob3N0LXNjc2kgRGVhZGxvY2sgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGB2aG9zdC1zY3NpYCBpc3N1ZSwgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgY2xlYXIuIEl0IHNlZW1zIGB2aG9zdF9zY3NpX2RvX3BsdWdgIHdhcyBhbHNvIGdyYWJiaW5nIHRoZSBgXHUwMDI2dnEtXHUwMDNlbXV0ZXhgIGxvY2ssIHdoaWNoIGlzIHRoZSBzYW1lIG11dGV4IHRoYXQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCB1c2VzLiBCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGZvcm1lciBmb3IgcGx1Z2dpbmcgb3BlcmF0aW9ucyBhbmQgdGhlIGxhdHRlciBmb3IgaGFuZGxpbmcgZXZlbnRzIGFyZSBjYWxsaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC5cblxuTm93LCB0aGUgY2xhc3NpYyBidWcgd2FzIGhlcmU6IFdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxlZCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdvdWxkIHByZXZpb3VzbHkgY2FsbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgKip0aGF0KiogZnVuY3Rpb24gd2FzIGdyYWJiaW5nIHRoZSBsb2NrIGFnYWluISBgbXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7YCBzcGVjaWZpY2FsbHkuIFNvLCB3ZSBoYWQgYSBjbGFzc2ljIG11dGV4IGRlYWRsb2NrIHNpdHVhdGlvbi5cblxuVGhlIGZpeCBJJ20gc2VlaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZXkndmUgcmVwbGFjZWQgdGhlIHByb2JsZW1hdGljIGNhbGwgd2l0aCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7YC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIG5ldyBmdW5jdGlvbiBkb2Vzbid0IHRyeSB0byBhY3F1aXJlIHRoZSBtdXRleCBpdHNlbGYuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgc3RhdGVzOiBcIkNhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC5cIiBUaGF0J3MgdGhlIGtleS5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB1c2VyIHNwYWNlIGNhbiBldmVuICpyZWFjaCogdGhpcyBgdmhvc3Qtc2NzaWAgY29kZS4gU28sIGxldCdzIHNlZSwgaXQgbG9va3MgbGlrZSBgdmhvc3Qtc2NzaWAgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgZGV2aWNlLCBgL2Rldi92aG9zdC1zY3NpYCwgb3IgaW9jdGxzIG9uIHZob3N0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRldmljZSBpcyBjcmVhdGVkIGFuZCBob3cgaXQncyB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgZml4IGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozMC4zMTE0NTMxMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg1NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pc2NfcmVnaXN0ZXJ8ZmlsZV9vcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2OD1zdGF0aWMgX19wb2xsX3Qgdmhvc3RfbmV0X2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzctXFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4OTQ9c3RhdGljIGludCBfX2luaXQgdmhvc3RfbmV0X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5Ny1cXHRcXHR2aG9zdF9uZXRfZW5hYmxlX3pjb3B5KFZIT1NUX05FVF9WUV9UWCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODk4OlxcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF9uZXRfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODk5LX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzODY9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjEtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2My1cXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Nzgte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0Nzk6XFx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4MC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0zMTc9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzU5LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF90ZXN0X2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzYxLVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTUzMz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTY3LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjktXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05NjQ9c3RhdGljIF9fcG9sbF90IHZob3N0X3Zzb2NrX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk3MS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Zzb2NrX2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk3My1cXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05OTA9c3RhdGljIGludCBfX2luaXQgdmhvc3RfdnNvY2tfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk5OC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTk5OlxcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDAwLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MzAuMzU4NDQ1MDY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDk3ODU2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gYHZob3N0LXNjc2lgIGhhcyBiZWVuIHJlZ2lzdGVyZWQuIFRoZSBrZXJuZWwgaXMgdXNpbmcgYG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKWAuIFRoYXQgbWVhbnMgaXQncyBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiBpdHMgcm9sZS4gV2UgaGF2ZSBhIHJlZ2lzdHJhdGlvbiwgc28gdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC5cblxuTm93LCBob3cgYXJlIExVTnMgY29uZmlndXJlZD8gQWhhLCBsb29rcyBsaWtlIHdlIGhhdmUgYSBjb3VwbGUgb2Ygb3B0aW9ucy4gSXQncyBlaXRoZXIgZ29pbmcgdG8gYmUgdXNpbmcgdGhlIHN0YW5kYXJkIGB0YXJnZXQvY29uZmlnZnNgIG1ldGhvZCwgb3IsIGFuZCB0aGlzIGlzIG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhbiBJL08gcGF0aCBwZXJzcGVjdGl2ZSwgdGhleSdyZSBsZWFuaW5nIG9uIHRoZSB2aXJ0aW8tc2NzaSB2aG9zdCdzIGlvY3Rscywgc3BlY2lmaWNhbGx5IGBWSE9TVF9TQ1NJX1NFVF9FTkRQT0lOVGAgYW5kIGBWSE9TVF9TQ1NJX0NMRUFSX0VORFBPSU5UYC4gVGhhdCBzaWduYWxzIGEgbW9yZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmhvc3QgbGF5ZXIgZm9yIGVuZHBvaW50IG1hbmFnZW1lbnQuXG5cblRpbWUgdG8gZGl2ZSBkZWVwZXIuIExldCdzIGRpZyBpbnRvIHRoYXQgYHZob3N0X3Njc2lfbWlzY2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVlbiByZWdpc3RlcmVkLCB3aGF0IHRoZSBpbnRlcmZhY2UgbG9va3MgbGlrZSwgYW5kIHdoYXQga2luZCBvZiBvcGVyYXRpb25zIGl0J3Mgc3VwcG9ydGluZy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGxpZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozMy42MDgyMzM3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTMwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfbWlzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ3MTpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3Rfc2NzaV9taXNjID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzItXFx0TUlTQ19EWU5BTUlDX01JTk9SLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ3Nz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9zY3NpX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3OC17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ3OTpcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgwLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0ODI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kZXJlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4My17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4NDpcXHRtaXNjX2RlcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjMzLjY1NjM2OTQ1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDYwNDg4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGl2ZSBmb3Igdmhvc3Qvc2NzaS5jKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zIG9mIGB2aG9zdC9zY3NpLmNgLCB3aGljaCBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIExldCdzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkb2VzIHRoaXMgcGllY2UgZml0IGludG8gdGhlIGxhcmdlciB2aG9zdCBmcmFtZXdvcmssIGFuZCBTQ1NJIHNwZWNpZmljYWxseT9cIiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBgY29uZmlnYCBzeW1ib2xzIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlIGB2aG9zdC9zY3NpLmNgLCBvciBwb3RlbnRpYWxseSBpbmRpcmVjdGx5IHRocm91Z2ggaXRzIGRlcGVuZGVuY2llcyBsaWtlIHRoZSB2aG9zdCBjb3JlIG9yIFNDU0kgc3Vic3lzdGVtIG9wdGlvbnMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgdHJpc3RhdGUgb3IgYm9vbGVhbiBzZXR0aW5ncyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGlzIG1vZHVsZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhlIGB2aG9zdC9zY3NpLmNgIG1vZHVsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzLiBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIG9wdGlvbmFsIGZlYXR1cmVzIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY29udHJvbGxlZCBieSBLY29uZmlnIHNldHRpbmdzIHdpdGhpbiB0aGlzIGZpbGU/IFRoaXMgc2VhcmNoIHdpbGwgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCB0byBnZXQgdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEkgd2lsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGlzIG1vZHVsZSwgc28gSSBhbSBwcmVwYXJlZCB0byBjb25maWd1cmUgdGhlIHN5c3RlbSB3aXRoIGFueSBkZWZhdWx0IGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjM2LjExNjg2MTMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk3MTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTI0MiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTItXFx0aGVscFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1MzpcXHRTYXkgTSBoZXJlIHRvIGVuYWJsZSB0aGUgdmhvc3Rfc2NzaSBUQ00gZmFicmljIG1vZHVsZVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NC1cXHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXFxuLS1cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlPTM9dmhvc3RfbmV0LXkgOj0gbmV0Lm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTQtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSArPSB2aG9zdF9zY3NpLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjY6dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU0OnN0YXRpYyB1bnNpZ25lZCBpbnQgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250ID0gVkhPU1RfU0NTSV9QUkVBTExPQ19TR0xTO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU2LSNpZmRlZiBDT05GSUdfQVJDSF9OT19TR19DSEFJTlxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU3OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTgtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02My0jZWxzZVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03OC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3OTpcXHR2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQgPSBjbnQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODAtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04My1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NDpzdGF0aWMgaW50IHZob3N0X3Njc2lfZ2V0X2lubGluZV9zZ19jbnQoY2hhciAqYnVmLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg1LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg2LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NzpcXHRyZXR1cm4gc3ByaW50ZihidWYsIFxcXCIldVxcXFxuXFxcIiwgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04OC19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfaW5saW5lX3NnX2NudF9vcCA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5MTpcXHQuZ2V0ID0gdmhvc3Rfc2NzaV9nZXRfaW5saW5lX3NnX2NudCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5MjpcXHQuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05My19O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk0LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk1Om1vZHVsZV9wYXJhbV9jYihpbmxpbmVfc2dfY250LCBcXHUwMDI2dmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250X29wLCBOVUxMLCAwNjQ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05Ni1NT0RVTEVfUEFSTV9ERVNDKGlubGluZV9zZ19jbnQsIFxcXCJTZXQgdGhlIG51bWJlciBvZiBzY2F0dGVybGlzdCBlbnRyaWVzIHRvIHByZS1hbGxvY2F0ZS4gVGhlIGRlZmF1bHQgaXMgMjA0OC5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMy1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDQ6c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNS1cXHQvKiBXYWl0IGZvciB0aGUgZmx1c2ggb3BlcmF0aW9uIHRvIGZpbmlzaCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTEwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjExMTpzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMi1cXHQvKiBEZXNjcmlwdG9yIGZyb20gdmhvc3RfZ2V0X3ZxX2Rlc2MoKSBmb3IgdmlydF9xdWV1ZSBzZWdtZW50ICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDMtXFx0LyogVXNlZCB0byB0cmFjayBpbmZsaWdodCBjbWQgKi9cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDQ6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0NS19O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0Ni1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDc6c3RydWN0IHZob3N0X3Njc2lfbmV4dXMge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0OC1cXHQvKiBQb2ludGVyIHRvIFRDTSBzZXNzaW9uIGZvciBJX1QgTmV4dXMgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTI6c3RydWN0IHZob3N0X3Njc2lfdHBnIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTMtXFx0LyogVmhvc3QgcG9ydCB0YXJnZXQgcG9ydGFsIGdyb3VwIHRhZyBmb3IgVENNICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTYtXFx0aW50IHR2X3RwZ19wb3J0X2NvdW50O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1NzpcXHQvKiBVc2VkIGZvciB2aG9zdF9zY3NpIGRldmljZSByZWZlcmVuY2UgdG8gdHBnX25leHVzLCBwcm90ZWN0ZWQgYnkgdHZfdHBnX211dGV4ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU4LVxcdGludCB0dl90cGdfdmhvc3RfY291bnQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjAtXFx0aW50IHR2X2ZhYnJpY19wcm90X3R5cGU7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYxOlxcdC8qIGxpc3QgZm9yIHZob3N0X3Njc2lfbGlzdCAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2Mi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHR2X3RwZ19saXN0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY1LVxcdC8qIFBvaW50ZXIgdG8gdGhlIFRDTSBWSG9zdCBJX1QgTmV4dXMgZm9yIHRoaXMgVFBHIGVuZHBvaW50ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY2OlxcdHN0cnVjdCB2aG9zdF9zY3NpX25leHVzICp0cGdfbmV4dXM7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY3OlxcdC8qIFBvaW50ZXIgYmFjayB0byB2aG9zdF9zY3NpX3Rwb3J0ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY4OlxcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjk6XFx0LyogUmV0dXJuZWQgYnkgdmhvc3Rfc2NzaV9tYWtlX3RwZygpICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTcwLVxcdHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgc2VfdHBnO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE3MTpcXHQvKiBQb2ludGVyIGJhY2sgdG8gdmhvc3Rfc2NzaSwgcHJvdGVjdGVkIGJ5IHR2X3RwZ19tdXRleCAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE3MjpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdmhvc3Rfc2NzaTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzMtfTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTc1OnN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzYtXFx0LyogU0NTSSBwcm90b2NvbCB0aGUgdHBvcnQgaXMgcHJvdmlkaW5nICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODEtXFx0Y2hhciB0cG9ydF9uYW1lW1ZIT1NUX1NDU0lfTkFNRUxFTl07XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgyOlxcdC8qIFJldHVybmVkIGJ5IHZob3N0X3Njc2lfbWFrZV90cG9ydCgpICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzLVxcdHN0cnVjdCBzZV93d24gdHBvcnRfd3duO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTg1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4NjpzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4Ny1cXHQvKiBldmVudCB0byBiZSBzZW50IHRvIGd1ZXN0ICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTM9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xOTktLyogTm90ZTogY2FuJ3Qgc2V0IFZJUlRJT19GX1ZFUlNJT05fMSB5ZXQsIHNpbmNlIHRoYXQgaW1wbGllcyBBTllfTEFZT1VULiAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIwMDpzdGF0aWMgY29uc3QgaW50IHZob3N0X3Njc2lfYml0c1tdID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwMS1cXHRWSE9TVF9GRUFUVVJFUyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwNS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMDY6I2RlZmluZSBWSE9TVF9TQ1NJX0ZFQVRVUkVTIFZIT1NUX0ZFQVRVUkVTX1U2NCh2aG9zdF9zY3NpX2JpdHMsIDApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjA3LVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjExLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxMjpzdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxMzptb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTQtTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCBcXFwiU2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXFxcIik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxNjpzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNy1cXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHZxO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxODpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE5LVxcdC8qXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjMtXFx0ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjI0OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0IGluZmxpZ2h0c1syXTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjUtXFx0LypcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyOS1cXHRpbnQgaW5mbGlnaHRfaWR4O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMDpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKnNjc2lfY21kcztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzEtXFx0c3RydWN0IHNiaXRtYXAgc2NzaV90YWdzO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM4LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzOTpzdHJ1Y3Qgdmhvc3Rfc2NzaSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQwOlxcdC8qIFByb3RlY3RlZCBieSB2aG9zdF9zY3NpLVxcdTAwM2VkZXYubXV0ZXggKi9cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDE6XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnICoqdnNfdHBnO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Mi1cXHRjaGFyIHZzX3Zob3N0X3d3cG5bVFJBTlNQT1JUX0lRTl9MRU5dO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0LVxcdHN0cnVjdCB2aG9zdF9kZXYgZGV2O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NTpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnZxcztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDY6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKipvbGRfaW5mbGlnaHQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3LVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU2LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1NzpzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1OC1cXHRzdHJ1Y3Qgdmhvc3Rfd29yayB2d29yaztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTktXFx0c3RydWN0IHdvcmtfc3RydWN0IGZsdXNoX3dvcms7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjYwOlxcdHN0cnVjdCB2aG9zdF9zY3NpICp2aG9zdDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNjE6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjYyLVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjY0LVxcdHU4IHNjc2lfcmVzcDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNjU6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI2Ni1cXHRzdHJ1Y3QgaW92ZWMgcmVzcF9pb3Y7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNzktICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjgwOnN0cnVjdCB2aG9zdF9zY3NpX2N0eCB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjgxLVxcdGludCBoZWFkO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjkwLS8qXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjkxOiAqIEdsb2JhbCBtdXRleCB0byBwcm90ZWN0IHZob3N0X3Njc2kgVFBHIGxpc3QgZm9yIHZob3N0IElPQ1RMcyBhbmQgTElPXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjkyLSAqIGNvbmZpZ2ZzIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTMtICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mjk0OnN0YXRpYyBERUZJTkVfTVVURVgodmhvc3Rfc2NzaV9tdXRleCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mjk1OnN0YXRpYyBMSVNUX0hFQUQodmhvc3Rfc2NzaV9saXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTYtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mjk3OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZG9uZV9pbmZsaWdodChzdHJ1Y3Qga3JlZiAqa3JlZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTgte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5OTpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzAwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMwMTpcXHRpbmZsaWdodCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCwga3JlZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzAyLVxcdGNvbXBsZXRlKFxcdTAwMjZpbmZsaWdodC1cXHUwMDNlY29tcCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMDQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzA1OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaW5pdF9pbmZsaWdodChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzA2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqb2xkX2luZmxpZ2h0W10pXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzA3LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMDg6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKm5ld19pbmZsaWdodDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMDktXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMzEtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzMyOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzMzOnZob3N0X3Njc2lfZ2V0X2luZmxpZ2h0KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMzNC17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzM1OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMzY6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzM3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMzODpcXHRzdnEgPSBjb250YWluZXJfb2YodnEsIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMzOS1cXHRpbmZsaWdodCA9IFxcdTAwMjZzdnEtXFx1MDAzZWluZmxpZ2h0c1tzdnEtXFx1MDAzZWluZmxpZ2h0X2lkeF07XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzQ1OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcHV0X2luZmxpZ2h0KHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDYte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM0NzpcXHRrcmVmX3B1dChcXHUwMDI2aW5mbGlnaHQtXFx1MDAzZWtyZWYsIHZob3N0X3Njc2lfZG9uZV9pbmZsaWdodCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzQ4LX1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzUwOnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jaGVja190cnVlKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNTEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzU0LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1NTpzdGF0aWMgY2hhciAqdmhvc3Rfc2NzaV9nZXRfZmFicmljX3d3bihzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzU2LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNTc6XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcgPSBjb250YWluZXJfb2Yoc2VfdHBnLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1ODpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzU5OlxcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydCA9IHRwZy1cXHUwMDNldHBvcnQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzYwLVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzYzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM2NDpzdGF0aWMgdTE2IHZob3N0X3Njc2lfZ2V0X3RwZ3Qoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2NS17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzY2OlxcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnID0gY29udGFpbmVyX29mKHNlX3RwZyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjc6XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnLCBzZV90cGcpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2OC1cXHRyZXR1cm4gdHBnLVxcdTAwM2V0cG9ydF90cGd0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzcwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM3MTpzdGF0aWMgaW50IHZob3N0X3Njc2lfY2hlY2tfcHJvdF9mYWJyaWNfb25seShzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzcyLXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNzM6XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcgPSBjb250YWluZXJfb2Yoc2VfdHBnLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM3NDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzc1LVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzc4LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM3OTpzdGF0aWMgaW50IHZob3N0X3Njc2lfY29weV9jbWRfbG9nKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM4MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zODEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHZob3N0X2xvZyAqbG9nLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzk3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM5ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zOTktXFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF9sb2cgKmxvZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQxNS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MTY6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQxNy17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDE4OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqdHZfY21kID0gY29udGFpbmVyX29mKHNlX2NtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MTk6XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfY21kLCB0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MjA6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2YodHZfY21kLVxcdTAwM2V0dmNfdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDIxOlxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMjpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBzdnEtXFx1MDAzZXZzO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMzpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQgPSB0dl9jbWQtXFx1MDAzZWluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyNC1cXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU0LVxcdHNiaXRtYXBfY2xlYXJfYml0KFxcdTAwMjZzdnEtXFx1MDAzZXNjc2lfdGFncywgc2VfY21kLVxcdTAwM2VtYXBfdGFnKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NTU6XFx0dmhvc3Rfc2NzaV9wdXRfaW5mbGlnaHQoaW5mbGlnaHQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ1Ni19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ1ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NTkte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ2MDpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQgPSB0bWYtXFx1MDAzZWluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ2MS1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ2Ni1cXHRrZnJlZSh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ2NzpcXHR2aG9zdF9zY3NpX3B1dF9pbmZsaWdodChpbmZsaWdodCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDY4LX1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NjktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcwOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZHJvcF9jbWRzKHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3MS17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcyOlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCAqdDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzMtXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3Ni1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgdCwgbGxub2RlLCB0dmNfY29tcGxldGlvbl9saXN0KVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ3NzpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzgtfVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3OS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODA6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDgxLXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODItXFx0aWYgKHNlX2NtZC1cXHUwMDNlc2VfY21kX2ZsYWdzIFxcdTAwMjYgU0NGX1NDU0lfVE1SX0NEQikge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4MzpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZiA9IGNvbnRhaW5lcl9vZihzZV9jbWQsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDg0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3RtZiwgc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODUtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODctXFx0fSBlbHNlIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4OTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQsIHR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ5MDpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cSA9ICBjb250YWluZXJfb2YoY21kLVxcdTAwM2V0dmNfdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDkxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5Mi1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5NC1cXHRcXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnN2cS1cXHUwMDNldnEsIFxcdTAwMjZzdnEtXFx1MDAzZWNvbXBsZXRpb25fd29yaykpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDk1OlxcdFxcdFxcdHZob3N0X3Njc2lfZHJvcF9jbWRzKHN2cSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDk2LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5OC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTk6c3RhdGljIGludCB2aG9zdF9zY3NpX3dyaXRlX3BlbmRpbmcoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUwMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTA2OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9xdWV1ZV9kYXRhX2luKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDcte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTExLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxMjpzdGF0aWMgaW50IHZob3N0X3Njc2lfcXVldWVfc3RhdHVzKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTE3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTE5LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1MjA6XFx0c3RydWN0IHZob3N0X3Njc2lfdG1mICp0bWYgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2VfY21kKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUyNi1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1Mjc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9hYm9ydGVkX3Rhc2soc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUyOC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MzEtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTMyOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZnJlZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MzMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTM3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzODpzdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1Mzk6dmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU0MC1cXHRcXHQgICAgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTQyLVxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU0MzpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDQtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NTEtXFx0aWYgKCFldnQpIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1NTI6XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIHZob3N0X3Njc2lfZXZ0XFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NTMtXFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTYzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU2NDpzdGF0aWMgaW50IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NjUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NTY5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTcwOnZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NzEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjI3LVxcdGVsc2VcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2Mjg6XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXFxcblxcXCIpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYyOS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2MzA6XFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMxLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzMy0vKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM1LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2MzY6XFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzNy1cXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQxLVxcdFxcdGlmICghZHJvcClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDI6XFx0XFx0XFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDM6XFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDQtXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQ2LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0NzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDgte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUxLVxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjUyOlxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1My1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjU2OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU3LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTg6XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1OS1cXHRcXHRcXHRcXHRcXHQgICAgIHZzX2V2ZW50X3dvcmspO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY2MDpcXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2MS19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjYyLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY2MzpzdGF0aWMgaW50IHZob3N0X3Njc2lfY29weV9zZ2xfdG9faW92KHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2NC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02OTItICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjkzOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfY21kX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjk0LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2OTU6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2Yod29yayxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2OTY6XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlLCBjb21wbGV0aW9uX3dvcmspO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY5Ny1cXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3Jlc3Agdl9yc3A7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Njk4OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCAqdDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02OTktXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTcxNS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3MTY6XFx0XFx0aWYgKGNtZC1cXHUwMDNlcmVhZF9pdGVyIFxcdTAwMjZcXHUwMDI2IHZob3N0X3Njc2lfY29weV9zZ2xfdG9faW92KGNtZCkpIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03MTctXFx0XFx0XFx0dl9yc3AucmVzcG9uc2UgPSBWSVJUSU9fU0NTSV9TX0JBRF9UQVJHRVQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03MzgtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzM5OlxcdFxcdHZob3N0X3Njc2lfbG9nX3dyaXRlKGNtZC1cXHUwMDNldHZjX3ZxLCBjbWQtXFx1MDAzZXR2Y19sb2csXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzQwLVxcdFxcdFxcdFxcdCAgICAgY21kLVxcdTAwM2V0dmNfbG9nX251bSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzQxLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc0MjpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhzZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0My1cXHR9XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NTAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzUxOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKlxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1Mjp2aG9zdF9zY3NpX2dldF9jbWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHU2NCBzY3NpX3RhZylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NTMte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1NDpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cSA9IGNvbnRhaW5lcl9vZih2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NTU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlLCB2cSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzU2OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc1Ny1cXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgKnByb3Rfc2dsO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzc1LVxcdGNtZC1cXHUwMDNldHZjX3NlX2NtZC5tYXBfdGFnID0gdGFnO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc3NjpcXHRjbWQtXFx1MDAzZWluZmxpZ2h0ID0gdmhvc3Rfc2NzaV9nZXRfaW5mbGlnaHQodnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc3Ny1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc4MC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3ODE6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZXZlcnRfbWFwX2lvdl90b19zZ2woc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc4Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqY3VycixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTgwNz1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6ODA4OnZob3N0X3Njc2lfbWFwX3RvX3NnbChzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04MDktXFx0XFx0ICAgICAgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODEzLXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4MTQ6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2YoY21kLVxcdTAwM2V0dmNfdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6ODE1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTgxNi1cXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gc3ZxLVxcdTAwM2V1cGFnZXM7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04NTktcmV2ZXJ0X2l0ZXJfZ2V0X3BhZ2VzOlxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjg2MDpcXHR2aG9zdF9zY3NpX3JldmVydF9tYXBfaW92X3RvX3NnbChpdGVyLCAqc2dsLCBzZyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODYxLVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9ODczPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NzQ6dmhvc3Rfc2NzaV9jYWxjX3NnbHMoc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgYnl0ZXMsIGludCBtYXhfc2dscylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04NzUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9ODkzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4OTQ6dmhvc3Rfc2NzaV9jb3B5X2lvdl90b19zZ2woc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04OTUtXFx0XFx0XFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZSwgaW50IHNnX2NvdW50LFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9OTUzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5NTQ6dmhvc3Rfc2NzaV9tYXBfaW92X3RvX3NnbChzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk1NS1cXHRcXHRcXHQgIHN0cnVjdCBzZ190YWJsZSAqc2dfdGFibGUsIGludCBzZ19jb3VudCwgYm9vbCBpc19wcm90KVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTYwLVxcdHdoaWxlIChpb3ZfaXRlcl9jb3VudChpdGVyKSkge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk2MTpcXHRcXHRyZXQgPSB2aG9zdF9zY3NpX21hcF90b19zZ2woY21kLCBpdGVyLCBzZ190YWJsZSwgXFx1MDAyNnNnLCBpc19wcm90KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NjItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5NjM6XFx0XFx0XFx0dmhvc3Rfc2NzaV9yZXZlcnRfbWFwX2lvdl90b19zZ2woaXRlciwgc2dfdGFibGUtXFx1MDAzZXNnbCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NjQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNnKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTk3Mj1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTczOnZob3N0X3Njc2lfbWFwYWwoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NzQtXFx0XFx0IHNpemVfdCBwcm90X2J5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKnByb3RfaXRlcixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk3OS1cXHRpZiAocHJvdF9ieXRlcykge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk4MDpcXHRcXHRzZ2xfY291bnQgPSB2aG9zdF9zY3NpX2NhbGNfc2dscyhwcm90X2l0ZXIsIHByb3RfYnl0ZXMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTgxLVxcdFxcdFxcdFxcdFxcdFxcdCBWSE9TVF9TQ1NJX1BSRUFMTE9DX1BST1RfU0dMUyk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05OTUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTk2OlxcdFxcdHJldCA9IHZob3N0X3Njc2lfbWFwX2lvdl90b19zZ2woY21kLCBwcm90X2l0ZXIsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTk3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQtXFx1MDAzZXByb3RfdGFibGUsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDA1LVxcdH1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDA2OlxcdHNnbF9jb3VudCA9IHZob3N0X3Njc2lfY2FsY19zZ2xzKGRhdGFfaXRlciwgZGF0YV9ieXRlcyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDA3LVxcdFxcdFxcdFxcdFxcdCBWSE9TVF9TQ1NJX1BSRUFMTE9DX1NHTFMpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDIxOlxcdHJldCA9IHZob3N0X3Njc2lfbWFwX2lvdl90b19zZ2woY21kLCBkYXRhX2l0ZXIsIFxcdTAwMjZjbWQtXFx1MDAzZXRhYmxlLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMjItXFx0XFx0XFx0XFx0XFx0Y21kLVxcdTAwM2V0dmNfc2dsX2NvdW50LCBmYWxzZSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMy1cXHRpZiAocmV0ID09IC1FSU5WQUwpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTAyNDpcXHRcXHRyZXQgPSB2aG9zdF9zY3NpX2NvcHlfaW92X3RvX3NnbChjbWQsIGRhdGFfaXRlciwgXFx1MDAyNmNtZC1cXHUwMDNldGFibGUsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyNS1cXHRcXHRcXHRcXHRcXHRcXHQgY21kLVxcdTAwM2V0dmNfc2dsX2NvdW50LCBkYXRhX2Rpcik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDMzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwMzQ6c3RhdGljIGludCB2aG9zdF9zY3NpX3RvX3RjbV9hdHRyKGludCBhdHRyKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMzUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA1MC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDUxOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdGFyZ2V0X3F1ZXVlX2NtZChzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqbmV4dXMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTA1MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDUzLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmNkYiwgdTE2IGx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNzMtXFx0dGFyZ2V0X2luaXRfY21kKHNlX2NtZCwgbmV4dXMtXFx1MDAzZXR2bl9zZV9zZXNzLCBcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2Vuc2VfYnVmWzBdLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwNzQ6XFx0XFx0XFx0bHVuLCBleHBfZGF0YV9sZW4sIHZob3N0X3Njc2lfdG9fdGNtX2F0dHIodGFza19hdHRyKSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDc1LVxcdFxcdFxcdGRhdGFfZGlyLCBUQVJHRVRfU0NGX0FDS19LUkVGKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEwODU9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDg2OnZob3N0X3Njc2lfc2VuZF9zdGF0dXMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDg3OlxcdFxcdCAgICAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHggKnZjLCB1OCBzdGF0dXMpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA4OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMTExPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTExMjp2aG9zdF9zY3NpX3NlbmRfYmFkX3RhcmdldChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTExMy1cXHRcXHRcXHQgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMTE0OlxcdFxcdFxcdCAgIHN0cnVjdCB2aG9zdF9zY3NpX2N0eCAqdmMsIGludCB0eXBlKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTE0OT1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTE1MDp2aG9zdF9zY3NpX2dldF9kZXNjKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTE1MTpcXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMTUyLVxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSlcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyMDM9c3RhdGljIGludFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMDQ6dmhvc3Rfc2NzaV9jaGtfc2l6ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjA1LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyMjE9c3RhdGljIGludFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMjI6dmhvc3Rfc2NzaV9nZXRfcmVxKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHggKnZjLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMjM6XFx0XFx0ICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICoqdHBncClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjI0LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyMzMtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjM0OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqKnZzX3RwZywgKnRwZyA9IE5VTEw7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIzNS1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyNTI9c3RhdGljIGludFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyNTM6dmhvc3Rfc2NzaV9zZXR1cF9yZXNwX2lvdnMoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZlYyAqaW5faW92cyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjU0LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpbl9pb3ZzX2NudClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyOTM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjk0OnZob3N0X3Njc2lfaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTI5NS17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTI5NjpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKip2c190cGcsICp0cGc7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTI5Ny1cXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3JlcSB2X3JlcTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjk4LVxcdHN0cnVjdCB2aXJ0aW9fc2NzaV9jbWRfcmVxX3BpIHZfcmVxX3BpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyOTk6XFx0c3RydWN0IHZob3N0X3Njc2lfbmV4dXMgKm5leHVzO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEzMDA6XFx0c3RydWN0IHZob3N0X3Njc2lfY3R4IHZjO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEzMDE6XFx0c3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTMwMi1cXHRzdHJ1Y3QgaW92X2l0ZXIgaW5faXRlciwgcHJvdF9pdGVyLCBkYXRhX2l0ZXI7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMzMwLVxcdGRvIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMzMxOlxcdFxcdHJldCA9IHZob3N0X3Njc2lfZ2V0X2Rlc2ModnMsIHZxLCBcXHUwMDI2dmMsIHZxX2xvZywgXFx1MDAyNmxvZ19udW0pO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozNi4xNjk4MzY5MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA5Mjk5MjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVkhPU1RfU0NTSSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBCZWZvcmUgSSBzdGFydCBkZWJ1Z2dpbmcgYW55dGhpbmcgb3IgbWFraW5nIGFueSBjaGFuZ2VzLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVuZGVkIGJlaGF2aW9yIG9mIGBDT05GSUdfVkhPU1RfU0NTSWAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdmhvc3QsIGFuZCBpdCdsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4gSSdtIGhvcGluZyB0byBmaW5kOlxuXG4qICAgKipQcmVyZXF1aXNpdGVzOioqIFdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBDT05GSUdfVkhPU1RfU0NTSWAgdG8gZXZlbiBtYWtlIHNlbnNlPyBBcmUgdGhlcmUgc3BlY2lmaWMgU0NTSSBjb250cm9sbGVyIG9wdGlvbnMgdGhhdCBtdXN0IGJlIHNlbGVjdGVkIGZpcnN0PyBNYXliZSBzb21lIHNwZWNpZmljIHZpcnRpbyBmZWF0dXJlcz9cbiogICAqKkNvbnRleHQ6KiogV2hhdCBkb2VzIGBDT05GSUdfVkhPU1RfU0NTSWAgYWN0dWFsbHkgKmRvKj8gV2hhdCdzIHRoZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uPyBEb2VzIGl0IHByb3ZpZGUgYSB2aG9zdCBpbnRlcmZhY2UgZm9yIGEgcGFydGljdWxhciB0eXBlIG9mIHN0b3JhZ2UsIG9yIGlzIGl0IG1vcmUgZ2VuZXJpYz9cbiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGVyZSdzIGEgaGVscGZ1bCBkZXNjcmlwdGlvbiBvciBldmVuIGEgbGluayB0byBmdXJ0aGVyIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGZpbGUuIFRoYXQncyBhbHdheXMgYSBib251cywgc2F2ZXMgbWUgZnJvbSBoYXZpbmcgdG8gYmFja3RyYWNrIGFuZCBkaWcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgaW1tZWRpYXRlbHkuIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgcGljdHVyZSBoZXJlLlxuXG5Gcm9tIHRoZXJlLCBJIGNhbiBidWlsZCB1cCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgKnN1cHBvc2VkKiB0byB3b3JrLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBkZXZlbG9wIGEgcGxhbiBmb3IgdGVzdGluZyBvciBtb2RpZmljYXRpb24sIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozOS4yNjI4MzE4OTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcXG4gIDQxOlxcdFxcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNDQ6XFx0XFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgVkhPU1RfU0NTSVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDQ5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNTA6XFx0XFx0c2VsZWN0IFNHX1BPT0xcXG4gIDUxOlxcdFxcdGRlZmF1bHQgblxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcXG4gIDU0OlxcdFxcdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIFZIT1NUX1ZTT0NLXFxuICA1NzpcXHRcXHR0cmlzdGF0ZSBcXFwidmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclxcXCJcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNTk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA2MDpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNjE6XFx0XFx0ZGVmYXVsdCBuXFxuICA2MjpcXHRcXHRoZWxwXFxuICA2MzpcXHRcXHRUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcHJvdmlkZSBBRl9WU09DS1xcbiAgNjQ6XFx0XFx0c29ja2V0cyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGd1ZXN0cy4gIFRoZSBndWVzdHMgbXVzdCBoYXZlIHRoZVxcbiAgNjU6XFx0XFx0dmlydGlvX3RyYW5zcG9ydC5rbyBkcml2ZXIgbG9hZGVkIHRvIHVzZSB0aGUgdmlydGlvLXZzb2NrIGRldmljZS5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgNjg6XFx0XFx0dmhvc3RfdnNvY2suXFxuICA2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MzkuMjYyOTAzMzM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTcyMjkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdmhvc3Rfc2NzaWAgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1ZIT1NUX1NDU0lgIHJlbGllcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIEZpcnN0IHF1ZXN0aW9uOiBpcyBgdmhvc3Rfc2NzaWAgc29tZXRoaW5nIHN5emthbGxlciBjYW4gZXZlbiAqcmVhY2gqPyBZZXMsIGl0IGxvb2tzIGxpa2UgaXQgb3BlbnMgYC9kZXYvdmhvc3Qtc2NzaWAgYW5kIHVzZXMgdGhlIHN0YW5kYXJkIGlvY3RscyBsaWtlIGBWSE9TVF9TRVRfT1dORVJgLCBgVkhPU1RfU0NTSV9TRVRfRU5EUE9JTlRgLCBhbmQgc28gb24sIGFsb25nc2lkZSB0YXJnZXQgY29yZSBjb25maWdmcyBhdCBgL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC8uLi5gLiBHb29kLiBUaGF0J3MgYSBzb2xpZCBzdGFydC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgc3l6a2FsbGVyIGhhcyB0aGUgbmVjZXNzYXJ5IGRlc2NyaXB0aW9ucyBmb3IgdGhvc2UgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYC9kZXYvdmhvc3Qtc2NzaWAgYW5kIHRoZSB2aG9zdCBpb2N0bHMgaW4gZ2VuZXJhbC4gQWgsIGdvb2QgbmV3cywgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IGl0ISBFdmVuIGJldHRlciwgdGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgbWVudGlvbnMgdmlydHVhbCBidXNlcyBsaWtlIHZpcnRpbyDigJMgYW5kIHRoYXQgaW5jbHVkZXMgYHZob3N0X3Njc2lgIGJ5IGltcGxpY2F0aW9uLiBTbywgd2UncmUgZGVmaW5pdGVseSBpbiB0aGUgXCJyZWFjaGFibGUgZHJpdmVyXCIgY2F0ZWdvcnkgYXMgcGVyIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuXG5cbk5vdywgdW5kZXIgU2VjdGlvbiAzLCB0aGUgY3JpdGVyaWEgc3RhdGUgdGhhdCB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgYW5kIG9mIGNvdXJzZSwgcmVhY2hhYmxlIGRyaXZlcnMuIFRoaXMgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIGEgcmVhY2hhYmxlIGRyaXZlci5cblxuTm93LCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoaXMgc3BlY2lmaWMgcGF0Y2g6IGl0IG1vZGlmaWVzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYW5kIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgZXNzZW50aWFsbHkgc3BsaXR0aW5nIG91dCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoaXMgaXMgaW50cmlndWluZy4gSXQncyBhIHJlZmFjdG9yaW5nLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgY2hhbmdlLiBXaGF0J3MgdGhlIHJhdGlvbmFsZT9cblxuVGltZSB0byBjaGVjayB0aGUgZ2l0IGxvZy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZSBjb250ZXh0Li4uIHRoZSBmdWxsIGhpc3Rvcnkgb2YgdGhlIGNoYW5nZS4gTGV0J3MgbG9vayBhdCBgZ2l0IGxvZyAtMWAgb3IgbGluZXMgNjMwLTY2MCBvZiBgZHJpdmVycy92aG9zdC9zY3NpLmNgIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaGFwcGVuZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSByZWZhY3RvcmluZyB0aGF0IGV4cG9zZXMgbmV3IHBvdGVudGlhbCBmdXp6aW5nIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NDQuMTIwMTM0ODAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0XFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuIDYzMTpcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cXG4gNjM0OlxcdHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCwgKnQ7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuIDY0MDpcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XFxuIDY0MTpcXHRcXHRcXHRpZiAoIWRyb3ApXFxuIDY0MjpcXHRcXHRcXHRcXHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xcbiA2NDM6XFx0XFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG4gNjQ0OlxcdFxcdH1cXG4gNjQ1OlxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDY0ODpcXHR7XFxuIDY0OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gNjUyOlxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xcbiA2NTM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiA2NTQ6XFx0fVxcbiA2NTU6XFx0XFxuIDY1NjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxcbiA2NTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG4gNjYwOlxcdFxcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jb3B5X3NnbF90b19pb3Yoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQpXFxuIDY2NDpcXHR7XFxuIDY2NTpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIgPSBjbWQtXFx1MDAzZXJlYWRfaXRlcjtcXG4gNjY2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIDY2NzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gNjY4OlxcdFxcdHNpemVfdCBsZW47XFxuIDY2OTpcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NDQuMTIwMjY5NzQxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4MTcyMDMzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuZCBGaXhpbmcgYSBQb3RlbnRpYWwgUmVjdXJzaXZlIE11dGV4IERlYWRsb2NrIGluIHZob3N0LXNjc2kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBkZWFkbG9jayBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0IHNlZW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBldmVudHMgdG8gdGhlIHZpcnR1YWwgU0NTSSBiYWNrZW5kLiBJdCBhbGxvY2F0ZXMgYW4gYHZob3N0X3Njc2lfZXZ0YCBzdHJ1Y3R1cmUsIHBvcHVsYXRlcyBpdCB3aXRoIGV2ZW50IGRhdGEgKGluY2x1ZGluZyBMVU4gaW5mb3JtYXRpb24gd2hlbiBhcHBsaWNhYmxlKSwgYW5kIGFkZHMgaXQgdG8gYW4gZXZlbnQgbGlzdC4gQ3J1Y2lhbGx5LCBpdCB0aGVuIGNhbGxzIGB2aG9zdF92cV93b3JrX3F1ZXVlYCB0byBzY2hlZHVsZSBwcm9jZXNzaW5nIG9mIHRoZSBldmVudC5cblxuVGhlIGNyaXRpY2FsIGlzc3VlIGFyaXNlcyB3aGVuIGB2aG9zdF92cV93b3JrX3F1ZXVlYCAqZmFpbHMqLiBUaGlzIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMgcmVhc29uczogdGhlIHdvcmsgcXVldWUgY291bGQgYmUgc3RvcHBlZCwgbm90IHJ1bm5pbmcsIG9yIHRoZXJlIGNvdWxkIGJlIHNvbWUgb3RoZXIgcmVzb3VyY2UgY29uc3RyYWludC4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGlmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmYWlsZWQsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgIHdhcyBjYWxsZWQuIFRoZSBwcm9ibGVtPyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdhcyB0cnlpbmcgdG8gYWNxdWlyZSBgdnEtXHUwMDNlbXV0ZXhgIVxuXG5Mb29raW5nIGF0IHRoZSBjb250ZXh0LCBhbmQgd2hhdCB0aGUgY29kZSBpcyBkb2luZywgSSBzZWUgdGhhdCB0aGlzIG11dGV4IGlzIGFscmVhZHkgKmhlbGQqIGJ5IHRoZSBjYWxsZXIgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgISBDYWxscyBzdWNoIGFzIHRob3NlIG1hZGUgYnkgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGxvY2sgdGhlIHZxIG11dGV4IGJlZm9yZSBjYWxsaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC4gU28sIGlmIHRoZSB3b3JrIHF1ZXVlIGZhaWxzLCBhbmQgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB0cmllcyB0byByZWFjcXVpcmUgdGhlIHNhbWUgbXV0ZXgsIHdlIGhhdmUgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2suIFRoYXQncyBhIGNsYXNzaWMgZXJyb3IsIGFuZCB0aGlzIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgdGhhdC5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IEluc3RlYWQgb2YgY2FsbGluZyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCBkb2VzIHRoZSBsb2NrLCB3ZSBjYWxsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgcmVhY3F1aXJpbmcgdGhlIGxvY2sgYW5kIHByZXZlbnRzIHRoZSBkZWFkbG9jay5cblxuSSdkIGFsc28gbGlrZSB0byBtYWtlIGEgcXVpY2sgbm90ZSB0aGF0IHRoZSBMVU4gcG9wdWxhdGlvbiBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgbG9va3MgYSBsaXR0bGUgY29udm9sdXRlZC4gVGhlcmUncyBhIGNvbW1lbnQgYWJvdXQgc2hhcmluZyBzZXR1cCBjb2RlIHdpdGggYHZpcnRpby1zY3NpLmtvYCwgc28gcGVyaGFwcyB0aGVyZSdzIGFuIG9wcG9ydHVuaXR5IGZvciBzb21lIGNvZGUgY29uc29saWRhdGlvbiB0aGVyZSBkb3duIHRoZSBsaW5lLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgZWxzZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZml4IGNvdmVycyBhbGwgcG9zc2libGUgZGVhZGxvY2sgc2NlbmFyaW9zLiBJJ2xsIGdyZXAgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODo0OS45Mzc0NzU0NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzQwNzY4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9NTcwPXZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzMy0vKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM1LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0Ni1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQ4LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY1MjpcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NjU2PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTktXFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NjA6XFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjEtfVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM4LVxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM5OlxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODo1MS42MTE1NTc4MDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYxODg2MjA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AsIGNhbGxzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpYC4gVGhhdCdzIHRoZSBrZXkgbGluZSB0byBmb2N1cyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnV6emFibGU/XCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LlxuXG5GaXJzdCwgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IFllcywgdGhlIHBhdGggYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBjbGVhcmx5IGlkZW50aWZpZXMgdGhpcyBhcyB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIsIGFuZCBhIHJlbGV2YW50IGRyaXZlciBhdCB0aGF0LiBTbywgdGhlIGNvZGUgcGF0aCBpdHNlbGYgaXMgdmlhYmxlLiBHb29kLlxuXG5Ob3csIGRvZXMgaXQgbWVldCB0aGUgZnV6emluZyBjcml0ZXJpYT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIERvIGFueSBvZiB0aGVzZSBhcHBseT8gTm9wZS4gSXQncyBub3QgZG9jdW1lbnRhdGlvbiwgaXQncyBub3QgdXNlci1zcGFjZSBjb2RlLCBpdCdzIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGFuZCBpdCdzIG5vdCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbid0IGFmZmVjdCBjb21waWxlZCBsb2dpYy4gQWxzbywgdGhpcyBpc24ndCBzb21lIHVucmVhY2hhYmxlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgYW5kIGl0J3Mgbm90IGEgdGVhcmRvd24gcGF0aCBleGVjdXRlZCBvbmx5IGR1cmluZyBob3QtdW5wbHVnLlxuXG5TaW5jZSBub25lIG9mIHRoZSBuZWdhdGl2ZSBjb25kaXRpb25zIGFwcGx5LCBsZXQncyBsb29rIGF0IHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gRG9lcyBpdCB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlPyBZZXMhICBBbmQgZXZlbiBiZXR0ZXIsIHRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgaXQgaXMgd29ydGh3aGlsZS4gQW5kIGl0IGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMqIHNpbmNlIGl04oCZcyBhc3NvY2lhdGVkIHdpdGggYSB2aXJ0dWFsIGJ1cy4gKkRlZmluaXRlbHkgd29ydGggZnV6emluZyEqXG5cblNvLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gIE5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncz8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgYWdhaW4gdG8gd29yayBvdXQgdGhlIGBFbmFibGVDb25maWdzYC4gSXQgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gVGhpcyBpcyBrZXkgaW5mb3JtYXRpb24gZm9yIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuICBXZSdsbCBuZWVkIHRvIGV4YW1pbmUgd2hhdCdzIHJlcXVpcmVkIGZvciBgVEFSR0VUX0NPUkVgIHRvIGJlIGVuYWJsZWQsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODo1Ni4yMzA0MjM0MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Njc4MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUQVJHRVRfQ09SRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3RhcmdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90YXJnZXQvS2NvbmZpZy0yLVxcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjU2LjI3OTEyOTU4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTU3NTk5MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBUQVJHRVRfQ09SRWAuIFdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0PyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGluIHRoZSBgZHJpdmVycy90YXJnZXRgIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEknbGwgb3BlbiB1cCBgZHJpdmVycy90YXJnZXQvS2NvbmZpZ2AgYW5kIHNjYW4gdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgdGhlIGBUQVJHRVRfQ09SRWAgc3ltYm9sLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGBjb25maWcgVEFSR0VUX0NPUkVgIGJsb2NrIHdpdGggYSBkZXBlbmRlbmN5IGNoYWluIG91dGxpbmVkLiBJJ20gYW50aWNpcGF0aW5nIGxvb2tpbmcgYXQgdGhlIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGBUQVJHRVRfQ09SRWAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBidXQgSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NTguODM2NzMwOTExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQ19UMTBESUZcXG4gICA4OlxcdFxcdHNlbGVjdCBTQ1NJX0NPTU1PTlxcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcXG4gIDEzOlxcdFxcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xcbiAgMTQ6XFx0XFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBUQVJHRVRfQ09SRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVENNX0lCTE9DS1xcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIlRDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcXFwiXFxuICAyMDpcXHRcXHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NTguODM2Nzk4ODMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMTUyOTI5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaG9zdC1TQ1NJIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIGFzIEkgc2VlIGl0LiBJdCBsb29rcyBsaWtlIGBDT05GSUdfVkhPU1RfU0NTSWAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYENPTkZJR19UQVJHRVRfQ09SRWAg4oCTIHRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBidWlsZGluZyBvbi4gQW5kLCBhcyBleHBlY3RlZCwgd2UgbmVlZCBgRVZFTlRGRGAsIHdoaWNoIGlzIHVzdWFsbHkgYSBub24taXNzdWUgYXMgaXQncyB0eXBpY2FsbHkgZW5hYmxlZC4gU2luY2UgYENPTkZJR19WSE9TVF9TQ1NJYCBhbHNvIHB1bGxzIGluIGBDT05GSUdfVkhPU1RgLCBpdCBzb2xpZGlmaWVzIHRoZSByZWxhdGlvbnNoaXAgdGhlcmUuIFNvLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBkaXJlY3RseS4gVGhlcmUgbWlnaHQgYmUgc29tZSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIG90aGVyIGNvbmZpZyBvcHRpb25zIGRlZmluZWQgdGhlcmUgdGhhdCBhcmUgY3JpdGljYWwuIEEgcXVpY2sgc2NhbiBpcyBpbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjAxLjk1MjA5NDU3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzODY1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz01ND1zdGF0aWMgdW5zaWduZWQgaW50IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudCA9IFZIT1NUX1NDU0lfUFJFQUxMT0NfU0dMUztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1NjojaWZkZWYgQ09ORklHX0FSQ0hfTk9fU0dfQ0hBSU5cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Ny1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2lubGluZV9zZ19jbnQoY29uc3QgY2hhciAqYnVmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOTowMi4wMDQ0ODkwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTI0MjUyMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWSE9TVF9TQ1NJIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoYXQgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGF0IG1lYW5zLCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gYEVuYWJsZUNvbmZpZ3NgIG5lZWRzIHRvIGluY2x1ZGUgYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgb3IgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC4gSSBzZWU6IGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYSBuZXcgc3RhdGljIGhlbHBlciwgYW5kIHRoZW4gYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBhbmQgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBib3RoIG9mIHdoaWNoIGFyZSBhbHNvIHN0YXRpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgKndoeSogdGhleSBhcmUgc3RhdGljLiBBcmUgdGhleSBpbmxpbmVkPyBXaGF0IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGNhbGwgdGhlbT9cblxuTGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhlIHR3byBtYWluIGZ1bmN0aW9ucy4gSSBzZWUgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpcyBjYWxsZWQgb25seSB3aXRoaW4gYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCB3aGljaCBpdHNlbGYgaXMgYSB3b3JrIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIGB2cy1cdTAwM2V2c19ldmVudF93b3JrYC4gVGhhdCBtYWtlcyBzZW5zZS4gRm9yIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgSSBoYXZlIGEgZmV3IG1vcmUgcGxhY2VzLiBJdCdzIHVzZWQgaW4gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgd2hpY2ggaXMgYW5vdGhlciBraWNrIHdvcmsgaGFuZGxlciAodGhpcyB0aW1lIGZvciB0aGUgZXZlbnQgdmlydHF1ZXVlKSwgYW5kIGFsc28gaW4gYHZob3N0X3Njc2lfZG9fcGx1Z2AuIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgdmhvc3Rfc2NzaV9ob3RwbHVnYCBhbmQgYHZob3N0X3Njc2lfaG90dW5wbHVnYC4gU28sIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSAqdGhvc2UqIGFyZSB1c2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYzOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOTowNS41Mjg3NDQ0MDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDk0NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfaG90cGx1Z3x2aG9zdF9zY3NpX2hvdHVucGx1Z1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0yNTA0PXZob3N0X3Njc2lfZG9fcGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjUzNjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTM3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NDAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjU0MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHVucGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NDIte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjU0Nj1zdGF0aWMgaW50IHZob3N0X3Njc2lfcG9ydF9saW5rKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NTMtXFx0dHBnLVxcdTAwM2V0dl90cGdfcG9ydF9jb3VudCsrO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1NTQ6XFx0dmhvc3Rfc2NzaV9ob3RwbHVnKHRwZywgbHVuKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTU1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2dHBnLVxcdTAwM2V0dl90cGdfbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjU2MD1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3BvcnRfdW5saW5rKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NjctXFx0dHBnLVxcdTAwM2V0dl90cGdfcG9ydF9jb3VudC0tO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1Njg6XFx0dmhvc3Rfc2NzaV9ob3R1bnBsdWcodHBnLCBsdW4pO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NjktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0cGctXFx1MDAzZXR2X3RwZ19tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjA1LjU3NDI0MzA5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTE5OTg3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFNDU0kgVmlydGlvLVNDU0kgQ29udW5kcnVtKipcblxuUmlnaHQsIGB2aG9zdF9zY3NpX3BvcnRfbGlua2AgYW5kIGB2aG9zdF9zY3NpX3BvcnRfdW5saW5rYC4uLiB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIG9mIFNDU0kgcG9ydHMgaW4gdGhlIHZob3N0LXNjc2kgc2V0dXAuIEFuZCwgb2YgY291cnNlLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdmlydHF1ZXVlIGlzIFwia2lja2VkLlwiIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIHRoaXMga2ljayBjYWxsYmFjay4uLiBsZXQgbWUganVzdCBmaW5kIHdoZXJlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgaXMgYWN0dWFsbHkgYmVpbmcgcmVnaXN0ZXJlZC4gTmVlZCB0byBzZWUgd2hhdCB0cmlnZ2VycyBpdC4gR290IHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGlzIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg2OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjA3LjY5NDIzMjY5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzMjIwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQxLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4NDI6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTg0My17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjk1PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzNy1cXHR2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfQ1RMXS52cS5oYW5kbGVfa2ljayA9IHZob3N0X3Njc2lfY3RsX2hhbmRsZV9raWNrO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMzg6XFx0dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzM5LVxcdGZvciAoaSA9IFZIT1NUX1NDU0lfVlFfSU87IGkgXFx1MDAzYyBudnFzOyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MDcuNzcyNTYxNjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjExMzcwNjMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBTQ1NJIHZob3N0IEV2ZW50IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBTQ1NJIHZob3N0IGV2ZW50cyBhcmUgcHJvY2Vzc2VkLiBUaGUgY29kZSdzIHRlbGxpbmcgbWUgYHZob3N0X3Njc2lfb3BlbmAgaXMgc2V0dGluZyBgdnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cS5oYW5kbGVfa2lja2AgdG8gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYC4gVGhhdCdzIHRoZSBldmVudCBxdWV1ZSdzIGtpY2sgaGFuZGxlciwgcmlnaHQ/IEl0J3Mga2V5IGZvciB0cmlnZ2VyaW5nIHdvcmsuXG5cbk5vdywgd2hlcmUgaXMgYHZob3N0X3Njc2lfZXZ0X3dvcmtgIGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdHJhY2sgd2hlcmUgdGhhdCB3b3JrIGZ1bmN0aW9uIGdldHMgc2V0IHVwIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIExldCdzIGxvb2sgYXQgYHZzX2V2ZW50X3dvcmtgISBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MDkuODg2MjcwNTI5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUzODI0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c19ldmVudF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDctXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4OlxcdHN0cnVjdCB2aG9zdF93b3JrIHZzX2V2ZW50X3dvcms7IC8qIGV2dCBpbmplY3Rpb24gd29yayBpdGVtICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ5LVxcdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU4LVxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3Rfc2NzaSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzNy1cXHRsbGlzdF9hZGQoXFx1MDAyNmV2dC1cXHUwMDNlbGlzdCwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM4OlxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI5NT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjMzMDpcXHR2aG9zdF93b3JrX2luaXQoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrLCB2aG9zdF9zY3NpX2V2dF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOTowOS45MzI4MTU0NzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODgxNTk3NTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWl0YWJsZSBmb3IgZnV6emluZy4gSSdtIGxvb2tpbmcgYXQgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgLiBUaGUga2V5IGhlcmUsIGFzIHBlciB0aGUgZ3VpZGVsaW5lcywgaXMgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgKm5vdCogZ2VuZXJhbC1wdXJwb3NlOyB0aGV5J3JlIHZlcnkgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdmhvc3Qtc2NzaSBldmVudCBoYW5kbGluZywgc28gdGhleSBwYXNzIHRoZSBpbml0aWFsIHNjcmVlbmluZy5cblxuTm93LCBsZXQncyBjb25zdWx0IFNlY3Rpb24gNC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUYXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYy4gR3JlYXQsIHRoZXNlIGZ1bmN0aW9ucyBkZWZpbml0ZWx5IGZpdCB0aGUgYmlsbC4gVGhleSBpbXBsZW1lbnQgdGhlIGNvcmUgbG9naWMgYmVpbmcgYWx0ZXJlZC4gQWxzbywgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIgb24gaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gU28sIG5vIHByb2JsZW0gaGVyZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgYXJlIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBmaWxlLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIG15IGxpc3Qgb2YgcmVsZXZhbnQgZnVuY3Rpb25zOiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgLiBUaGV5IGFsbCBzZWVtIHJlbGV2YW50LlxuXG5Ob3csIHRoZSBmaW5hbCBjb25maXJtYXRpb24uIGBXb3J0aEZ1enppbmdgOiBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgYW5kIGNoYW5nZXMgZXZlbnQgY29tcGxldGlvbiB3aXRoIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AvYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGlzICpleGVjdXRhYmxlIGtlcm5lbCBjb2RlKiByZWFjaGFibGUgdmlhIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBkZXZpY2UgYW5kIFRDTSBjb25maWdmcyBpbnRlcmZhY2VzLiBUaGlzIGhpdHMgYWxsIHRoZSBuZWNlc3NhcnkgcmVxdWlyZW1lbnRzLlxuXG5Gb3IgYEZvY3VzU3ltYm9sc2AsIEknbSBsaXN0aW5nIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHdhbnQgdGhlIGZ1enplciB0byBmb2N1cyBvbi5cblxuRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgSSBuZWVkIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCB0byBiZSBlbmFibGVkLCB3aGljaCBpcyBjb3JyZWN0LlxuXG5Pa2F5LCBsZXQncyB0cmlwbGUtY2hlY2sgdGhlIGBzZXQtcmVzdWx0c2AgZm9ybWF0LiBUaGUgcmVzdWx0IGlzOlxuYEVuYWJsZUNvbmZpZ3NgOiBgW1wiVkhPU1RfU0NTSVwiLCBcIlRBUkdFVF9DT1JFXCJdYFxuYEZvY3VzU3ltYm9sc2A6IGBbXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsIFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIiwgXCJ2aG9zdF9zY3NpX3NlbmRfZXZ0XCIsIFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIiwgXCJ2aG9zdF9zY3NpX2RvX3BsdWdcIl1gXG5gV29ydGhGdXp6aW5nYDogdHJ1ZVxuYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuXG5Ob3csIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIzOCwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MTguNzQ4NzkzODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQyNTI5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c1wiLFxuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIixcbiAgICBcInZob3N0X3Njc2lfZG9fcGx1Z1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMgYnkgaW50cm9kdWNpbmcgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyB0byBhdm9pZCBkb3VibGUtbG9ja2luZyB2cS1cXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c1wiLFxuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIixcbiAgICBcInZob3N0X3Njc2lfZG9fcGx1Z1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMgYnkgaW50cm9kdWNpbmcgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyB0byBhdm9pZCBkb3VibGUtbG9ja2luZyB2cS1cXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjE4LjgyODIyNzE0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzM4MTI2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToxOC44Mjg3NjY3MzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzQzMzI2Nzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWN1cnNpdmUgbXV0ZXggbG9ja2luZyBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSW4gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdnEtXFx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXFx1MDAzZW11dGV4IGEgc2Vjb25kIHRpbWUuIFRoZSBwYXRjaCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciAoX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpKSBhbmQgY2FsbHMgdGhhdCBkaXJlY3RseSB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZC5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li43YzkwNWU5YWQ0OWE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4gXHRcdGlmICghZHJvcClcbiBcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuIFx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuIFx0fVxuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbitcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiB9XG4gXG5AQCAtMTgyOSw3ICsxODM2LDcgQEAgdmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIFxuIFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbiBcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4tXHRcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbitcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MTguODI4NzY4MTg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1ODQzODg0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZob3N0LXNjc2lgIGNvZGUgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgaXMgZm9jdXNlZCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBob3cgZXZlbnRzIGFyZSBjb21wbGV0ZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGluIHRoZSBmdW5jdGlvbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLlxuXG5Jbml0aWFsbHksIHRoZSBmdW5jdGlvbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdhcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBhbmQgZnJlZWluZyBldmVudHMgc3RvcmVkIGluIGB2cy1cdTAwM2V2c19ldmVudF9saXN0YC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZ1bmN0aW9uLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGFuZCBpdCBhcHBlYXJzIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgbm93IHJlc2lkZXMuIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkb2VzIHRoZSBhY3R1YWwgZXZlbnQgcHJvY2Vzc2luZyBhbmQgZnJlZWluZy4gVGhlIG9yaWdpbmFsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agbm93IHNpbXBseSBjYWxscyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYWZ0ZXIgbG9ja2luZyB0aGUgdmlydHF1ZXVlIG11dGV4IGB2cS1cdTAwM2VtdXRleGAuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLlxuXG5UaGUga2V5IGxpbmUgdG8gaW52ZXN0aWdhdGUgc2VlbXMgdG8gYmUgd2hlcmUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGlzIGNhbGxlZC4gSXQgdXNlcyBgbGxpc3RfYWRkYCB0byBhZGQgZXZlbnQgdG8gdGhlIGV2ZW50IGxpc3QuIFRoZW4gaXQgY2FsbHMgZWl0aGVyIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBvciwgaWYgdGhhdCByZXR1cm5zIGZhbHNlLCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2l0aCB0aGUgYGRyb3BgIGZsYWcgc2V0IHRvIHRydWUuICBUaGUgaW1wb3J0YW50IG9ic2VydmF0aW9uIGlzIHRoZSBuZXcgY2FsbCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gY29tcGxldGUgdGhlIGV2ZW50cywgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY2FsbCB0byBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLlxuXG5TbyB0aGUgaW50ZW50IGlzIHRvIHByb3RlY3QgZXZlbnQgaGFuZGxpbmcuIFRoZSB1c2Ugb2YgdGhlIGludGVybmFsIGZ1bmN0aW9uIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB3aXRoIHRoZSBtdXRleCwgY291cGxlZCB3aXRoIGBsbGlzdF9kZWxfYWxsYCBhbmQgYGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBjb25maXJtcyB0aGF0IHRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgZXZlbnQgbGlzdCBkdXJpbmcgcHJvY2Vzc2luZywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMuIFRoaXMgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyByZWZhY3RvcmluZywgYnV0IGF0IGZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIGNsZWFuIGFuZCB3ZWxsLW1vdGl2YXRlZCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToyNi40MTMxNTk2NDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MTA6XFx0XFx0dmhvc3Rfc2NzaV9jdGxfaGFuZGxlX3ZxKHZzLCB2cSk7XFxuMTgxMTpcXHR9XFxuMTgxMjpcXHRcXG4xODEzOlxcdHN0YXRpYyB2b2lkXFxuMTgxNDpcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMTgxNTpcXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4xODE2OlxcdFxcdFxcdCAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXFxuMTgxNzpcXHR7XFxuMTgxODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcXG4xODE5OlxcdFxcbjE4MjA6XFx0XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbjE4MjE6XFx0XFx0aWYgKCFldnQpXFxuMTgyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTgyMzpcXHRcXG4xODI0OlxcdFxcdGlmICh0cGcgXFx1MDAyNlxcdTAwMjYgbHVuKSB7XFxuMTgyNTpcXHRcXHRcXHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXFxuMTgyNjpcXHRcXHRcXHQvKlxcbjE4Mjc6XFx0XFx0XFx0ICogTm90ZTogZXZ0LVxcdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcXG4xODI4OlxcdFxcdFxcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cXG4xODI5OlxcdFxcdFxcdCAqL1xcbjE4MzA6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xcbjE4MzE6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXFx1MDAzZXRwb3J0X3RwZ3Q7XFxuMTgzMjpcXHRcXHRcXHRpZiAobHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZT0gMjU2KVxcbjE4MzM6XFx0XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDNlXFx1MDAzZSA4IHwgMHg0MCA7XFxuMTgzNDpcXHRcXHRcXHRldnQtXFx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwMjYgMHhGRjtcXG4xODM1OlxcdFxcdH1cXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZldnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuMTgzODpcXHRcXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfd29yaykpXFxuMTgzOTpcXHRcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG4xODQwOlxcdH1cXG4xODQxOlxcdFxcbjE4NDI6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuMTg0MzpcXHR7XFxuMTg0NDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxcbjE4NDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cG9sbC53b3JrKTtcXG4xODQ2OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODQ5OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToyNi40MTMzNTE3NTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4ODUwNjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBDYWxsIFNpdGVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwaXZvdGFsIGZvciBldmVudCBzaWduYWxpbmcgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yaywgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGFuZCAqd2h5KiBpdCdzIGludm9rZWQgaXMga2V5IHRvIGdyYXNwaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoLiBJIG5lZWQgdG8ga25vdzogd2hhdCB0cmlnZ2VycyB0aGUgZXZlbnQsIHdoYXQgZG9lcyBpdCBzaWduYWwsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIGJhc2VkIG9uIHRoYXQgc2lnbmFsPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIHNlYXJjaCB0byBpZGVudGlmeSBhbGwgZGlyZWN0IGNhbGxzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdXJyb3VuZGluZyBsb2dpYyB0aGF0IHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSBldmVudCdzIHB1cnBvc2UgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIHdoZW4gaXQncyB0cmlnZ2VyZWQuIEknbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMsIHN1Y2ggYXMgY29uZGl0aW9uYWwgY2FsbHMgYmFzZWQgb24gZGV2aWNlIHN0YXRlIG9yIGVycm9yIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjI4LjYwMTg2MTE2N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2Mjc5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToyOC42NTE0OTMyNzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTU0NjExMTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZnVuY3Rpb24gYW5kIGl0J3MgZ3JhYmJpbmcgYHZxLVx1MDAzZW11dGV4YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgbmVlZHMgdG8gcHJvdGVjdCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgdmlydHF1ZXVlLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGNvbmRpdGlvbmFsIGNhbGwgdG8gYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdoZW4gYHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWRgIGlzIHNldC5cblxuSW5zaWRlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgaXQncyBjaGVja2luZyBgdmhvc3RfdnFfd29ya19xdWV1ZWAuIEFuZCAqdGhhdCdzKiB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgZmFpbHMsIHdlIGhpdCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgdGhpcyBjYWxscyBgbXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleClgISBIYW5nIG9uLCBpc24ndCB0aGF0Li4uIGEgcmVjdXJzaXZlIGxvY2s/IFllcywgaXQgaXMuXG5cblNvLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGdyYWJzIHRoZSBtdXRleCwgYW5kICp0aGVuKiBjYWxscyBhIGZ1bmN0aW9uIHRoYXQgKm1pZ2h0KiB0cnkgdG8gZ3JhYiB0aGUgc2FtZSBtdXRleCBhZ2Fpbi4gVGhhdCdzIGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby4gSXQncyBsaWtlbHkgZGVhZGxvY2tpbmcgaWYgYHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWRgIGlzIHRydWUuXG5cbkJ1dCB3YWl0LCBpcyB0aGlzIHRoZSBvbmx5IHBsYWNlPyBMZXQncyBjb25zaWRlciBvdGhlciBjb2RlIHBhdGhzIHdoZXJlIGB2cS1cdTAwM2VtdXRleGAgbWlnaHQgYWxyZWFkeSBiZSBoZWxkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEZvciBleGFtcGxlLCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBtaWdodCBhbHNvIGJlIGhvbGRpbmcgdGhlIG11dGV4LCBhbmQgdGhlIHNhbWUgcHJvYmxlbSBjb3VsZCBhcmlzZSBpZiB3ZSBoaXQgdGhlIHNhbWUgcmVjdXJzaXZlIG11dGV4IGxvY2suIFRoaXMgY291bGQgYmUgYSBtdWNoIG1vcmUgd2lkZXNwcmVhZCBpc3N1ZSB0aGFuIEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGlzIHVzZWQgdG8gY29uZmlybSB0aGlzLiBUaGlzIG5lZWRzIGltbWVkaWF0ZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MzQuMTk3NjA3OTE2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTAwOlxcdFxcdHJldHVybiBcXFwiVW5rbm93blxcXCI7XFxuMjUwMTpcXHR9XFxuMjUwMjpcXHRcXG4yNTAzOlxcdHN0YXRpYyB2b2lkXFxuMjUwNDpcXHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuMjUwNTpcXHRcXHRcXHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxcbjI1MDY6XFx0e1xcbjI1MDc6XFx0XFxuMjUwODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSB0cGctXFx1MDAzZXZob3N0X3Njc2k7XFxuMjUwOTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG4yNTEwOlxcdFxcdHUzMiByZWFzb247XFxuMjUxMTpcXHRcXG4yNTEyOlxcdFxcdGlmICghdnMpXFxuMjUxMzpcXHRcXHRcXHRyZXR1cm47XFxuMjUxNDpcXHRcXG4yNTE1OlxcdFxcdGlmIChwbHVnKVxcbjI1MTY6XFx0XFx0XFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcXG4yNTE3OlxcdFxcdGVsc2VcXG4yNTE4OlxcdFxcdFxcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHR2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4yNTIxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMjUyMjpcXHRcXHQvKlxcbjI1MjM6XFx0XFx0ICogV2UgY2FuJ3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcXG4yNTI0OlxcdFxcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXFxuMjUyNTpcXHRcXHQgKi9cXG4yNTI2OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcbjI1Mjc6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMjUyODpcXHRcXG4yNTI5OlxcdFxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG4yNTMwOlxcdFxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG4yNTMxOlxcdFxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcbjI1MzI6XFx0dW5sb2NrOlxcbjI1MzM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjI1MzQ6XFx0fVxcbjI1MzU6XFx0XFxuMjUzNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcXG4yNTM3OlxcdHtcXG4yNTM4OlxcdFxcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XFxuMjUzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjM0LjE5NzgwODExNloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDMyOTk0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYWRsb2NrIEZpeCBmb3Igdmhvc3Qtc2NzaSBFdmVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHZob3N0LXNjc2kgY29kZSwgYW5kIEkndmUgc3BvdHRlZCBhIG5hc3R5IHBvdGVudGlhbCBkZWFkbG9jay4gSXQgbG9va3MgbGlrZSBgdmhvc3Rfc2NzaV9kb19wbHVnYCB3YXMgbG9ja2luZyBgdnEtXHUwMDNlbXV0ZXhgLCBhbmQgdGhlbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgKmFsc28qIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBob2xkIGB2cS1cdTAwM2VtdXRleGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmYWlsczsgaXQgdGhlbiBjYWxscyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCwgaW4gdHVybiwgdHJpZXMgdG8gbG9jayBgdnEtXHUwMDNlbXV0ZXhgICphZ2FpbiohIFRoYXQncyBhIGNsYXNzaWMgcmVjdXJzaXZlIG11dGV4IGFjcXVpc2l0aW9uIGJ1ZywgcmlnaHQgdGhlcmUuXG5cblRoZSBwYXRjaCBhaW1zIHRvIGZpeCB0aGlzIGJ5IGNhcmVmdWxseSByZXN0cnVjdHVyaW5nIHRoZSBsb2NraW5nLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgY3JlYXRlZCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIG9wZXJhdGVzIHdpdGhvdXQgbG9ja2luZyBgdnEtXHUwMDNlbXV0ZXhg4oCUdGhlIGFzc3VtcHRpb24gYmVpbmcgdGhlIGNhbGxlciAqYWxyZWFkeSogaG9sZHMgaXQuIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgbm93IHJlc3BvbnNpYmxlIGZvciB3cmFwcGluZyBgbXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleClgIGFyb3VuZCB0aGUgY2FsbCB0byB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIGNsZXZlciBwYXJ0IGlzIGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YDsgc2luY2UgaXQncyBjYWxsZWQgd2l0aCBgdnEtXHUwMDNlbXV0ZXhgIGFscmVhZHkgaGVsZCwgaXQganVzdCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLiBUaGlzIGF2b2lkcyB0aGUgZG91YmxlLWxvY2sgYW5kLCBob3BlZnVsbHksIHRoZSBkZWFkbG9jay5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBmaXggaXMgc291bmQsIHNvIEkgc2hvdWxkIHJlYWxseSBjaGVjayBhbGwgdGhlIGxvY2F0aW9ucyB3aGVyZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIG5vdyBjYWxsZWQgdG8gc2VlIGlmIHRoaXMgbmV3IGxvY2tpbmcgc2NoZW1lIGlzIGJlaW5nIGhvbm9yZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjM3LjYzMDgwNTAwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjcxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTU3MD12aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzMtLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzNDpzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzNS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDYtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjQ3OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTI6XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU5LVxcdFxcdFxcdFxcdFxcdCAgICAgdnNfZXZlbnRfd29yayk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjYwOlxcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjYxLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzOC1cXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfd29yaykpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzOTpcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MzcuNzUwNDgyNDY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTE1MjcyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBmb3Igdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgaXMgY2FsbGluZyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgcmVmYWN0b3Jpbmcgd2FycmFudHMgZW5hYmxpbmcgS01TQU4uIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGRvZXMgdGhpcyBwYXRjaCBldmVuICp0b3VjaCogYW55dGhpbmcgdGhhdCdzIGNvcGllZCB0byB1c2Vyc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBUaGlzIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsLiBOZXh0LCBhbSBJIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdmFyaWFibGVzPyBOb3BlLCBkb2Vzbid0IHNlZW0gbGlrZSBpdC4gSXQncyBhYm91dCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gb24gdGhhdCBgdnEtXHUwMDNlbXV0ZXhgLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgcHJldmVudGluZyByZWN1cnNpdmUgbG9ja2luZyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy5cblxuU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGxvY2tzLCB0aGUgcHJpbWFyeSBjb25jZXJucyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgdGhhdCBMT0NLREVQIGlzIGRlc2lnbmVkIHRvIGNhdGNoLCBvciwgcG90ZW50aWFsbHksIGEgc2ltcGxlIGhhbmcuICBUaGVzZSBraW5kcyBvZiBwcm9ibGVtcyBhcmUgbm90IHdoYXQgS01TQU4gaXMgZm9yLiBLTVNBTiBpcyB0aGUgS2VybmVsTWVtb3J5U2FuaXRpemVyOyBpdCdzIGRlc2lnbmVkIHRvIGZpbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2UuIFRoYXQncyBub3QgdGhlIGNhc2UgaGVyZS5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIEtNU0FOIGd1aWRlbGluZXMuIFwiUnVubmluZyBhIEtNU0FOIHNlc3Npb24gaXMgcG9pbnRsZXNzIGlmIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoIHRoZSBwcm9ibGVtLlwiICBUaGlzIHJlZmFjdG9yaW5nIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGxvY2tpbmcuICBLTVNBTiBmdXp6aW5nIGhhcyByZXNvdXJjZSBjb3N0cy4gSXQgYWxzbyBzYXlzIHRvIHNldCBgTmVlZHNLTVNBTj10cnVlYCBvbmx5IGlmIHRoZSBjb2RlIGludHJvZHVjZXMgcmlza3Mgb2YgVU5JTklUSUFMSVpFRCBNRU1PUlkgdGhhdCBpcyBPTkxZIGRldGVjdGVkIGJ5IEtNU0FOLlxuXG5UaGUgZ3VpZGVsaW5lcyBhbHNvIHNheSB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmIHRoZSBjb2RlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAoY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQKS4gQW5kLCBpZiBhbnkgbmV3IHN0cnVjdHVyZXMgaW50cm9kdWNlZCBhcmUgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSByZWFkL2NvcHksIG9yIHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvIGxlYWtzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlIGFuc3dlciBpcyB1bmVxdWl2b2NhbGx5IGBOZWVkc0tNU0FOPWZhbHNlYC4gTGV0J3MgYnVpbGQgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjUsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjQyLjI2MjAxMjYxN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWN1cnNpdmUgbXV0ZXggbG9ja2luZyBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSW4gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdnEtXFx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXFx1MDAzZW11dGV4IGEgc2Vjb25kIHRpbWUuIFRoZSBwYXRjaCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciAoX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpKSBhbmQgY2FsbHMgdGhhdCBkaXJlY3RseSB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZC5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlY3Vyc2l2ZSBtdXRleCBsb2NraW5nIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJbiB2aG9zdF9zY3NpX3NlbmRfZXZ0KCksIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB2cS1cXHUwMDNlbXV0ZXguIFByZXZpb3VzbHksIGlmIHZob3N0X3ZxX3dvcmtfcXVldWUoKSBmYWlsZWQsIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgd2FzIGludm9rZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB2cS1cXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxcblxcblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXIgY29weWluZywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcy4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4sIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbcjlw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 09:21:07 +0000 UTC FinishedAt: 2026-09-12 10:09:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "8450f72f-8d44-4836-bd3d-5172fe78f991" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "__vhost_scsi_complete_events", "vhost_scsi_complete_events", "vhost_scsi_send_evt", "vhost_scsi_evt_handle_kick", "vhost_scsi_do_plug" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "cb26524ef4ac28fcfa554c0656e8dc412c38a8ff", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfc2VuZF9ldnQmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9kb19wbHVnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZWN1cnNpdmUgbXV0ZXggbG9ja2luZyBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSW4gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdnEtXHUwMDNlbXV0ZXguIFByZXZpb3VzbHksIGlmIHZob3N0X3ZxX3dvcmtfcXVldWUoKSBmYWlsZWQsIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgd2FzIGludm9rZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB2cS1cdTAwM2VtdXRleCBhIHNlY29uZCB0aW1lLiBUaGUgcGF0Y2ggc3BsaXRzIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgaW50byBhbiB1bmxvY2tlZCBoZWxwZXIgKF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSkgYW5kIGNhbGxzIHRoYXQgZGlyZWN0bHkgd2hlbiB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQuXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXIgY29weWluZywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcy4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4sIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBldmVudCBjb21wbGV0aW9uIGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jIGJ5IGludHJvZHVjaW5nIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgdG8gYXZvaWQgZG91YmxlLWxvY2tpbmcgdnEtXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuaW5kZXggN2ExZjM5YTMyN2RhNi4uN2M5MDVlOWFkNDlhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuQEAgLTYzMCwxOSAmIzQzOzYzMCwyNiBAQCB2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG4gXHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4mIzQzOy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbiB7XG4tXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCwgKnQ7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xuIFx0XHRpZiAoIWRyb3ApXG4gXHRcdFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcbiBcdFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcbiBcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiB9XG4gXG5AQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiBcbiBcdGxsaXN0X2FkZChcdTAwMjZldnQtXHUwMDNlbGlzdCwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuLVx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4mIzQzO1x0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX3BsdWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXZlbnQgY29tcGxldGlvbiBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYyBieSBpbnRyb2R1Y2luZyBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzIHRvIGF2b2lkIGRvdWJsZS1sb2NraW5nIHZxLVx1MDAzZW11dGV4IHdoZW4gcXVldWluZyB3b3JrIGZhaWxzIGluIHZob3N0X3Njc2lfc2VuZF9ldnQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgL2Rldi92aG9zdC1zY3NpIGRldmljZSBpb2N0bCBpbnRlcmZhY2UgYW5kIFRDTSB0YXJnZXQgY29uZmlnZnMgb3BlcmF0aW9ucy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBldmVudCB2aXJ0cXVldWUgcHJvY2Vzc2luZyBhbmQgY29uY3VycmVuY3kvbG9ja2luZyBpbnZhcmlhbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWY0YjU5NjJjNGVkNjI5NGFiYmJhNDdkZDg3ZGJhYjFiZDVhYzQ5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEwOjA4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCA3YTFmMzlhMzI3ZGE2Li43YzkwNWU5YWQ0OWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtNjMwLDE5ICYjNDM7NjMwLDI2IEBAIHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCkKIAl2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTsKIH0KIAotc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApCiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqLwomIzQzO3N0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApCiB7Ci0Jc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwogCXN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwogCi0JbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiAJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO3ZzLSZndDt2c19ldmVudF9saXN0KTsKIAlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7CiAJCWlmICghZHJvcCkKIAkJCXZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7CiAJCXZob3N0X3Njc2lfZnJlZV9ldnQodnMsIGV2dCk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gJmFtcDt2cy0mZ3Q7dnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiYjNDM7CV9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApOwogCW11dGV4X3VubG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiB9CiAKQEAgLTE4MjksNyAmIzQzOzE4MzYsNyBAQCB2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiAKIAlsbGlzdF9hZGQoJmFtcDtldnQtJmd0O2xpc3QsICZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwogCWlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfd29yaykpCi0JCXZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTsKJiM0MzsJCV9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZGlmZiBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGUgY2hhbmdlcyBzZWVtIGZvY3VzZWQgYXJvdW5kIHRoZSBldmVudCBoYW5kbGluZyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgZXZlbnQgY29tcGxldGlvbiBhbmQgcXVldWluZyBsb2dpYy4KCkZpcnN0LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYC4gVGhpcyBzdWdnZXN0cyBhIGNsZWFyIHNlcGFyYXRpb24gb2YgY29uY2VybnMuIFRoZSBvcmlnaW5hbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGZ1bmN0aW9uIGlzIG5vdyBqdXN0IGEgd3JhcHBlci4gSXQgYWNxdWlyZXMgdGhlIHZpcnRxdWV1ZSBtdXRleCwgY2FsbHMgdGhlIGludGVybmFsIGZ1bmN0aW9uIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIG11dGV4LiBUaGlzIGlzIGEgdmVyeSBzdGFuZGFyZCBwYXR0ZXJuLCBsaWtlbHkgdG8gYWxsb3cgdGhlIGNvcmUgY29tcGxldGlvbiBsb2dpYyB0byBiZSBjYWxsZWQgaW4gY29udGV4dHMgd2hlcmUgdGhlIG11dGV4IGlzIGFscmVhZHkgaGVsZC4gSXQgbWFrZXMgdGhlIGNvZGUgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgoKTm93LCBsb29raW5nIGF0IHRoZSBpbmxpbmUgZnVuY3Rpb25zLCBJIG9ic2VydmUgdGhhdCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBoYXBwZW5zLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBldmVudCBsaXN0LCBhbmQgY2FsbHMgYHZob3N0X3Njc2lfZG9fZXZ0X3dvcmtgIGZvciBlYWNoIGV2ZW50IGlmIGBkcm9wYCBpcyBmYWxzZS4gSWYgaXQgaXNuJiMzOTt0IGRyb3BwZWQsIGl0IHByb2Nlc3NlcyB0aGUgZXZlbnQuIFRoZW4sIGl0IGFsd2F5cyBmcmVlcyB0aGUgZXZlbnQgYWZ0ZXIgaGFuZGxpbmcuIFRoZSBsb2NrIHByb3RlY3RzIHRoZSBsaW5rZWQgbGlzdC4KClRoZSBrZXkgY2hhbmdlLCBhdCBsaW5lIDE4MzYsIGlzIHRoZSBjYWxsIHRvIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkaXJlY3RseSBmcm9tIHdpdGhpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2hlbiB0aGUgZXZlbnQgd29yayBxdWV1ZSBmYWlscy4gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGF0aCB3aGVyZSBldmVudHMgbWlnaHQgYmUgZHJvcHBlZCBvciBwcm9jZXNzZWQgaW1tZWRpYXRlbHkuIFRoZSBjaGFuZ2UgZnJvbSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHRvIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpbXBsaWVzIHRoYXQgdGhlIG11dGV4IGlzIGFscmVhZHkgaGVsZCBieSB0aGUgY2FsbCBzaXRlLiBUaGUgZ29hbCBzZWVtcyB0byBiZSB0byBjb21wbGV0ZSBhbmQgaGFuZGxlIHRoZSBldmVudHMgaW1tZWRpYXRlbHkgaW4gY2FzZXMgd2hlcmUgdGhlIHF1ZXVlaW5nIGZhaWxzLiBUaGUgYGRyb3BgIGZsYWcgaGVyZSBzdWdnZXN0cyB0aGF0IHRoZXJlJiMzOTtzIGEgcG9zc2liaWxpdHkgb2YgZGlzY2FyZGluZyBldmVudHMgaW4gZXJyb3IgY29uZGl0aW9ucy4gSSB3b25kZXIgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBwb3RlbnRpYWxseSBkcm9wcGluZyBldmVudHMgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgaW50ZW5kZWQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLCBidXQgd2hhdCBpcyB0aGUgY29zdCBvZiBkcm9wcGluZz8gSXMgdGhlcmUgYW55IGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGFzc29jaWF0ZWQgd2l0aCBkcm9wcGVkIGV2ZW50cz8KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBjYW4gZmFpbCBhbmQgd2h5IGRyb3BwaW5nIGFuIGV2ZW50IG1pZ2h0IGJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgdGhlc2UgZXZlbnRzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoZXkgKmFyZW4mIzM5O3QqIGRyb3BwZWQuIFRoaXMgYWxsIGZlZWxzIGxpa2UgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9yIGJ1ZyBmaXggcmVsYXRlZCB0byBldmVudCBoYW5kbGluZyB1bmRlciBoaWdoIGxvYWQgb3IgZXJyb3IgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHR2aG9zdF9zY3NpX2N0bF9oYW5kbGVfdnEodnMsIHZxKTtcbjE4MTE6XHR9XG4xODEyOlx0XG4xODEzOlx0c3RhdGljIHZvaWRcbjE4MTQ6XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4xODE1Olx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuLFxuMTgxNjpcdFx0XHQgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0O1xuMTgxOTpcdFxuMTgyMDpcdFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xuMTgyMTpcdFx0aWYgKCFldnQpXG4xODIyOlx0XHRcdHJldHVybjtcbjE4MjM6XHRcbjE4MjQ6XHRcdGlmICh0cGcgXHUwMDI2XHUwMDI2IGx1bikge1xuMTgyNTpcdFx0XHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXG4xODI2Olx0XHRcdC8qXG4xODI3Olx0XHRcdCAqIE5vdGU6IGV2dC1cdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcbjE4Mjg6XHRcdFx0ICogbHVuWzQtN10gbmVlZCB0byBiZSB6ZXJvIGFjY29yZGluZyB0byB2aXJ0aW8tc2NzaSBzcGVjLlxuMTgyOTpcdFx0XHQgKi9cbjE4MzA6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blswXSA9IDB4MDE7XG4xODMxOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXHUwMDNldHBvcnRfdHBndDtcbjE4MzI6XHRcdFx0aWYgKGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlPSAyNTYpXG4xODMzOlx0XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blsyXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlXHUwMDNlIDggfCAweDQwIDtcbjE4MzQ6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDI2IDB4RkY7XG4xODM1Olx0XHR9XG4xODM2Olx0XG4xODM3Olx0XHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuMTgzODpcdFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF93b3JrKSlcbjE4Mzk6XHRcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4xODQwOlx0fVxuMTg0MTpcdFxuMTg0MjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuMTg0MzpcdHtcbjE4NDQ6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXG4xODQ1Olx0XHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbjE4NDY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xuMTg0NzpcdFxuMTg0ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODQ5Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbjE4NTA6XHRcdFx0Z290byBvdXQ7XG4xODUxOlx0XG4xODUyOlx0XHRpZiAodnMtXHUwMDNldnNfZXZlbnRzX21pc3NlZClcbjE4NTM6XHRcdFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIE5VTEwsIE5VTEwsIFZJUlRJT19TQ1NJX1RfTk9fRVZFTlQsXG4xODU0Olx0XHRcdFx0XHQgICAgMCk7XG4xODU1Olx0b3V0OlxuMTg1NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjE4NTc6XHR9XG4xODU4Olx0XG4xODU5Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBEZWFkbG9jayBpbiB0aGUgU0NTSSB2aG9zdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGl0JiMzOTtzIGdyYWJiaW5nIGB2cS0mZ3Q7bXV0ZXhgLiBQZXJmZWN0bHkgbm9ybWFsLCBwcm90ZWN0aW5nIHNoYXJlZCByZXNvdXJjZXMgd2l0aGluIHRoZSB2aXJ0dWFsIHF1ZXVlLiBUaGVuLCBpdCBjaGVja3MgaWYgdGhlcmUmIzM5O3MgYSB2YWxpZCBiYWNrZW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlydHVhbCBxdWV1ZS4gSWYgbm90LCBpdCBza2lwcyB0aGUgcmVzdCBhbmQgdW5sb2NrcyB0aGUgbXV0ZXguIEJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IGl0ICptaWdodCogY2FsbCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgaWYgZXZlbnRzIHdlcmUgbWlzc2VkLgoKQW5kIGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYmVmb3JlIHRoZSBmaXgsIHRoZSBjb2RlIGNhbGxzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7YC4gV2FpdCBhIHNlY29uZOKApiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFsc28gbG9ja3MgYHZxLSZndDttdXRleGAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgZGVhZGxvY2shIElmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCByZXR1cm5zIGZhbHNlIChpbXBseWluZyB0aGUgcXVldWUgaXNuJiMzOTt0IHJlYWR5IG9yIGFibGUgdG8gcHJvY2VzcyksIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgbWlnaHQgYmUgc3R1Y2sgaG9sZGluZyBgdnEtJmd0O211dGV4YCB3aGlsZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgICphbHNvKiB0cmllcyB0byBncmFiIGl0LiBCb29tLiBEZWFkbG9jayEKClRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBpcyBjYWxsZWQuIEdyZXAgdGltZSEgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG90aGVyIHBhdGhzIHRocm91Z2ggdGhlIGNvZGUgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoaXMgc2FtZSBtdXRleCBjb250ZW50aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIG9mIG5lc3RlZCBsb2NraW5nIGFuZCBuZWVkcyBhIHRob3JvdWdoIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX3NlbmRfZXZ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3Rfc2NzaV9kb19wbHVnIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9kb19wbHVnYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgU0NTSSBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGRldmljZSBwbHVnZ2luZy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCBhbmQgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsaW5lcyAyNTAwIHRocm91Z2ggMjU0MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZpcnR1YWwgU0NTSSBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSBhZGRlZCBvciByZW1vdmVkIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBsaW5lcyBiZWNhdXNlIHRoZXkgcHJvYmFibHkgaGFuZGxlIHRoZSBjcnVjaWFsIGxvZ2ljIG9mIHJlZ2lzdGVyaW5nIG9yIHVucmVnaXN0ZXJpbmcgYSB2aXJ0dWFsIGRldmljZSwgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IHF1ZXVlcywgYW5kIHBvdGVudGlhbGx5IG5vdGlmeWluZyB0aGUgdXNlci1zcGFjZSB2aG9zdC1zY3NpIGJhY2tlbmQgYWJvdXQgdGhlIGRldmljZSYjMzk7cyBhdmFpbGFiaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHZob3N0X3Njc2lfZGV2YCBzdHJ1Y3R1cmUgaXMgbWFuaXB1bGF0ZWQsIGhvdyBjb21tYW5kIHF1ZXVlcyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGUgZGV2aWNlJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBtYW5hZ2VkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHRoYXQgaGFuZGxlIHRoZSBtb3N0IGltcG9ydGFudCBzdGVwcyAtIHRoZSBhY3R1YWwgcGx1Z2dpbmcgYW5kIHVucGx1Z2dpbmcgb3BlcmF0aW9ucy4gVGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTAwOlx0XHRyZXR1cm4gXCYjMzQ7VW5rbm93blwmIzM0OztcbjI1MDE6XHR9XG4yNTAyOlx0XG4yNTAzOlx0c3RhdGljIHZvaWRcbjI1MDQ6XHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4yNTA1Olx0XHRcdCAgc3RydWN0IHNlX2x1biAqbHVuLCBib29sIHBsdWcpXG4yNTA2Olx0e1xuMjUwNzpcdFxuMjUwODpcdFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gdHBnLVx1MDAzZXZob3N0X3Njc2k7XG4yNTA5Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbjI1MTA6XHRcdHUzMiByZWFzb247XG4yNTExOlx0XG4yNTEyOlx0XHRpZiAoIXZzKVxuMjUxMzpcdFx0XHRyZXR1cm47XG4yNTE0Olx0XG4yNTE1Olx0XHRpZiAocGx1ZylcbjI1MTY6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcbjI1MTc6XHRcdGVsc2VcbjI1MTg6XHRcdFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFTU9WRUQ7XG4yNTE5Olx0XG4yNTIwOlx0XHR2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4yNTIxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MjI6XHRcdC8qXG4yNTIzOlx0XHQgKiBXZSBjYW4mIzM5O3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcbjI1MjQ6XHRcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXG4yNTI1Olx0XHQgKi9cbjI1MjY6XHRcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxuMjUyNzpcdFx0XHRnb3RvIHVubG9jaztcbjI1Mjg6XHRcbjI1Mjk6XHRcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbjI1MzA6XHRcdFx0dmhvc3Rfc2NzaV9zZW5kX2V2dCh2cywgdnEsIHRwZywgbHVuLFxuMjUzMTpcdFx0XHRcdFx0ICAgVklSVElPX1NDU0lfVF9UUkFOU1BPUlRfUkVTRVQsIHJlYXNvbik7XG4yNTMyOlx0dW5sb2NrOlxuMjUzMzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbjI1MzQ6XHR9XG4yNTM1Olx0XG4yNTM2Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXG4yNTM3Olx0e1xuMjUzODpcdFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCB0cnVlKTtcbjI1Mzk6XHR9XG4yNTQwOlx0XG4yNTQxOlx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3R1bnBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcbjI1NDI6XHR7XG4yNTQzOlx0XHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIGZhbHNlKTtcbjI1NDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBEZWFkbG9jayBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgdmhvc3Qtc2NzaWAgaXNzdWUsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBjbGVhci4gSXQgc2VlbXMgYHZob3N0X3Njc2lfZG9fcGx1Z2Agd2FzIGFsc28gZ3JhYmJpbmcgdGhlIGAmYW1wO3ZxLSZndDttdXRleGAgbG9jaywgd2hpY2ggaXMgdGhlIHNhbWUgbXV0ZXggdGhhdCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIHVzZXMuIEJvdGggb2YgdGhlc2UgZnVuY3Rpb25zLCB0aGUgZm9ybWVyIGZvciBwbHVnZ2luZyBvcGVyYXRpb25zIGFuZCB0aGUgbGF0dGVyIGZvciBoYW5kbGluZyBldmVudHMgYXJlIGNhbGxpbmcgYHZob3N0X3Njc2lfc2VuZF9ldnRgLgoKTm93LCB0aGUgY2xhc3NpYyBidWcgd2FzIGhlcmU6IFdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxlZCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdvdWxkIHByZXZpb3VzbHkgY2FsbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgKip0aGF0KiogZnVuY3Rpb24gd2FzIGdyYWJiaW5nIHRoZSBsb2NrIGFnYWluISBgbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleCk7YCBzcGVjaWZpY2FsbHkuIFNvLCB3ZSBoYWQgYSBjbGFzc2ljIG11dGV4IGRlYWRsb2NrIHNpdHVhdGlvbi4KClRoZSBmaXggSSYjMzk7bSBzZWVpbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIHByb2JsZW1hdGljIGNhbGwgd2l0aCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7YC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIG5ldyBmdW5jdGlvbiBkb2VzbiYjMzk7dCB0cnkgdG8gYWNxdWlyZSB0aGUgbXV0ZXggaXRzZWxmLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlczogJiMzNDtDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5LgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB1c2VyIHNwYWNlIGNhbiBldmVuICpyZWFjaCogdGhpcyBgdmhvc3Qtc2NzaWAgY29kZS4gU28sIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgYHZob3N0LXNjc2lgIHByb3ZpZGVzIGEgY2hhcmFjdGVyIGRldmljZSwgYC9kZXYvdmhvc3Qtc2NzaWAsIG9yIGlvY3RscyBvbiB2aG9zdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy92aG9zdC9zY3NpLmNgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZGV2aWNlIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgZml4IGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pc2NfcmVnaXN0ZXJ8ZmlsZV9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xODY4PXN0YXRpYyBfX3BvbGxfdCB2aG9zdF9uZXRfY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxODc2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xuZHJpdmVycy92aG9zdC9uZXQuYy0xODc3LVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xODk0PXN0YXRpYyBpbnQgX19pbml0IHZob3N0X25ldF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODk3LVx0XHR2aG9zdF9uZXRfZW5hYmxlX3pjb3B5KFZIT1NUX05FVF9WUV9UWCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4OTg6XHRyZXR1cm4gbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9uZXRfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4OTktfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzODY9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYzLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ3Nz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9zY3NpX3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDc4LXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0Nzk6XHRyZXR1cm4gbWlzY19yZWdpc3RlcihcdTAwMjZ2aG9zdF9zY3NpX21pc2MpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4MC19XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTktXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNjA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdGVzdF9mb3BzID0ge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzYxLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTUzMz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2Ny1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2OS1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05NjQ9c3RhdGljIF9fcG9sbF90IHZob3N0X3Zzb2NrX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NzEtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Zzb2NrX2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTczLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTk5MD1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF92c29ja19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTk5OC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5OTk6XHRyZXQgPSBtaXNjX3JlZ2lzdGVyKFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgQW5hbHlzaXMgb2YgdGhlIHZob3N0LXNjc2kgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyBgdmhvc3Qtc2NzaWAgaGFzIGJlZW4gcmVnaXN0ZXJlZC4gVGhlIGtlcm5lbCBpcyB1c2luZyBgbWlzY19yZWdpc3RlcigmYW1wO3Zob3N0X3Njc2lfbWlzYylgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgbWlzY2VsbGFuZW91cyBkZXZpY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIGl0cyByb2xlLiBXZSBoYXZlIGEgcmVnaXN0cmF0aW9uLCBzbyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4KCk5vdywgaG93IGFyZSBMVU5zIGNvbmZpZ3VyZWQ/IEFoYSwgbG9va3MgbGlrZSB3ZSBoYXZlIGEgY291cGxlIG9mIG9wdGlvbnMuIEl0JiMzOTtzIGVpdGhlciBnb2luZyB0byBiZSB1c2luZyB0aGUgc3RhbmRhcmQgYHRhcmdldC9jb25maWdmc2AgbWV0aG9kLCBvciwgYW5kIHRoaXMgaXMgbW9yZSBpbnRlcmVzdGluZyBmcm9tIGFuIEkvTyBwYXRoIHBlcnNwZWN0aXZlLCB0aGV5JiMzOTtyZSBsZWFuaW5nIG9uIHRoZSB2aXJ0aW8tc2NzaSB2aG9zdCYjMzk7cyBpb2N0bHMsIHNwZWNpZmljYWxseSBgVkhPU1RfU0NTSV9TRVRfRU5EUE9JTlRgIGFuZCBgVkhPU1RfU0NTSV9DTEVBUl9FTkRQT0lOVGAuIFRoYXQgc2lnbmFscyBhIG1vcmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdGhlIHZob3N0IGxheWVyIGZvciBlbmRwb2ludCBtYW5hZ2VtZW50LgoKVGltZSB0byBkaXZlIGRlZXBlci4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYHZob3N0X3Njc2lfbWlzY2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gcmVnaXN0ZXJlZCwgd2hhdCB0aGUgaW50ZXJmYWNlIGxvb2tzIGxpa2UsIGFuZCB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9ucyBpdCYjMzk7cyBzdXBwb3J0aW5nLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGxpZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfbWlzYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDcxOnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF9zY3NpX21pc2MgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDcyLVx0TUlTQ19EWU5BTUlDX01JTk9SLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3OC17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDc5Olx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODAtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0ODI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kZXJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0ODQ6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0ODUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIHZob3N0L3Njc2kuYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMgb2YgYHZob3N0L3Njc2kuY2AsIHdoaWNoIGxpa2VseSBtZWFucyBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBkb2VzIHRoaXMgcGllY2UgZml0IGludG8gdGhlIGxhcmdlciB2aG9zdCBmcmFtZXdvcmssIGFuZCBTQ1NJIHNwZWNpZmljYWxseT8mIzM0OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgYGNvbmZpZ2Agc3ltYm9scyB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZSBgdmhvc3Qvc2NzaS5jYCwgb3IgcG90ZW50aWFsbHkgaW5kaXJlY3RseSB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMgbGlrZSB0aGUgdmhvc3QgY29yZSBvciBTQ1NJIHN1YnN5c3RlbSBvcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSB0cmlzdGF0ZSBvciBib29sZWFuIHNldHRpbmdzIHRoYXQgbWlnaHQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgbW9kdWxlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhlIGB2aG9zdC9zY3NpLmNgIG1vZHVsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzLiBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIG9wdGlvbmFsIGZlYXR1cmVzIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY29udHJvbGxlZCBieSBLY29uZmlnIHNldHRpbmdzIHdpdGhpbiB0aGlzIGZpbGU/IFRoaXMgc2VhcmNoIHdpbGwgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCB0byBnZXQgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIHdpbGwgYWxzbyBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhpcyBtb2R1bGUsIHNvIEkgYW0gcHJlcGFyZWQgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gd2l0aCBhbnkgZGVmYXVsdCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTI0MiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTUyLVx0aGVscFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjUzOlx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NC1cdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcbi0tXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlPTM9dmhvc3RfbmV0LXkgOj0gbmV0Lm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNC1cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgJiM0Mzs9IHZob3N0X3Njc2kub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo2OnZob3N0X3Njc2kteSA6PSBzY3NpLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01My1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU0OnN0YXRpYyB1bnNpZ25lZCBpbnQgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250ID0gVkhPU1RfU0NTSV9QUkVBTExPQ19TR0xTO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNTUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Ni0jaWZkZWYgQ09ORklHX0FSQ0hfTk9fU0dfQ0hBSU5cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU3OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01OC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMtI2Vsc2VcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzgtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3OTpcdHZob3N0X3Njc2lfaW5saW5lX3NnX2NudCA9IGNudDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTgwLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NDpzdGF0aWMgaW50IHZob3N0X3Njc2lfZ2V0X2lubGluZV9zZ19jbnQoY2hhciAqYnVmLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODUtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODYte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6ODc6XHRyZXR1cm4gc3ByaW50ZihidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtODgtfVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5MDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250X29wID0ge1xuZHJpdmVycy92aG9zdC9zY3NpLmM6OTE6XHQuZ2V0ID0gdmhvc3Rfc2NzaV9nZXRfaW5saW5lX3NnX2NudCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjkyOlx0LnNldCA9IHZob3N0X3Njc2lfc2V0X2lubGluZV9zZ19jbnQsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05My19O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtOTQtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5NTptb2R1bGVfcGFyYW1fY2IoaW5saW5lX3NnX2NudCwgXHUwMDI2dmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250X29wLCBOVUxMLCAwNjQ0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk2LU1PRFVMRV9QQVJNX0RFU0MoaW5saW5lX3NnX2NudCwgXCYjMzQ7U2V0IHRoZSBudW1iZXIgb2Ygc2NhdHRlcmxpc3QgZW50cmllcyB0byBwcmUtYWxsb2NhdGUuIFRoZSBkZWZhdWx0IGlzIDIwNDguXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDQ6c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA1LVx0LyogV2FpdCBmb3IgdGhlIGZsdXNoIG9wZXJhdGlvbiB0byBmaW5pc2ggKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMTAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMTE6c3RydWN0IHZob3N0X3Njc2lfY21kIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMi1cdC8qIERlc2NyaXB0b3IgZnJvbSB2aG9zdF9nZXRfdnFfZGVzYygpIGZvciB2aXJ0X3F1ZXVlIHNlZ21lbnQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDMtXHQvKiBVc2VkIHRvIHRyYWNrIGluZmxpZ2h0IGNtZCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ0Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ1LX07XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDYtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDc6c3RydWN0IHZob3N0X3Njc2lfbmV4dXMge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ4LVx0LyogUG9pbnRlciB0byBUQ00gc2Vzc2lvbiBmb3IgSV9UIE5leHVzICovXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTUyOnN0cnVjdCB2aG9zdF9zY3NpX3RwZyB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTMtXHQvKiBWaG9zdCBwb3J0IHRhcmdldCBwb3J0YWwgZ3JvdXAgdGFnIGZvciBUQ00gKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTYtXHRpbnQgdHZfdHBnX3BvcnRfY291bnQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTc6XHQvKiBVc2VkIGZvciB2aG9zdF9zY3NpIGRldmljZSByZWZlcmVuY2UgdG8gdHBnX25leHVzLCBwcm90ZWN0ZWQgYnkgdHZfdHBnX211dGV4ICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTgtXHRpbnQgdHZfdHBnX3Zob3N0X2NvdW50O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2MC1cdGludCB0dl9mYWJyaWNfcHJvdF90eXBlO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYxOlx0LyogbGlzdCBmb3Igdmhvc3Rfc2NzaV9saXN0ICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjItXHRzdHJ1Y3QgbGlzdF9oZWFkIHR2X3RwZ19saXN0O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NS1cdC8qIFBvaW50ZXIgdG8gdGhlIFRDTSBWSG9zdCBJX1QgTmV4dXMgZm9yIHRoaXMgVFBHIGVuZHBvaW50ICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjY6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqdHBnX25leHVzO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY3Olx0LyogUG9pbnRlciBiYWNrIHRvIHZob3N0X3Njc2lfdHBvcnQgKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2ODpcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2OTpcdC8qIFJldHVybmVkIGJ5IHZob3N0X3Njc2lfbWFrZV90cGcoKSAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTcwLVx0c3RydWN0IHNlX3BvcnRhbF9ncm91cCBzZV90cGc7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNzE6XHQvKiBQb2ludGVyIGJhY2sgdG8gdmhvc3Rfc2NzaSwgcHJvdGVjdGVkIGJ5IHR2X3RwZ19tdXRleCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTcyOlx0c3RydWN0IHZob3N0X3Njc2kgKnZob3N0X3Njc2k7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzMtfTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE3NC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE3NTpzdHJ1Y3Qgdmhvc3Rfc2NzaV90cG9ydCB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzYtXHQvKiBTQ1NJIHByb3RvY29sIHRoZSB0cG9ydCBpcyBwcm92aWRpbmcgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODEtXHRjaGFyIHRwb3J0X25hbWVbVkhPU1RfU0NTSV9OQU1FTEVOXTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MjpcdC8qIFJldHVybmVkIGJ5IHZob3N0X3Njc2lfbWFrZV90cG9ydCgpICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODMtXHRzdHJ1Y3Qgc2Vfd3duIHRwb3J0X3d3bjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODY6c3RydWN0IHZob3N0X3Njc2lfZXZ0IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4Ny1cdC8qIGV2ZW50IHRvIGJlIHNlbnQgdG8gZ3Vlc3QgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTM9ZW51bSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk5LS8qIE5vdGU6IGNhbiYjMzk7dCBzZXQgVklSVElPX0ZfVkVSU0lPTl8xIHlldCwgc2luY2UgdGhhdCBpbXBsaWVzIEFOWV9MQVlPVVQuICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMDA6c3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwMS1cdFZIT1NUX0ZFQVRVUkVTLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwNS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIwNjojZGVmaW5lIFZIT1NUX1NDU0lfRkVBVFVSRVMgVkhPU1RfRkVBVFVSRVNfVTY0KHZob3N0X3Njc2lfYml0cywgMClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTEtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTI6c3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxMzptb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNC1NT0RVTEVfUEFSTV9ERVNDKG1heF9pb192cXMsIFwmIzM0O1NldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LlwmIzM0Oyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTY6c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNy1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnE7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTg6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTktXHQvKlxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyMy1cdCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjI0Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgaW5mbGlnaHRzWzJdO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjI1LVx0Lypcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjktXHRpbnQgaW5mbGlnaHRfaWR4O1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjMwOlx0c3RydWN0IHZob3N0X3Njc2lfY21kICpzY3NpX2NtZHM7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzEtXHRzdHJ1Y3Qgc2JpdG1hcCBzY3NpX3RhZ3M7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM4LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjM5OnN0cnVjdCB2aG9zdF9zY3NpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0MDpcdC8qIFByb3RlY3RlZCBieSB2aG9zdF9zY3NpLVx1MDAzZWRldi5tdXRleCAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQxOlx0c3RydWN0IHZob3N0X3Njc2lfdHBnICoqdnNfdHBnO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQyLVx0Y2hhciB2c192aG9zdF93d3BuW1RSQU5TUE9SVF9JUU5fTEVOXTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQtXHRzdHJ1Y3Qgdmhvc3RfZGV2IGRldjtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NTpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqdnFzO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKipvbGRfaW5mbGlnaHQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDctXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU2LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjU3OnN0cnVjdCB2aG9zdF9zY3NpX3RtZiB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTgtXHRzdHJ1Y3Qgdmhvc3Rfd29yayB2d29yaztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1OS1cdHN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3JrO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjYwOlx0c3RydWN0IHZob3N0X3Njc2kgKnZob3N0O1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjYxOlx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNjItXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjY0LVx0dTggc2NzaV9yZXNwO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MjY1Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjY2LVx0c3RydWN0IGlvdmVjIHJlc3BfaW92O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI3OS0gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI4MDpzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHgge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjgxLVx0aW50IGhlYWQ7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjkwLS8qXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTE6ICogR2xvYmFsIG11dGV4IHRvIHByb3RlY3Qgdmhvc3Rfc2NzaSBUUEcgbGlzdCBmb3Igdmhvc3QgSU9DVExzIGFuZCBMSU9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI5Mi0gKiBjb25maWdmcyBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTMtICovXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTQ6c3RhdGljIERFRklORV9NVVRFWCh2aG9zdF9zY3NpX211dGV4KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5NTpzdGF0aWMgTElTVF9IRUFEKHZob3N0X3Njc2lfbGlzdCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTYtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kb25lX2luZmxpZ2h0KHN0cnVjdCBrcmVmICprcmVmKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk4LXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5OTpcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwMC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMwMTpcdGluZmxpZ2h0ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0LCBrcmVmKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwMi1cdGNvbXBsZXRlKFx1MDAyNmluZmxpZ2h0LVx1MDAzZWNvbXApO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwNC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMwNTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2luaXRfaW5mbGlnaHQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzA2Olx0XHRcdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICpvbGRfaW5mbGlnaHRbXSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMwNy17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMDg6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqbmV3X2luZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMzA5LVx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzMxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzMyOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMzM6dmhvc3Rfc2NzaV9nZXRfaW5mbGlnaHQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMzQte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MzM1Olx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MzM2Olx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMzctXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMzg6XHRzdnEgPSBjb250YWluZXJfb2YodnEsIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMzM5LVx0aW5mbGlnaHQgPSBcdTAwMjZzdnEtXHUwMDNlaW5mbGlnaHRzW3N2cS1cdTAwM2VpbmZsaWdodF9pZHhdO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM0NC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM0NTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3B1dF9pbmZsaWdodChzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDYte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MzQ3Olx0a3JlZl9wdXQoXHUwMDI2aW5mbGlnaHQtXHUwMDNla3JlZiwgdmhvc3Rfc2NzaV9kb25lX2luZmxpZ2h0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM0OC19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNTA6c3RhdGljIGludCB2aG9zdF9zY3NpX2NoZWNrX3RydWUoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzUxLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNTQtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNTU6c3RhdGljIGNoYXIgKnZob3N0X3Njc2lfZ2V0X2ZhYnJpY193d24oc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzU2LXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1NzpcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnID0gY29udGFpbmVyX29mKHNlX3RwZyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1ODpcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZywgc2VfdHBnKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1OTpcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydCA9IHRwZy1cdTAwM2V0cG9ydDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2MC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNjMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjQ6c3RhdGljIHUxNiB2aG9zdF9zY3NpX2dldF90cGd0KHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2NS17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjY6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjc6XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNjgtXHRyZXR1cm4gdHBnLVx1MDAzZXRwb3J0X3RwZ3Q7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzcwLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzcxOnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jaGVja19wcm90X2ZhYnJpY19vbmx5KHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM3Mi17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNzM6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNzQ6XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNzUtXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzc4LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mzc5OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jb3B5X2NtZF9sb2coc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozODA6XHRcdFx0XHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM4MS1cdFx0XHRcdCAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zOTctXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozOTg6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zOTktXHRcdFx0XHQgc3RydWN0IHZob3N0X2xvZyAqbG9nLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQxNS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQxNjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00MTcte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NDE4Olx0c3RydWN0IHZob3N0X3Njc2lfY21kICp0dl9jbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDE5Olx0XHRcdFx0c3RydWN0IHZob3N0X3Njc2lfY21kLCB0dmNfc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMDpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKHR2X2NtZC1cdTAwM2V0dmNfdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MjE6XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUsIHZxKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMjpcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHN2cS1cdTAwM2V2cztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMzpcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodCA9IHR2X2NtZC1cdTAwM2VpbmZsaWdodDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyNC1cdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU0LVx0c2JpdG1hcF9jbGVhcl9iaXQoXHUwMDI2c3ZxLVx1MDAzZXNjc2lfdGFncywgc2VfY21kLVx1MDAzZW1hcF90YWcpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NDU1Olx0dmhvc3Rfc2NzaV9wdXRfaW5mbGlnaHQoaW5mbGlnaHQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU2LX1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ1Ny1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ1ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ1OS17XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NjA6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQgPSB0bWYtXHUwMDNlaW5mbGlnaHQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NjEtXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDY2LVx0a2ZyZWUodG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ2NzpcdHZob3N0X3Njc2lfcHV0X2luZmxpZ2h0KGluZmxpZ2h0KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ2OC19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NjktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NzA6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kcm9wX2NtZHMoc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzEte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcyOlx0c3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsICp0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDczLVx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzYtXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgdCwgbGxub2RlLCB0dmNfY29tcGxldGlvbl9saXN0KVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDc3Olx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzgtfVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDc5LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDgwOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDgxLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ4Mi1cdGlmIChzZV9jbWQtXHUwMDNlc2VfY21kX2ZsYWdzIFx1MDAyNiBTQ0ZfU0NTSV9UTVJfQ0RCKSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODM6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3RtZiAqdG1mID0gY29udGFpbmVyX29mKHNlX2NtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4NDpcdFx0XHRcdFx0c3RydWN0IHZob3N0X3Njc2lfdG1mLCBzZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDg1LVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ4Ny1cdH0gZWxzZSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4OTpcdFx0XHRcdFx0c3RydWN0IHZob3N0X3Njc2lfY21kLCB0dmNfc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ5MDpcdFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSAgY29udGFpbmVyX29mKGNtZC1cdTAwM2V0dmNfdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTE6XHRcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNDkyLVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5NC1cdFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnN2cS1cdTAwM2V2cSwgXHUwMDI2c3ZxLVx1MDAzZWNvbXBsZXRpb25fd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTU6XHRcdFx0dmhvc3Rfc2NzaV9kcm9wX2NtZHMoc3ZxKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5Ni1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTgtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTk6c3RhdGljIGludCB2aG9zdF9zY3NpX3dyaXRlX3BlbmRpbmcoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTAwLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1MDY6c3RhdGljIGludCB2aG9zdF9zY3NpX3F1ZXVlX2RhdGFfaW4oc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTEtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1MTI6c3RhdGljIGludCB2aG9zdF9zY3NpX3F1ZXVlX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUxNy1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTkte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NTIwOlx0c3RydWN0IHZob3N0X3Njc2lfdG1mICp0bWYgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MjEtXHRcdFx0XHRcdFx0ICBzZV9jbWQpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUyNi1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUyNzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2Fib3J0ZWRfdGFzayhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Mjgte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUzMS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzMjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2ZyZWVfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MzMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUzNy1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzODpzdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzOTp2aG9zdF9zY3NpX2FsbG9jYXRlX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDAtXHRcdCAgICAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTQyLVx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NTQzOlx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDQtXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTUxLVx0aWYgKCFldnQpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU1MjpcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgdmhvc3Rfc2NzaV9ldnRcXG5cJiMzNDspO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNTUzLVx0XHR2cy1cdTAwM2V2c19ldmVudHNfbWlzc2VkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NjMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1NjQ6c3RhdGljIGludCB2aG9zdF9zY3NpX2NoZWNrX3N0b3BfZnJlZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NjUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTU2OT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTcwOnZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU3MS17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjI3LVx0ZWxzZVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjI4Olx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhdWx0ZWQgb24gdmhvc3Rfc2NzaV9zZW5kX2V2ZW50XFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYyOS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzMDpcdHZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMxLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzMtLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzUte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM2Olx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM3LVx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDEtXHRcdGlmICghZHJvcClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0MjpcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjQzOlx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQ0LVx0fVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0Ni1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0NzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0OC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUxLVx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTI6XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1My1cdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjU2OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTcte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjU4Olx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU5LVx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjYwOlx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2MS19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjItXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NjM6c3RhdGljIGludCB2aG9zdF9zY3NpX2NvcHlfc2dsX3RvX2lvdihzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2NC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjkyLSAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjkzOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfY21kX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02OTQte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6Njk1Olx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2Yod29yayxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY5NjpcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgY29tcGxldGlvbl93b3JrKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY5Ny1cdHN0cnVjdCB2aXJ0aW9fc2NzaV9jbWRfcmVzcCB2X3JzcDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY5ODpcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCAqdDtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY5OS1cdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzE1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzE2Olx0XHRpZiAoY21kLVx1MDAzZXJlYWRfaXRlciBcdTAwMjZcdTAwMjYgdmhvc3Rfc2NzaV9jb3B5X3NnbF90b19pb3YoY21kKSkge1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNzE3LVx0XHRcdHZfcnNwLnJlc3BvbnNlID0gVklSVElPX1NDU0lfU19CQURfVEFSR0VUO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTczOC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjczOTpcdFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUoY21kLVx1MDAzZXR2Y192cSwgY21kLVx1MDAzZXR2Y19sb2csXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDAtXHRcdFx0XHQgICAgIGNtZC1cdTAwM2V0dmNfbG9nX251bSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDEtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NDI6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHNlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDMtXHR9XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzUwLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzUxOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKlxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzUyOnZob3N0X3Njc2lfZ2V0X2NtZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdTY0IHNjc2lfdGFnKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzUzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1NDpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKHZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzU1Olx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUsIHZxKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1NjpcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNzU3LVx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsICpwcm90X3NnbDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NzUtXHRjbWQtXHUwMDNldHZjX3NlX2NtZC5tYXBfdGFnID0gdGFnO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6Nzc2Olx0Y21kLVx1MDAzZWluZmxpZ2h0ID0gdmhvc3Rfc2NzaV9nZXRfaW5mbGlnaHQodnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtNzc3LVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc4MC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc4MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JldmVydF9tYXBfaW92X3RvX3NnbChzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03ODItXHRcdFx0XHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJyLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTgwNz1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4MDg6dmhvc3Rfc2NzaV9tYXBfdG9fc2dsKHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODA5LVx0XHQgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODEzLXtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjgxNDpcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKGNtZC1cdTAwM2V0dmNfdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4MTU6XHRcdFx0XHRcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtODE2LVx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IHN2cS1cdTAwM2V1cGFnZXM7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtODU5LXJldmVydF9pdGVyX2dldF9wYWdlczpcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjg2MDpcdHZob3N0X3Njc2lfcmV2ZXJ0X21hcF9pb3ZfdG9fc2dsKGl0ZXIsICpzZ2wsIHNnKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg2MS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz04NzM9c3RhdGljIGludFxuZHJpdmVycy92aG9zdC9zY3NpLmM6ODc0OnZob3N0X3Njc2lfY2FsY19zZ2xzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IGJ5dGVzLCBpbnQgbWF4X3NnbHMpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04NzUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTg5Mz1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4OTQ6dmhvc3Rfc2NzaV9jb3B5X2lvdl90b19zZ2woc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg5NS1cdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNnX3RhYmxlLCBpbnQgc2dfY291bnQsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9OTUzPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk1NDp2aG9zdF9zY3NpX21hcF9pb3ZfdG9fc2dsKHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NTUtXHRcdFx0ICBzdHJ1Y3Qgc2dfdGFibGUgKnNnX3RhYmxlLCBpbnQgc2dfY291bnQsIGJvb2wgaXNfcHJvdClcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NjAtXHR3aGlsZSAoaW92X2l0ZXJfY291bnQoaXRlcikpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk2MTpcdFx0cmV0ID0gdmhvc3Rfc2NzaV9tYXBfdG9fc2dsKGNtZCwgaXRlciwgc2dfdGFibGUsIFx1MDAyNnNnLCBpc19wcm90KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk2Mi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuZHJpdmVycy92aG9zdC9zY3NpLmM6OTYzOlx0XHRcdHZob3N0X3Njc2lfcmV2ZXJ0X21hcF9pb3ZfdG9fc2dsKGl0ZXIsIHNnX3RhYmxlLVx1MDAzZXNnbCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk2NC1cdFx0XHRcdFx0XHRcdCBzZyk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9OTcyPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk3Mzp2aG9zdF9zY3NpX21hcGFsKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NzQtXHRcdCBzaXplX3QgcHJvdF9ieXRlcywgc3RydWN0IGlvdl9pdGVyICpwcm90X2l0ZXIsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTc5LVx0aWYgKHByb3RfYnl0ZXMpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk4MDpcdFx0c2dsX2NvdW50ID0gdmhvc3Rfc2NzaV9jYWxjX3NnbHMocHJvdF9pdGVyLCBwcm90X2J5dGVzLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTgxLVx0XHRcdFx0XHRcdCBWSE9TVF9TQ1NJX1BSRUFMTE9DX1BST1RfU0dMUyk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTk1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTk2Olx0XHRyZXQgPSB2aG9zdF9zY3NpX21hcF9pb3ZfdG9fc2dsKGNtZCwgcHJvdF9pdGVyLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTk3LVx0XHRcdFx0XHRcdFx1MDAyNmNtZC1cdTAwM2Vwcm90X3RhYmxlLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMDUtXHR9XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDA2Olx0c2dsX2NvdW50ID0gdmhvc3Rfc2NzaV9jYWxjX3NnbHMoZGF0YV9pdGVyLCBkYXRhX2J5dGVzLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAwNy1cdFx0XHRcdFx0IFZIT1NUX1NDU0lfUFJFQUxMT0NfU0dMUyk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwMjE6XHRyZXQgPSB2aG9zdF9zY3NpX21hcF9pb3ZfdG9fc2dsKGNtZCwgZGF0YV9pdGVyLCBcdTAwMjZjbWQtXHUwMDNldGFibGUsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDIyLVx0XHRcdFx0XHRjbWQtXHUwMDNldHZjX3NnbF9jb3VudCwgZmFsc2UpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMy1cdGlmIChyZXQgPT0gLUVJTlZBTClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwMjQ6XHRcdHJldCA9IHZob3N0X3Njc2lfY29weV9pb3ZfdG9fc2dsKGNtZCwgZGF0YV9pdGVyLCBcdTAwMjZjbWQtXHUwMDNldGFibGUsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDI1LVx0XHRcdFx0XHRcdCBjbWQtXHUwMDNldHZjX3NnbF9jb3VudCwgZGF0YV9kaXIpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMzMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDM0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV90b190Y21fYXR0cihpbnQgYXR0cilcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMzUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNTAtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDUxOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdGFyZ2V0X3F1ZXVlX2NtZChzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqbmV4dXMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDUyOlx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNTMtXHRcdFx0XHRcdHVuc2lnbmVkIGNoYXIgKmNkYiwgdTE2IGx1bixcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDczLVx0dGFyZ2V0X2luaXRfY21kKHNlX2NtZCwgbmV4dXMtXHUwMDNldHZuX3NlX3Nlc3MsIFx1MDAyNmNtZC1cdTAwM2V0dmNfc2Vuc2VfYnVmWzBdLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTA3NDpcdFx0XHRsdW4sIGV4cF9kYXRhX2xlbiwgdmhvc3Rfc2NzaV90b190Y21fYXR0cih0YXNrX2F0dHIpLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA3NS1cdFx0XHRkYXRhX2RpciwgVEFSR0VUX1NDRl9BQ0tfS1JFRik7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTA4NT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTA4Njp2aG9zdF9zY3NpX3NlbmRfc3RhdHVzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDg3Olx0XHQgICAgICAgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YywgdTggc3RhdHVzKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA4OC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTExMT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTExMjp2aG9zdF9zY3NpX3NlbmRfYmFkX3RhcmdldChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMTEzLVx0XHRcdCAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTExNDpcdFx0XHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHggKnZjLCBpbnQgdHlwZSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMTUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTExNDk9c3RhdGljIGludFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTE1MDp2aG9zdF9zY3NpX2dldF9kZXNjKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMTUxOlx0XHQgICAgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExNTItXHRcdCAgICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMjAzPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMDQ6dmhvc3Rfc2NzaV9jaGtfc2l6ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyMDUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyMjE9c3RhdGljIGludFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTIyMjp2aG9zdF9zY3NpX2dldF9yZXEoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2aG9zdF9zY3NpX2N0eCAqdmMsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjIzOlx0XHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKip0cGdwKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIyNC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIzMy1cdH0gZWxzZSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjM0Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKip2c190cGcsICp0cGcgPSBOVUxMO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIzNS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMjUyPXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyNTM6dmhvc3Rfc2NzaV9zZXR1cF9yZXNwX2lvdnMoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZlYyAqaW5faW92cyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyNTQtXHRcdFx0ICAgdW5zaWduZWQgaW50IGluX2lvdnNfY250KVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyOTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyOTQ6dmhvc3Rfc2NzaV9oYW5kbGVfdnEoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyOTUte1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTI5NjpcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqKnZzX3RwZywgKnRwZztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyOTctXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3JlcSB2X3JlcTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyOTgtXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3JlcV9waSB2X3JlcV9waTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyOTk6XHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqbmV4dXM7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMzAwOlx0c3RydWN0IHZob3N0X3Njc2lfY3R4IHZjO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTMwMTpcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTMwMi1cdHN0cnVjdCBpb3ZfaXRlciBpbl9pdGVyLCBwcm90X2l0ZXIsIGRhdGFfaXRlcjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMzMwLVx0ZG8ge1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTMzMTpcdFx0cmV0ID0gdmhvc3Rfc2NzaV9nZXRfZGVzYyh2cywgdnEsIFx1MDAyNnZjLCB2cV9sb2csIFx1MDAyNmxvZ19udW0pO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZIT1NUX1NDU0kgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBCZWZvcmUgSSBzdGFydCBkZWJ1Z2dpbmcgYW55dGhpbmcgb3IgbWFraW5nIGFueSBjaGFuZ2VzLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVuZGVkIGJlaGF2aW9yIG9mIGBDT05GSUdfVkhPU1RfU0NTSWAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHZob3N0LCBhbmQgaXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBmaW5kOgoKKiAgICoqUHJlcmVxdWlzaXRlczoqKiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBgQ09ORklHX1ZIT1NUX1NDU0lgIHRvIGV2ZW4gbWFrZSBzZW5zZT8gQXJlIHRoZXJlIHNwZWNpZmljIFNDU0kgY29udHJvbGxlciBvcHRpb25zIHRoYXQgbXVzdCBiZSBzZWxlY3RlZCBmaXJzdD8gTWF5YmUgc29tZSBzcGVjaWZpYyB2aXJ0aW8gZmVhdHVyZXM/CiogICAqKkNvbnRleHQ6KiogV2hhdCBkb2VzIGBDT05GSUdfVkhPU1RfU0NTSWAgYWN0dWFsbHkgKmRvKj8gV2hhdCYjMzk7cyB0aGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbj8gRG9lcyBpdCBwcm92aWRlIGEgdmhvc3QgaW50ZXJmYWNlIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBzdG9yYWdlLCBvciBpcyBpdCBtb3JlIGdlbmVyaWM/CiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGVyZSYjMzk7cyBhIGhlbHBmdWwgZGVzY3JpcHRpb24gb3IgZXZlbiBhIGxpbmsgdG8gZnVydGhlciBkb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGJvbnVzLCBzYXZlcyBtZSBmcm9tIGhhdmluZyB0byBiYWNrdHJhY2sgYW5kIGRpZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSBpbW1lZGlhdGVseS4gSSB3YW50IHRvIGhhdmUgYSBob2xpc3RpYyBwaWN0dXJlIGhlcmUuCgpGcm9tIHRoZXJlLCBJIGNhbiBidWlsZCB1cCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gd29yay4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZGV2ZWxvcCBhIHBsYW4gZm9yIHRlc3Rpbmcgb3IgbW9kaWZpY2F0aW9uLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxuICA0MTpcdFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICA0NDpcdFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDQ5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNTA6XHRcdHNlbGVjdCBTR19QT09MXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXG4gIDU0Olx0XHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFZIT1NUX1ZTT0NLXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDU5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNjA6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDYxOlx0XHRkZWZhdWx0IG5cbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXG4gIDY0Olx0XHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXG4gIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZob3N0X3Njc2lgIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBDT05GSUdfVkhPU1RfU0NTSWAgcmVsaWVzIG9uIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gRmlyc3QgcXVlc3Rpb246IGlzIGB2aG9zdF9zY3NpYCBzb21ldGhpbmcgc3l6a2FsbGVyIGNhbiBldmVuICpyZWFjaCo/IFllcywgaXQgbG9va3MgbGlrZSBpdCBvcGVucyBgL2Rldi92aG9zdC1zY3NpYCBhbmQgdXNlcyB0aGUgc3RhbmRhcmQgaW9jdGxzIGxpa2UgYFZIT1NUX1NFVF9PV05FUmAsIGBWSE9TVF9TQ1NJX1NFVF9FTkRQT0lOVGAsIGFuZCBzbyBvbiwgYWxvbmdzaWRlIHRhcmdldCBjb3JlIGNvbmZpZ2ZzIGF0IGAvc3lzL2tlcm5lbC9jb25maWcvdGFyZ2V0Ly4uLmAuIEdvb2QuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIGlmIHN5emthbGxlciBoYXMgdGhlIG5lY2Vzc2FyeSBkZXNjcmlwdGlvbnMgZm9yIHRob3NlIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGAvZGV2L3Zob3N0LXNjc2lgIGFuZCB0aGUgdmhvc3QgaW9jdGxzIGluIGdlbmVyYWwuIEFoLCBnb29kIG5ld3MsIHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBpdCEgRXZlbiBiZXR0ZXIsIHRoZSBjcml0ZXJpYSBleHBsaWNpdGx5IG1lbnRpb25zIHZpcnR1YWwgYnVzZXMgbGlrZSB2aXJ0aW8g4oCTIGFuZCB0aGF0IGluY2x1ZGVzIGB2aG9zdF9zY3NpYCBieSBpbXBsaWNhdGlvbi4gU28sIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGluIHRoZSAmIzM0O3JlYWNoYWJsZSBkcml2ZXImIzM0OyBjYXRlZ29yeSBhcyBwZXIgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4KCk5vdywgdW5kZXIgU2VjdGlvbiAzLCB0aGUgY3JpdGVyaWEgc3RhdGUgdGhhdCB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgYW5kIG9mIGNvdXJzZSwgcmVhY2hhYmxlIGRyaXZlcnMuIFRoaXMgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIGEgcmVhY2hhYmxlIGRyaXZlci4KCk5vdywgZGlnZ2luZyBkZWVwZXIgaW50byB0aGlzIHNwZWNpZmljIHBhdGNoOiBpdCBtb2RpZmllcyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGVzc2VudGlhbGx5IHNwbGl0dGluZyBvdXQgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGlzIGludHJpZ3VpbmcuIEl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBjaGFuZ2UuIFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZT8KClRpbWUgdG8gY2hlY2sgdGhlIGdpdCBsb2cuIEkgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgY29udGV4dC4uLiB0aGUgZnVsbCBoaXN0b3J5IG9mIHRoZSBjaGFuZ2UuIExldCYjMzk7cyBsb29rIGF0IGBnaXQgbG9nIC0xYCBvciBsaW5lcyA2MzAtNjYwIG9mIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBoYXBwZW5lZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHJlZmFjdG9yaW5nIHRoYXQgZXhwb3NlcyBuZXcgcG90ZW50aWFsIGZ1enppbmcgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHR2aG9zdF9zY3NpX2xvZ193cml0ZSh2cSwgdnFfbG9nLCBsb2dfbnVtKTtcbiA2MzE6XHR9XG4gNjMyOlx0XG4gNjMzOlx0LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuIDYzNDpcdHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG4gNjM1Olx0e1xuIDYzNjpcdFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xuIDYzNzpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbiA2Mzg6XHRcbiA2Mzk6XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gNjQwOlx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4gNjQxOlx0XHRcdGlmICghZHJvcClcbiA2NDI6XHRcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuIDY0MzpcdFx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuIDY0NDpcdFx0fVxuIDY0NTpcdH1cbiA2NDY6XHRcbiA2NDc6XHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbiA2NDg6XHR7XG4gNjQ5Olx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4gNjUwOlx0XG4gNjUxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiA2NTI6XHRcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIDY1MzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiA2NTQ6XHR9XG4gNjU1Olx0XG4gNjU2Olx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbiA2NTc6XHR7XG4gNjU4Olx0XHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXG4gNjU5Olx0XHRcdFx0XHRcdCAgICAgdnNfZXZlbnRfd29yayk7XG4gNjYwOlx0XHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xuIDY2MTpcdH1cbiA2NjI6XHRcbiA2NjM6XHRzdGF0aWMgaW50IHZob3N0X3Njc2lfY29weV9zZ2xfdG9faW92KHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kKVxuIDY2NDpcdHtcbiA2NjU6XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlciA9IGNtZC1cdTAwM2VyZWFkX2l0ZXI7XG4gNjY2Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuIDY2NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gNjY4Olx0XHRzaXplX3QgbGVuO1xuIDY2OTpcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbmQgRml4aW5nIGEgUG90ZW50aWFsIFJlY3Vyc2l2ZSBNdXRleCBEZWFkbG9jayBpbiB2aG9zdC1zY3NpKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgZGVhZGxvY2sgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBTcGVjaWZpY2FsbHksIHRoZSBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCBzZWVtcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgZXZlbnRzIHRvIHRoZSB2aXJ0dWFsIFNDU0kgYmFja2VuZC4gSXQgYWxsb2NhdGVzIGFuIGB2aG9zdF9zY3NpX2V2dGAgc3RydWN0dXJlLCBwb3B1bGF0ZXMgaXQgd2l0aCBldmVudCBkYXRhIChpbmNsdWRpbmcgTFVOIGluZm9ybWF0aW9uIHdoZW4gYXBwbGljYWJsZSksIGFuZCBhZGRzIGl0IHRvIGFuIGV2ZW50IGxpc3QuIENydWNpYWxseSwgaXQgdGhlbiBjYWxscyBgdmhvc3RfdnFfd29ya19xdWV1ZWAgdG8gc2NoZWR1bGUgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQuCgpUaGUgY3JpdGljYWwgaXNzdWUgYXJpc2VzIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgICpmYWlscyouIFRoaXMgY2FuIGhhcHBlbiBmb3IgdmFyaW91cyByZWFzb25zOiB0aGUgd29yayBxdWV1ZSBjb3VsZCBiZSBzdG9wcGVkLCBub3QgcnVubmluZywgb3IgdGhlcmUgY291bGQgYmUgc29tZSBvdGhlciByZXNvdXJjZSBjb25zdHJhaW50LiBJbiB0aGUgb3JpZ2luYWwgY29kZSwgaWYgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxlZCwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKWAgd2FzIGNhbGxlZC4gVGhlIHByb2JsZW0/IGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2FzIHRyeWluZyB0byBhY3F1aXJlIGB2cS0mZ3Q7bXV0ZXhgIQoKTG9va2luZyBhdCB0aGUgY29udGV4dCwgYW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcsIEkgc2VlIHRoYXQgdGhpcyBtdXRleCBpcyBhbHJlYWR5ICpoZWxkKiBieSB0aGUgY2FsbGVyIG9mIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCEgQ2FsbHMgc3VjaCBhcyB0aG9zZSBtYWRlIGJ5IGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBsb2NrIHRoZSB2cSBtdXRleCBiZWZvcmUgY2FsbGluZyBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAuIFNvLCBpZiB0aGUgd29yayBxdWV1ZSBmYWlscywgYW5kIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdHJpZXMgdG8gcmVhY3F1aXJlIHRoZSBzYW1lIG11dGV4LCB3ZSBoYXZlIGEgcmVjdXJzaXZlIG11dGV4IGRlYWRsb2NrLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBlcnJvciwgYW5kIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyB0aGF0LgoKVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IEluc3RlYWQgb2YgY2FsbGluZyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCBkb2VzIHRoZSBsb2NrLCB3ZSBjYWxsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgcmVhY3F1aXJpbmcgdGhlIGxvY2sgYW5kIHByZXZlbnRzIHRoZSBkZWFkbG9jay4KCkkmIzM5O2QgYWxzbyBsaWtlIHRvIG1ha2UgYSBxdWljayBub3RlIHRoYXQgdGhlIExVTiBwb3B1bGF0aW9uIGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBsb29rcyBhIGxpdHRsZSBjb252b2x1dGVkLiBUaGVyZSYjMzk7cyBhIGNvbW1lbnQgYWJvdXQgc2hhcmluZyBzZXR1cCBjb2RlIHdpdGggYHZpcnRpby1zY3NpLmtvYCwgc28gcGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSBmb3Igc29tZSBjb2RlIGNvbnNvbGlkYXRpb24gdGhlcmUgZG93biB0aGUgbGluZS4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXggY292ZXJzIGFsbCBwb3NzaWJsZSBkZWFkbG9jayBzY2VuYXJpb3MuIEkmIzM5O2xsIGdyZXAgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9NTcwPXZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzMtLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzUte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0Ni1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0NzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0OC17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUxLVx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTI6XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1My1cdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9NjU2PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU5LVx0XHRcdFx0XHQgICAgIHZzX2V2ZW50X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjYwOlx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2MS19XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzOC1cdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM5Olx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCBjYWxscyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKWAuIFRoYXQmIzM5O3MgdGhlIGtleSBsaW5lIHRvIGZvY3VzIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdXp6YWJsZT8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKRmlyc3QsIGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBZZXMsIHRoZSBwYXRoIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgY2xlYXJseSBpZGVudGlmaWVzIHRoaXMgYXMgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBhbmQgYSByZWxldmFudCBkcml2ZXIgYXQgdGhhdC4gU28sIHRoZSBjb2RlIHBhdGggaXRzZWxmIGlzIHZpYWJsZS4gR29vZC4KCk5vdywgZG9lcyBpdCBtZWV0IHRoZSBmdXp6aW5nIGNyaXRlcmlhPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIERvIGFueSBvZiB0aGVzZSBhcHBseT8gTm9wZS4gSXQmIzM5O3Mgbm90IGRvY3VtZW50YXRpb24sIGl0JiMzOTtzIG5vdCB1c2VyLXNwYWNlIGNvZGUsIGl0JiMzOTtzIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGFuZCBpdCYjMzk7cyBub3QgYnVpbGQgc3lzdGVtIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgYWZmZWN0IGNvbXBpbGVkIGxvZ2ljLiBBbHNvLCB0aGlzIGlzbiYjMzk7dCBzb21lIHVucmVhY2hhYmxlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgYW5kIGl0JiMzOTtzIG5vdCBhIHRlYXJkb3duIHBhdGggZXhlY3V0ZWQgb25seSBkdXJpbmcgaG90LXVucGx1Zy4KClNpbmNlIG5vbmUgb2YgdGhlIG5lZ2F0aXZlIGNvbmRpdGlvbnMgYXBwbHksIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gRG9lcyBpdCB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlPyBZZXMhICBBbmQgZXZlbiBiZXR0ZXIsIHRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgaXQgaXMgd29ydGh3aGlsZS4gQW5kIGl0IGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMqIHNpbmNlIGl04oCZcyBhc3NvY2lhdGVkIHdpdGggYSB2aXJ0dWFsIGJ1cy4gKkRlZmluaXRlbHkgd29ydGggZnV6emluZyEqCgpTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuICBOb3csIHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3M/IExldCYjMzk7cyBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhZ2FpbiB0byB3b3JrIG91dCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBJdCBkZXBlbmRzIG9uIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYCwgYW5kIGl0IHNlbGVjdHMgYFZIT1NUYCBhbmQgYFNHX1BPT0xgLiBUaGlzIGlzIGtleSBpbmZvcm1hdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4gIFdlJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgYFRBUkdFVF9DT1JFYCB0byBiZSBlbmFibGVkLCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRBUkdFVF9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90YXJnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgVEFSR0VUX0NPUkVgLiBXaGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gdGhlIGBkcml2ZXJzL3RhcmdldGAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvdGFyZ2V0L0tjb25maWdgIGFuZCBzY2FuIHRocm91Z2ggaXQsIGxvb2tpbmcgZm9yIHRoZSBgVEFSR0VUX0NPUkVgIHN5bWJvbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgYGNvbmZpZyBUQVJHRVRfQ09SRWAgYmxvY2sgd2l0aCBhIGRlcGVuZGVuY3kgY2hhaW4gb3V0bGluZWQuIEkmIzM5O20gYW50aWNpcGF0aW5nIGxvb2tpbmcgYXQgdGhlIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgVEFSR0VUX0NPUkVgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSwgYnV0IEkganVzdCB3YW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIFRBUkdFVF9DT1JFXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDY6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgNzpcdFx0c2VsZWN0IENSQ19UMTBESUZcbiAgIDg6XHRcdHNlbGVjdCBTQ1NJX0NPTU1PTlxuICAgOTpcdFx0c2VsZWN0IFNHTF9BTExPQ1xuICAxMDpcdFx0ZGVmYXVsdCBuXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcbiAgMTM6XHRcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xuICAxNDpcdFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xuICAxNTpcdFxuICAxNjpcdGlmIFRBUkdFVF9DT1JFXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIFRDTV9JQkxPQ0tcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O1RDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcJiMzNDtcbiAgMjA6XHRcdHNlbGVjdCBCTEtfREVWX0lOVEVHUklUWVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmhvc3QtU0NTSSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIGFzIEkgc2VlIGl0LiBJdCBsb29rcyBsaWtlIGBDT05GSUdfVkhPU1RfU0NTSWAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYENPTkZJR19UQVJHRVRfQ09SRWAg4oCTIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGJ1aWxkaW5nIG9uLiBBbmQsIGFzIGV4cGVjdGVkLCB3ZSBuZWVkIGBFVkVOVEZEYCwgd2hpY2ggaXMgdXN1YWxseSBhIG5vbi1pc3N1ZSBhcyBpdCYjMzk7cyB0eXBpY2FsbHkgZW5hYmxlZC4gU2luY2UgYENPTkZJR19WSE9TVF9TQ1NJYCBhbHNvIHB1bGxzIGluIGBDT05GSUdfVkhPU1RgLCBpdCBzb2xpZGlmaWVzIHRoZSByZWxhdGlvbnNoaXAgdGhlcmUuIFNvLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgZGlyZWN0bHkuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGRlcGVuZGVuY2llcyBvciBvdGhlciBjb25maWcgb3B0aW9ucyBkZWZpbmVkIHRoZXJlIHRoYXQgYXJlIGNyaXRpY2FsLiBBIHF1aWNrIHNjYW4gaXMgaW4gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz01ND1zdGF0aWMgdW5zaWduZWQgaW50IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudCA9IFZIT1NUX1NDU0lfUFJFQUxMT0NfU0dMUztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU1LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTY6I2lmZGVmIENPTkZJR19BUkNIX05PX1NHX0NIQUlOXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Ny1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2lubGluZV9zZ19jbnQoY29uc3QgY2hhciAqYnVmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYzOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkhPU1RfU0NTSSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhhdCBtZWFucywgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQuIGBFbmFibGVDb25maWdzYCBuZWVkcyB0byBpbmNsdWRlIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBJIHNlZTogYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhIG5ldyBzdGF0aWMgaGVscGVyLCBhbmQgdGhlbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGJvdGggb2Ygd2hpY2ggYXJlIGFsc28gc3RhdGljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyAqd2h5KiB0aGV5IGFyZSBzdGF0aWMuIEFyZSB0aGV5IGlubGluZWQ/IFdoYXQgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgY2FsbCB0aGVtPwoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMuIEkgc2VlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgY2FsbGVkIG9ubHkgd2l0aGluIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgd2hpY2ggaXRzZWxmIGlzIGEgd29yayBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBgdnMtJmd0O3ZzX2V2ZW50X3dvcmtgLiBUaGF0IG1ha2VzIHNlbnNlLiBGb3IgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBJIGhhdmUgYSBmZXcgbW9yZSBwbGFjZXMuIEl0JiMzOTtzIHVzZWQgaW4gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgd2hpY2ggaXMgYW5vdGhlciBraWNrIHdvcmsgaGFuZGxlciAodGhpcyB0aW1lIGZvciB0aGUgZXZlbnQgdmlydHF1ZXVlKSwgYW5kIGFsc28gaW4gYHZob3N0X3Njc2lfZG9fcGx1Z2AuIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZob3N0X3Njc2lfaG90cGx1Z2AgYW5kIGB2aG9zdF9zY3NpX2hvdHVucGx1Z2AuIFNvLCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgKnRob3NlKiBhcmUgdXNlZC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9ob3RwbHVnfHZob3N0X3Njc2lfaG90dW5wbHVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUzNS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzY6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTM3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTQwLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjU0MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHVucGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU0Mi17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjU0Nj1zdGF0aWMgaW50IHZob3N0X3Njc2lfcG9ydF9saW5rKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTUzLVx0dHBnLVx1MDAzZXR2X3RwZ19wb3J0X2NvdW50JiM0MzsmIzQzOztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1NTQ6XHR2aG9zdF9zY3NpX2hvdHBsdWcodHBnLCBsdW4pO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU1NS1cdG11dGV4X3VubG9jayhcdTAwMjZ0cGctXHUwMDNldHZfdHBnX211dGV4KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNTYwPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcG9ydF91bmxpbmsoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NjctXHR0cGctXHUwMDNldHZfdHBnX3BvcnRfY291bnQtLTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1Njg6XHR2aG9zdF9zY3NpX2hvdHVucGx1Zyh0cGcsIGx1bik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTY5LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnRwZy1cdTAwM2V0dl90cGdfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNDU0kgVmlydGlvLVNDU0kgQ29udW5kcnVtKioKClJpZ2h0LCBgdmhvc3Rfc2NzaV9wb3J0X2xpbmtgIGFuZCBgdmhvc3Rfc2NzaV9wb3J0X3VubGlua2AuLi4gdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiBvZiBTQ1NJIHBvcnRzIGluIHRoZSB2aG9zdC1zY3NpIHNldHVwLiBBbmQsIG9mIGNvdXJzZSwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCBpcyB0aGUgY3JpdGljYWwgY2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHZpcnRxdWV1ZSBpcyAmIzM0O2tpY2tlZC4mIzM0OyBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGRvIHRoYXQsIEkgbmVlZCB0byB0cmFjZSB0aGlzIGtpY2sgY2FsbGJhY2suLi4gbGV0IG1lIGp1c3QgZmluZCB3aGVyZSBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGlzIGFjdHVhbGx5IGJlaW5nIHJlZ2lzdGVyZWQuIE5lZWQgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgaXQuIEdvdCB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhpcyBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODE0PXZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQxLVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTg0MjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDMte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIyOTU9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzNy1cdHZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0NUTF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2N0bF9oYW5kbGVfa2ljaztcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMzg6XHR2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxLmhhbmRsZV9raWNrID0gdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzM5LVx0Zm9yIChpID0gVkhPU1RfU0NTSV9WUV9JTzsgaSBcdTAwM2MgbnZxczsgaSYjNDM7JiM0MzspIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFNDU0kgdmhvc3QgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgU0NTSSB2aG9zdCBldmVudHMgYXJlIHByb2Nlc3NlZC4gVGhlIGNvZGUmIzM5O3MgdGVsbGluZyBtZSBgdmhvc3Rfc2NzaV9vcGVuYCBpcyBzZXR0aW5nIGB2cy0mZ3Q7dnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cS5oYW5kbGVfa2lja2AgdG8gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYC4gVGhhdCYjMzk7cyB0aGUgZXZlbnQgcXVldWUmIzM5O3Mga2ljayBoYW5kbGVyLCByaWdodD8gSXQmIzM5O3Mga2V5IGZvciB0cmlnZ2VyaW5nIHdvcmsuCgpOb3csIHdoZXJlIGlzIGB2aG9zdF9zY3NpX2V2dF93b3JrYCBpbml0aWFsaXplZD8gSSBuZWVkIHRvIHRyYWNrIHdoZXJlIHRoYXQgd29yayBmdW5jdGlvbiBnZXRzIHNldCB1cCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBMZXQmIzM5O3MgbG9vayBhdCBgdnNfZXZlbnRfd29ya2AhIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNfZXZlbnRfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4Olx0c3RydWN0IHZob3N0X3dvcmsgdnNfZXZlbnRfd29yazsgLyogZXZ0IGluamVjdGlvbiB3b3JrIGl0ZW0gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0OS1cdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz02NTY9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTgtXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3Njc2ksXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XHRcdFx0XHRcdCAgICAgdnNfZXZlbnRfd29yayk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MzctXHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzODpcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVx0XHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjk1PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzMwOlx0dmhvc3Rfd29ya19pbml0KFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmssIHZob3N0X3Njc2lfZXZ0X3dvcmspO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMzgKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3VpdGFibGUgZm9yIGZ1enppbmcuIEkmIzM5O20gbG9va2luZyBhdCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZSBrZXkgaGVyZSwgYXMgcGVyIHRoZSBndWlkZWxpbmVzLCBpcyB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSAqbm90KiBnZW5lcmFsLXB1cnBvc2U7IHRoZXkmIzM5O3JlIHZlcnkgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdmhvc3Qtc2NzaSBldmVudCBoYW5kbGluZywgc28gdGhleSBwYXNzIHRoZSBpbml0aWFsIHNjcmVlbmluZy4KCk5vdywgbGV0JiMzOTtzIGNvbnN1bHQgU2VjdGlvbiA0LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLiBHcmVhdCwgdGhlc2UgZnVuY3Rpb25zIGRlZmluaXRlbHkgZml0IHRoZSBiaWxsLiBUaGV5IGltcGxlbWVudCB0aGUgY29yZSBsb2dpYyBiZWluZyBhbHRlcmVkLiBBbHNvLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciBvbiBoYW5kbGluZyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgbm8gcHJvYmxlbSBoZXJlLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhbmQgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGFyZSBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgZmlsZS4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgbXkgbGlzdCBvZiByZWxldmFudCBmdW5jdGlvbnM6IGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZXkgYWxsIHNlZW0gcmVsZXZhbnQuCgpOb3csIHRoZSBmaW5hbCBjb25maXJtYXRpb24uIGBXb3J0aEZ1enppbmdgOiBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgYW5kIGNoYW5nZXMgZXZlbnQgY29tcGxldGlvbiB3aXRoIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AvYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGlzICpleGVjdXRhYmxlIGtlcm5lbCBjb2RlKiByZWFjaGFibGUgdmlhIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBkZXZpY2UgYW5kIFRDTSBjb25maWdmcyBpbnRlcmZhY2VzLiBUaGlzIGhpdHMgYWxsIHRoZSBuZWNlc3NhcnkgcmVxdWlyZW1lbnRzLgoKRm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTttIGxpc3RpbmcgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBgdmhvc3Rfc2NzaV9kb19wbHVnYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgd2FudCB0aGUgZnV6emVyIHRvIGZvY3VzIG9uLgoKRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgSSBuZWVkIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCB0byBiZSBlbmFibGVkLCB3aGljaCBpcyBjb3JyZWN0LgoKT2theSwgbGV0JiMzOTtzIHRyaXBsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCBmb3JtYXQuIFRoZSByZXN1bHQgaXM6CmBFbmFibGVDb25maWdzYDogYFsmIzM0O1ZIT1NUX1NDU0kmIzM0OywgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7XWAKYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzJiMzNDssICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywgJiMzNDt2aG9zdF9zY3NpX3NlbmRfZXZ0JiMzNDssICYjMzQ7dmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2smIzM0OywgJiMzNDt2aG9zdF9zY3NpX2RvX3BsdWcmIzM0O11gCmBXb3J0aEZ1enppbmdgOiB0cnVlCmBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LgpOb3csIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2RvX3BsdWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXZlbnQgY29tcGxldGlvbiBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYyBieSBpbnRyb2R1Y2luZyBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzIHRvIGF2b2lkIGRvdWJsZS1sb2NraW5nIHZxLVx1MDAzZW11dGV4IHdoZW4gcXVldWluZyB3b3JrIGZhaWxzIGluIHZob3N0X3Njc2lfc2VuZF9ldnQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgL2Rldi92aG9zdC1zY3NpIGRldmljZSBpb2N0bCBpbnRlcmZhY2UgYW5kIFRDTSB0YXJnZXQgY29uZmlnZnMgb3BlcmF0aW9ucy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBldmVudCB2aXJ0cXVldWUgcHJvY2Vzc2luZyBhbmQgY29uY3VycmVuY3kvbG9ja2luZyBpbnZhcmlhbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9TQ1NJJiMzNDssCiAgICAmIzM0O1RBUkdFVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3NlbmRfZXZ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfZG9fcGx1ZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBldmVudCBjb21wbGV0aW9uIGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jIGJ5IGludHJvZHVjaW5nIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgdG8gYXZvaWQgZG91YmxlLWxvY2tpbmcgdnEtXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlY3Vyc2l2ZSBtdXRleCBsb2NraW5nIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJbiB2aG9zdF9zY3NpX3NlbmRfZXZ0KCksIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB2cS1cdTAwM2VtdXRleC4gUHJldmlvdXNseSwgaWYgdmhvc3RfdnFfd29ya19xdWV1ZSgpIGZhaWxlZCwgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSB3YXMgaW52b2tlZCwgYXR0ZW1wdGluZyB0byBhY3F1aXJlIHZxLVx1MDAzZW11dGV4IGEgc2Vjb25kIHRpbWUuIFRoZSBwYXRjaCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciAoX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpKSBhbmQgY2FsbHMgdGhhdCBkaXJlY3RseSB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZC5cblxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGJ1ZmZlciBjb3B5aW5nLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLiBEZWFkbG9ja3MgYW5kIGxvY2tpbmcgaXNzdWVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTiwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCmluZGV4IDdhMWYzOWEzMjdkYTYuLjdjOTA1ZTlhZDQ5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jCkBAIC02MzAsMTkgJiM0Mzs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KQogCXZob3N0X3Njc2lfbG9nX3dyaXRlKHZxLCB2cV9sb2csIGxvZ19udW0pOwogfQogCi1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovCiYjNDM7c3RhdGljIHZvaWQgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcCkKIHsKLQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnMtJmd0O3Zxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7CiAJc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0OwogCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiAKLQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIAlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7dnMtJmd0O3ZzX2V2ZW50X2xpc3QpOwogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZ0LCB0LCBsbG5vZGUsIGxpc3QpIHsKIAkJaWYgKCFkcm9wKQogCQkJdmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTsKIAkJdmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmYW1wO3ZzLSZndDt2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKIH0KIApAQCAtMTgyOSw3ICYjNDM7MTgzNiw3IEBAIHZob3N0X3Njc2lfc2VuZF9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAogCWxsaXN0X2FkZCgmYW1wO2V2dC0mZ3Q7bGlzdCwgJmFtcDt2cy0mZ3Q7dnNfZXZlbnRfbGlzdCk7CiAJaWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCAmYW1wO3ZzLSZndDt2c19ldmVudF93b3JrKSkKLQkJdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpOwomIzQzOwkJX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2aG9zdC1zY3NpYCBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgZGlmZiBpcyBmb2N1c2VkIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBldmVudHMgYXJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZ1bmN0aW9uIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuCgpJbml0aWFsbHksIHRoZSBmdW5jdGlvbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdhcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBhbmQgZnJlZWluZyBldmVudHMgc3RvcmVkIGluIGB2cy0mZ3Q7dnNfZXZlbnRfbGlzdGAuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBmdW5jdGlvbiwgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhbmQgaXQgYXBwZWFycyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG5vdyByZXNpZGVzLiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgZG9lcyB0aGUgYWN0dWFsIGV2ZW50IHByb2Nlc3NpbmcgYW5kIGZyZWVpbmcuIFRoZSBvcmlnaW5hbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIG5vdyBzaW1wbHkgY2FsbHMgdGhlIGludGVybmFsIGZ1bmN0aW9uIGFmdGVyIGxvY2tpbmcgdGhlIHZpcnRxdWV1ZSBtdXRleCBgdnEtJmd0O211dGV4YC4gVGhpcyBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcuCgpUaGUga2V5IGxpbmUgdG8gaW52ZXN0aWdhdGUgc2VlbXMgdG8gYmUgd2hlcmUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGlzIGNhbGxlZC4gSXQgdXNlcyBgbGxpc3RfYWRkYCB0byBhZGQgZXZlbnQgdG8gdGhlIGV2ZW50IGxpc3QuIFRoZW4gaXQgY2FsbHMgZWl0aGVyIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBvciwgaWYgdGhhdCByZXR1cm5zIGZhbHNlLCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2l0aCB0aGUgYGRyb3BgIGZsYWcgc2V0IHRvIHRydWUuICBUaGUgaW1wb3J0YW50IG9ic2VydmF0aW9uIGlzIHRoZSBuZXcgY2FsbCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gY29tcGxldGUgdGhlIGV2ZW50cywgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY2FsbCB0byBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLgoKU28gdGhlIGludGVudCBpcyB0byBwcm90ZWN0IGV2ZW50IGhhbmRsaW5nLiBUaGUgdXNlIG9mIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2l0aCB0aGUgbXV0ZXgsIGNvdXBsZWQgd2l0aCBgbGxpc3RfZGVsX2FsbGAgYW5kIGBsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgY29uZmlybXMgdGhhdCB0aGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGV2ZW50IGxpc3QgZHVyaW5nIHByb2Nlc3NpbmcsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBnb29kIGNoYW5nZSB0byBpbXByb3ZlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIGludGVncml0eSBpbiB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci4gSeKAmWxsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgcmVmYWN0b3JpbmcsIGJ1dCBhdCBmaXJzdCBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC1tb3RpdmF0ZWQgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHR2aG9zdF9zY3NpX2N0bF9oYW5kbGVfdnEodnMsIHZxKTtcbjE4MTE6XHR9XG4xODEyOlx0XG4xODEzOlx0c3RhdGljIHZvaWRcbjE4MTQ6XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4xODE1Olx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuLFxuMTgxNjpcdFx0XHQgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0O1xuMTgxOTpcdFxuMTgyMDpcdFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xuMTgyMTpcdFx0aWYgKCFldnQpXG4xODIyOlx0XHRcdHJldHVybjtcbjE4MjM6XHRcbjE4MjQ6XHRcdGlmICh0cGcgXHUwMDI2XHUwMDI2IGx1bikge1xuMTgyNTpcdFx0XHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXG4xODI2Olx0XHRcdC8qXG4xODI3Olx0XHRcdCAqIE5vdGU6IGV2dC1cdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcbjE4Mjg6XHRcdFx0ICogbHVuWzQtN10gbmVlZCB0byBiZSB6ZXJvIGFjY29yZGluZyB0byB2aXJ0aW8tc2NzaSBzcGVjLlxuMTgyOTpcdFx0XHQgKi9cbjE4MzA6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blswXSA9IDB4MDE7XG4xODMxOlx0XHRcdGV2dC1cdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXHUwMDNldHBvcnRfdHBndDtcbjE4MzI6XHRcdFx0aWYgKGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlPSAyNTYpXG4xODMzOlx0XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blsyXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDNlXHUwMDNlIDggfCAweDQwIDtcbjE4MzQ6XHRcdFx0ZXZ0LVx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cdTAwM2V1bnBhY2tlZF9sdW4gXHUwMDI2IDB4RkY7XG4xODM1Olx0XHR9XG4xODM2Olx0XG4xODM3Olx0XHRsbGlzdF9hZGQoXHUwMDI2ZXZ0LVx1MDAzZWxpc3QsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X2xpc3QpO1xuMTgzODpcdFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF93b3JrKSlcbjE4Mzk6XHRcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4xODQwOlx0fVxuMTg0MTpcdFxuMTg0MjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuMTg0MzpcdHtcbjE4NDQ6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUsXG4xODQ1Olx0XHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbjE4NDY6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cdTAwM2VkZXYsIHN0cnVjdCB2aG9zdF9zY3NpLCBkZXYpO1xuMTg0NzpcdFxuMTg0ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4xODQ5Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwaXZvdGFsIGZvciBldmVudCBzaWduYWxpbmcgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yaywgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGFuZCAqd2h5KiBpdCYjMzk7cyBpbnZva2VkIGlzIGtleSB0byBncmFzcGluZyBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aC4gSSBuZWVkIHRvIGtub3c6IHdoYXQgdHJpZ2dlcnMgdGhlIGV2ZW50LCB3aGF0IGRvZXMgaXQgc2lnbmFsLCBhbmQgd2hhdCBhY3Rpb25zIGFyZSB0YWtlbiBiYXNlZCBvbiB0aGF0IHNpZ25hbD8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBkaXJlY3QgY2FsbHMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN1cnJvdW5kaW5nIGxvZ2ljIHRoYXQgcHJvdmlkZXMgY2x1ZXMgYWJvdXQgdGhlIGV2ZW50JiMzOTtzIHB1cnBvc2UgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIHdoZW4gaXQmIzM5O3MgdHJpZ2dlcmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucywgc3VjaCBhcyBjb25kaXRpb25hbCBjYWxscyBiYXNlZCBvbiBkZXZpY2Ugc3RhdGUgb3IgZXJyb3IgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9zZW5kX2V2dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTM9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4MTQ6dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cdFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTg0Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVx0aWYgKHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlx0XHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXHRcdFx0XHQgICAgMCk7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjUyOS1cdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1MzA6XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzEtXHRcdFx0XHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGdyYWJiaW5nIGB2cS0mZ3Q7bXV0ZXhgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCBuZWVkcyB0byBwcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSB2aXJ0cXVldWUuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgY29uZGl0aW9uYWwgY2FsbCB0byBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgd2hlbiBgdnMtJmd0O3ZzX2V2ZW50c19taXNzZWRgIGlzIHNldC4KCkluc2lkZSBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGl0JiMzOTtzIGNoZWNraW5nIGB2aG9zdF92cV93b3JrX3F1ZXVlYC4gQW5kICp0aGF0JiMzOTtzKiB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgZmFpbHMsIHdlIGhpdCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgdGhpcyBjYWxscyBgbXV0ZXhfbG9jaygmYW1wO3ZxLSZndDttdXRleClgISBIYW5nIG9uLCBpc24mIzM5O3QgdGhhdC4uLiBhIHJlY3Vyc2l2ZSBsb2NrPyBZZXMsIGl0IGlzLgoKU28sIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZ3JhYnMgdGhlIG11dGV4LCBhbmQgKnRoZW4qIGNhbGxzIGEgZnVuY3Rpb24gdGhhdCAqbWlnaHQqIHRyeSB0byBncmFiIHRoZSBzYW1lIG11dGV4IGFnYWluLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby4gSXQmIzM5O3MgbGlrZWx5IGRlYWRsb2NraW5nIGlmIGB2cy0mZ3Q7dnNfZXZlbnRzX21pc3NlZGAgaXMgdHJ1ZS4KCkJ1dCB3YWl0LCBpcyB0aGlzIHRoZSBvbmx5IHBsYWNlPyBMZXQmIzM5O3MgY29uc2lkZXIgb3RoZXIgY29kZSBwYXRocyB3aGVyZSBgdnEtJmd0O211dGV4YCBtaWdodCBhbHJlYWR5IGJlIGhlbGQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gRm9yIGV4YW1wbGUsIGB2aG9zdF9zY3NpX2RvX3BsdWdgIG1pZ2h0IGFsc28gYmUgaG9sZGluZyB0aGUgbXV0ZXgsIGFuZCB0aGUgc2FtZSBwcm9ibGVtIGNvdWxkIGFyaXNlIGlmIHdlIGhpdCB0aGUgc2FtZSByZWN1cnNpdmUgbXV0ZXggbG9jay4gVGhpcyBjb3VsZCBiZSBhIG11Y2ggbW9yZSB3aWRlc3ByZWFkIGlzc3VlIHRoYW4gSSBpbml0aWFsbHkgc3VzcGVjdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgYHZob3N0X3Njc2lfZG9fcGx1Z2AgaXMgdXNlZCB0byBjb25maXJtIHRoaXMuIFRoaXMgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUwMDpcdFx0cmV0dXJuIFwmIzM0O1Vua25vd25cJiMzNDs7XG4yNTAxOlx0fVxuMjUwMjpcdFxuMjUwMzpcdHN0YXRpYyB2b2lkXG4yNTA0Olx0dmhvc3Rfc2NzaV9kb19wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxuMjUwNTpcdFx0XHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxuMjUwNjpcdHtcbjI1MDc6XHRcbjI1MDg6XHRcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IHRwZy1cdTAwM2V2aG9zdF9zY3NpO1xuMjUwOTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4yNTEwOlx0XHR1MzIgcmVhc29uO1xuMjUxMTpcdFxuMjUxMjpcdFx0aWYgKCF2cylcbjI1MTM6XHRcdFx0cmV0dXJuO1xuMjUxNDpcdFxuMjUxNTpcdFx0aWYgKHBsdWcpXG4yNTE2Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRVNDQU47XG4yNTE3Olx0XHRlbHNlXG4yNTE4Olx0XHRcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xuMjUxOTpcdFxuMjUyMDpcdFx0dnEgPSBcdTAwMjZ2cy1cdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xuMjUyMTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTIyOlx0XHQvKlxuMjUyMzpcdFx0ICogV2UgY2FuJiMzOTt0IHF1ZXVlIGV2ZW50cyBpZiB0aGUgYmFja2VuZCBoYXMgYmVlbiBjbGVhcmVkLCBiZWNhdXNlXG4yNTI0Olx0XHQgKiB3ZSBjb3VsZCBlbmQgdXAgcXVldWVpbmcgYW4gZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoLlxuMjUyNTpcdFx0ICovXG4yNTI2Olx0XHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcbjI1Mjc6XHRcdFx0Z290byB1bmxvY2s7XG4yNTI4Olx0XG4yNTI5Olx0XHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19TQ1NJX0ZfSE9UUExVRykpXG4yNTMwOlx0XHRcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcbjI1MzE6XHRcdFx0XHRcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xuMjUzMjpcdHVubG9jazpcbjI1MzM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4yNTM0Olx0fVxuMjUzNTpcdFxuMjUzNjpcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaG90cGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxuMjUzNzpcdHtcbjI1Mzg6XHRcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XG4yNTM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYWRsb2NrIEZpeCBmb3Igdmhvc3Qtc2NzaSBFdmVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBjb2RlLCBhbmQgSSYjMzk7dmUgc3BvdHRlZCBhIG5hc3R5IHBvdGVudGlhbCBkZWFkbG9jay4gSXQgbG9va3MgbGlrZSBgdmhvc3Rfc2NzaV9kb19wbHVnYCB3YXMgbG9ja2luZyBgdnEtJmd0O211dGV4YCwgYW5kIHRoZW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgICphbHNvKiByZXF1aXJlcyB0aGF0IHRoZSBjYWxsZXIgaG9sZCBgdnEtJmd0O211dGV4YC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxzOyBpdCB0aGVuIGNhbGxzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoLCBpbiB0dXJuLCB0cmllcyB0byBsb2NrIGB2cS0mZ3Q7bXV0ZXhgICphZ2FpbiohIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJlY3Vyc2l2ZSBtdXRleCBhY3F1aXNpdGlvbiBidWcsIHJpZ2h0IHRoZXJlLgoKVGhlIHBhdGNoIGFpbXMgdG8gZml4IHRoaXMgYnkgY2FyZWZ1bGx5IHJlc3RydWN0dXJpbmcgdGhlIGxvY2tpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgY3JlYXRlZCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIG9wZXJhdGVzIHdpdGhvdXQgbG9ja2luZyBgdnEtJmd0O211dGV4YOKAlHRoZSBhc3N1bXB0aW9uIGJlaW5nIHRoZSBjYWxsZXIgKmFscmVhZHkqIGhvbGRzIGl0LiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIG5vdyByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcgYG11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpYCBhcm91bmQgdGhlIGNhbGwgdG8gdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjbGV2ZXIgcGFydCBpcyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGA7IHNpbmNlIGl0JiMzOTtzIGNhbGxlZCB3aXRoIGB2cS0mZ3Q7bXV0ZXhgIGFscmVhZHkgaGVsZCwgaXQganVzdCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLiBUaGlzIGF2b2lkcyB0aGUgZG91YmxlLWxvY2sgYW5kLCBob3BlZnVsbHksIHRoZSBkZWFkbG9jay4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZml4IGlzIHNvdW5kLCBzbyBJIHNob3VsZCByZWFsbHkgY2hlY2sgYWxsIHRoZSBsb2NhdGlvbnMgd2hlcmUgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpcyBub3cgY2FsbGVkIHRvIHNlZSBpZiB0aGlzIG5ldyBsb2NraW5nIHNjaGVtZSBpcyBiZWluZyBob25vcmVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTU3MD12aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMzLS8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzNDpzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDYtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDgte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1MS1cdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6NjUyOlx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTMtXHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1OS1cdFx0XHRcdFx0ICAgICB2c19ldmVudF93b3JrKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY2MDpcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjEtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4MzgtXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFx1MDAyNnZzLVx1MDAzZXZzX2V2ZW50X3dvcmspKVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzOTpcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NQoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBmb3Igdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgUmVmYWN0b3JpbmcqKgoKT2theSwgc28gYHZob3N0X3Njc2lfZXZ0X3dvcmtgIGlzIGNhbGxpbmcgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIHJlZmFjdG9yaW5nIHdhcnJhbnRzIGVuYWJsaW5nIEtNU0FOLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgZG9lcyB0aGlzIHBhdGNoIGV2ZW4gKnRvdWNoKiBhbnl0aGluZyB0aGF0JiMzOTtzIGNvcGllZCB0byB1c2Vyc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBUaGlzIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsLiBOZXh0LCBhbSBJIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdmFyaWFibGVzPyBOb3BlLCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgaXQuIEl0JiMzOTtzIGFib3V0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBvbiB0aGF0IGB2cS0mZ3Q7bXV0ZXhgLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgcHJldmVudGluZyByZWN1cnNpdmUgbG9ja2luZyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4KClNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG9ja3MsIHRoZSBwcmltYXJ5IGNvbmNlcm5zIGFyZSBnb2luZyB0byBiZSB0aG9zZSB0aGF0IExPQ0tERVAgaXMgZGVzaWduZWQgdG8gY2F0Y2gsIG9yLCBwb3RlbnRpYWxseSwgYSBzaW1wbGUgaGFuZy4gIFRoZXNlIGtpbmRzIG9mIHByb2JsZW1zIGFyZSBub3Qgd2hhdCBLTVNBTiBpcyBmb3IuIEtNU0FOIGlzIHRoZSBLZXJuZWxNZW1vcnlTYW5pdGl6ZXI7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGZpbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2UuIFRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlIGhlcmUuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgS01TQU4gZ3VpZGVsaW5lcy4gJiMzNDtSdW5uaW5nIGEgS01TQU4gc2Vzc2lvbiBpcyBwb2ludGxlc3MgaWYgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2ggdGhlIHByb2JsZW0uJiMzNDsgIFRoaXMgcmVmYWN0b3Jpbmcgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggbG9ja2luZy4gIEtNU0FOIGZ1enppbmcgaGFzIHJlc291cmNlIGNvc3RzLiBJdCBhbHNvIHNheXMgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgIG9ubHkgaWYgdGhlIGNvZGUgaW50cm9kdWNlcyByaXNrcyBvZiBVTklOSVRJQUxJWkVEIE1FTU9SWSB0aGF0IGlzIE9OTFkgZGV0ZWN0ZWQgYnkgS01TQU4uCgpUaGUgZ3VpZGVsaW5lcyBhbHNvIHNheSB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmIHRoZSBjb2RlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAoY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQKS4gQW5kLCBpZiBhbnkgbmV3IHN0cnVjdHVyZXMgaW50cm9kdWNlZCBhcmUgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSByZWFkL2NvcHksIG9yIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgYW5zd2VyIGlzIHVuZXF1aXZvY2FsbHkgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQmIzM5O3MgYnVpbGQgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVjdXJzaXZlIG11dGV4IGxvY2tpbmcgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEluIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHZxLVx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVjdXJzaXZlIG11dGV4IGxvY2tpbmcgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMuIEluIHZob3N0X3Njc2lfc2VuZF9ldnQoKSwgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHZxLVx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MDkuODUwOTQ2NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQxMTEwNDk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3NlbmRfZXZ0XCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlY3Vyc2l2ZSBtdXRleCBsb2NraW5nIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJbiB2aG9zdF9zY3NpX3NlbmRfZXZ0KCksIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB2cS1cXHUwMDNlbXV0ZXguIFByZXZpb3VzbHksIGlmIHZob3N0X3ZxX3dvcmtfcXVldWUoKSBmYWlsZWQsIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgd2FzIGludm9rZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB2cS1cXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxcblxcblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXIgY29weWluZywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcy4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4sIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMgYnkgaW50cm9kdWNpbmcgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyB0byBhdm9pZCBkb3VibGUtbG9ja2luZyB2cS1cXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjA5Ljg1MDk1MTUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2NzI2NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWY0YjU5NjJjNGVkNjI5NGFiYmJhNDdkZDg3ZGJhYjFiZDVhYzQ5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMDowODowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuaW5kZXggN2ExZjM5YTMyN2RhNi4uN2M5MDVlOWFkNDlhOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuQEAgLTYzMCwxOSArNjMwLDI2IEBAIHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG4gXFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbisvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovXFxuK3N0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIHtcXG4tXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuIFxcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcXG4gXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuIFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG4gXFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldnQsIHQsIGxsbm9kZSwgbGlzdCkge1xcbiBcXHRcXHRpZiAoIWRyb3ApXFxuIFxcdFxcdFxcdHZob3N0X3Njc2lfZG9fZXZ0X3dvcmsodnMsIGV2dCk7XFxuIFxcdFxcdHZob3N0X3Njc2lfZnJlZV9ldnQodnMsIGV2dCk7XFxuIFxcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuK3tcXG4rXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbitcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiB9XFxuIFxcbkBAIC0xODI5LDcgKzE4MzYsNyBAQCB2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIFxcbiBcXHRsbGlzdF9hZGQoXFx1MDAyNmV2dC1cXHUwMDNlbGlzdCwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG4gXFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X3dvcmspKVxcbi1cXHRcXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XFxuK1xcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MTEuNDI4MzM0NjM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzM5OTg4ODQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIixcbiAgICBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3NlbmRfZXZ0XCIsXG4gICAgXCJ2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja1wiLFxuICAgIFwidmhvc3Rfc2NzaV9kb19wbHVnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXZlbnQgY29tcGxldGlvbiBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYyBieSBpbnRyb2R1Y2luZyBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzIHRvIGF2b2lkIGRvdWJsZS1sb2NraW5nIHZxLVxcdTAwM2VtdXRleCB3aGVuIHF1ZXVpbmcgd29yayBmYWlscyBpbiB2aG9zdF9zY3NpX3NlbmRfZXZ0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIC9kZXYvdmhvc3Qtc2NzaSBkZXZpY2UgaW9jdGwgaW50ZXJmYWNlIGFuZCBUQ00gdGFyZ2V0IGNvbmZpZ2ZzIG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZXZlbnQgdmlydHF1ZXVlIHByb2Nlc3NpbmcgYW5kIGNvbmN1cnJlbmN5L2xvY2tpbmcgaW52YXJpYW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li43YzkwNWU5YWQ0OWE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4gXHRcdGlmICghZHJvcClcbiBcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuIFx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuIFx0fVxuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbitcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiB9XG4gXG5AQCAtMTgyOSw3ICsxODM2LDcgQEAgdmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIFxuIFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbiBcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4tXHRcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbitcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MTEuNDI4MzM2MzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzQ0OTczNjI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhlIGNoYW5nZXMgc2VlbSBmb2N1c2VkIGFyb3VuZCB0aGUgZXZlbnQgaGFuZGxpbmcgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgZXZlbnQgY29tcGxldGlvbiBhbmQgcXVldWluZyBsb2dpYy5cblxuRmlyc3QsIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVGhlIG9yaWdpbmFsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgZnVuY3Rpb24gaXMgbm93IGp1c3QgYSB3cmFwcGVyLiBJdCBhY3F1aXJlcyB0aGUgdmlydHF1ZXVlIG11dGV4LCBjYWxscyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBhbmQgdGhlbiByZWxlYXNlcyB0aGUgbXV0ZXguIFRoaXMgaXMgYSB2ZXJ5IHN0YW5kYXJkIHBhdHRlcm4sIGxpa2VseSB0byBhbGxvdyB0aGUgY29yZSBjb21wbGV0aW9uIGxvZ2ljIHRvIGJlIGNhbGxlZCBpbiBjb250ZXh0cyB3aGVyZSB0aGUgbXV0ZXggaXMgYWxyZWFkeSBoZWxkLiBJdCBtYWtlcyB0aGUgY29kZSBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IGVhc2llciB0byByZWFzb24gYWJvdXQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgaW5saW5lIGZ1bmN0aW9ucywgSSBvYnNlcnZlIHRoYXQgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucy4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZXZlbnQgbGlzdCwgYW5kIGNhbGxzIGB2aG9zdF9zY3NpX2RvX2V2dF93b3JrYCBmb3IgZWFjaCBldmVudCBpZiBgZHJvcGAgaXMgZmFsc2UuIElmIGl0IGlzbid0IGRyb3BwZWQsIGl0IHByb2Nlc3NlcyB0aGUgZXZlbnQuIFRoZW4sIGl0IGFsd2F5cyBmcmVlcyB0aGUgZXZlbnQgYWZ0ZXIgaGFuZGxpbmcuIFRoZSBsb2NrIHByb3RlY3RzIHRoZSBsaW5rZWQgbGlzdC5cblxuVGhlIGtleSBjaGFuZ2UsIGF0IGxpbmUgMTgzNiwgaXMgdGhlIGNhbGwgdG8gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGRpcmVjdGx5IGZyb20gd2l0aGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCB3aGVuIHRoZSBldmVudCB3b3JrIHF1ZXVlIGZhaWxzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwYXRoIHdoZXJlIGV2ZW50cyBtaWdodCBiZSBkcm9wcGVkIG9yIHByb2Nlc3NlZCBpbW1lZGlhdGVseS4gVGhlIGNoYW5nZSBmcm9tIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGltcGxpZXMgdGhhdCB0aGUgbXV0ZXggaXMgYWxyZWFkeSBoZWxkIGJ5IHRoZSBjYWxsIHNpdGUuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIGNvbXBsZXRlIGFuZCBoYW5kbGUgdGhlIGV2ZW50cyBpbW1lZGlhdGVseSBpbiBjYXNlcyB3aGVyZSB0aGUgcXVldWVpbmcgZmFpbHMuIFRoZSBgZHJvcGAgZmxhZyBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBhIHBvc3NpYmlsaXR5IG9mIGRpc2NhcmRpbmcgZXZlbnRzIGluIGVycm9yIGNvbmRpdGlvbnMuIEkgd29uZGVyIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgcG90ZW50aWFsbHkgZHJvcHBpbmcgZXZlbnRzIGluIHRoaXMgY29udGV4dC4gSXQncyBsaWtlbHkgaW50ZW5kZWQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLCBidXQgd2hhdCBpcyB0aGUgY29zdCBvZiBkcm9wcGluZz8gSXMgdGhlcmUgYW55IGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGFzc29jaWF0ZWQgd2l0aCBkcm9wcGVkIGV2ZW50cz9cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgYHZob3N0X3ZxX3dvcmtfcXVldWVgIGNhbiBmYWlsIGFuZCB3aHkgZHJvcHBpbmcgYW4gZXZlbnQgbWlnaHQgYmUgdGhlIGNvcnJlY3QgYmVoYXZpb3IuIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgaG93IHRoZXNlIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiB0aGV5ICphcmVuJ3QqIGRyb3BwZWQuIFRoaXMgYWxsIGZlZWxzIGxpa2UgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9yIGJ1ZyBmaXggcmVsYXRlZCB0byBldmVudCBoYW5kbGluZyB1bmRlciBoaWdoIGxvYWQgb3IgZXJyb3IgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjE4Ljg3ODA3NTU4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdFxcdHZob3N0X3Njc2lfY3RsX2hhbmRsZV92cSh2cywgdnEpO1xcbjE4MTE6XFx0fVxcbjE4MTI6XFx0XFxuMTgxMzpcXHRzdGF0aWMgdm9pZFxcbjE4MTQ6XFx0dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjE4MTU6XFx0XFx0XFx0ICAgIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4sXFxuMTgxNjpcXHRcXHRcXHQgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxcbjE4MTc6XFx0e1xcbjE4MTg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQ7XFxuMTgxOTpcXHRcXG4xODIwOlxcdFxcdGV2dCA9IHZob3N0X3Njc2lfYWxsb2NhdGVfZXZ0KHZzLCBldmVudCwgcmVhc29uKTtcXG4xODIxOlxcdFxcdGlmICghZXZ0KVxcbjE4MjI6XFx0XFx0XFx0cmV0dXJuO1xcbjE4MjM6XFx0XFxuMTgyNDpcXHRcXHRpZiAodHBnIFxcdTAwMjZcXHUwMDI2IGx1bikge1xcbjE4MjU6XFx0XFx0XFx0LyogVE9ETzogc2hhcmUgbHVuIHNldHVwIGNvZGUgd2l0aCB2aXJ0aW8tc2NzaS5rbyAqL1xcbjE4MjY6XFx0XFx0XFx0LypcXG4xODI3OlxcdFxcdFxcdCAqIE5vdGU6IGV2dC1cXHUwMDNlZXZlbnQgaXMgemVyb2VkIHdoZW4gd2UgYWxsb2NhdGUgaXQgYW5kXFxuMTgyODpcXHRcXHRcXHQgKiBsdW5bNC03XSBuZWVkIHRvIGJlIHplcm8gYWNjb3JkaW5nIHRvIHZpcnRpby1zY3NpIHNwZWMuXFxuMTgyOTpcXHRcXHRcXHQgKi9cXG4xODMwOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzBdID0gMHgwMTtcXG4xODMxOlxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzFdID0gdHBnLVxcdTAwM2V0cG9ydF90cGd0O1xcbjE4MzI6XFx0XFx0XFx0aWYgKGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwM2U9IDI1NilcXG4xODMzOlxcdFxcdFxcdFxcdGV2dC1cXHUwMDNlZXZlbnQubHVuWzJdID0gbHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZVxcdTAwM2UgOCB8IDB4NDAgO1xcbjE4MzQ6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bM10gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDI2IDB4RkY7XFxuMTgzNTpcXHRcXHR9XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2ZXZ0LVxcdTAwM2VsaXN0LCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X2xpc3QpO1xcbjE4Mzg6XFx0XFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dnMtXFx1MDAzZXZzX2V2ZW50X3dvcmspKVxcbjE4Mzk6XFx0XFx0XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XFxuMTg0MDpcXHR9XFxuMTg0MTpcXHRcXG4xODQyOlxcdHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbjE4NDM6XFx0e1xcbjE4NDQ6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSxcXG4xODQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHBvbGwud29yayk7XFxuMTg0NjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Njc2ksIGRldik7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMTg0OTpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4xODUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRpZiAodnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQpXFxuMTg1MzpcXHRcXHRcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgTlVMTCwgTlVMTCwgVklSVElPX1NDU0lfVF9OT19FVkVOVCxcXG4xODU0OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4xODU1OlxcdG91dDpcXG4xODU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODU3OlxcdH1cXG4xODU4OlxcdFxcbjE4NTk6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9oYW5kbGVfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MTguODc4MjM1NTc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcwMjc5MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdGhlIFNDU0kgdmhvc3QgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AsIGFuZCBpdCdzIGdyYWJiaW5nIGB2cS1cdTAwM2VtdXRleGAuIFBlcmZlY3RseSBub3JtYWwsIHByb3RlY3Rpbmcgc2hhcmVkIHJlc291cmNlcyB3aXRoaW4gdGhlIHZpcnR1YWwgcXVldWUuIFRoZW4sIGl0IGNoZWNrcyBpZiB0aGVyZSdzIGEgdmFsaWQgYmFja2VuZCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgcXVldWUuIElmIG5vdCwgaXQgc2tpcHMgdGhlIHJlc3QgYW5kIHVubG9ja3MgdGhlIG11dGV4LiBCdXQgaGVyZSdzIHRoZSBraWNrZXI6IGl0ICptaWdodCogY2FsbCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgaWYgZXZlbnRzIHdlcmUgbWlzc2VkLlxuXG5BbmQgaW4gYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBiZWZvcmUgdGhlIGZpeCwgdGhlIGNvZGUgY2FsbHMgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtgLiBXYWl0IGEgc2Vjb25k4oCmIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYWxzbyBsb2NrcyBgdnEtXHUwMDNlbXV0ZXhgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGRlYWRsb2NrISBJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgcmV0dXJucyBmYWxzZSAoaW1wbHlpbmcgdGhlIHF1ZXVlIGlzbid0IHJlYWR5IG9yIGFibGUgdG8gcHJvY2VzcyksIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgbWlnaHQgYmUgc3R1Y2sgaG9sZGluZyBgdnEtXHUwMDNlbXV0ZXhgIHdoaWxlIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgKmFsc28qIHRyaWVzIHRvIGdyYWIgaXQuIEJvb20uIERlYWRsb2NrIVxuXG5UbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBpcyBjYWxsZWQuIEdyZXAgdGltZSEgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3Qgb3RoZXIgcGF0aHMgdGhyb3VnaCB0aGUgY29kZSB0aGF0IHdvdWxkIHRyaWdnZXIgdGhpcyBzYW1lIG11dGV4IGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgbmVzdGVkIGxvY2tpbmcgYW5kIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MjIuNTgxMDI3NjU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTg2ODM5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODoyNC4xMzk3MTY5NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDQyNTg3MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2aG9zdF9zY3NpX2RvX3BsdWcgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9kb19wbHVnYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgU0NTSSBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGRldmljZSBwbHVnZ2luZy4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgaW4gYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCwgYW5kIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsaW5lcyAyNTAwIHRocm91Z2ggMjU0MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZpcnR1YWwgU0NTSSBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSBhZGRlZCBvciByZW1vdmVkIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dC4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGxpbmVzIGJlY2F1c2UgdGhleSBwcm9iYWJseSBoYW5kbGUgdGhlIGNydWNpYWwgbG9naWMgb2YgcmVnaXN0ZXJpbmcgb3IgdW5yZWdpc3RlcmluZyBhIHZpcnR1YWwgZGV2aWNlLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgcXVldWVzLCBhbmQgcG90ZW50aWFsbHkgbm90aWZ5aW5nIHRoZSB1c2VyLXNwYWNlIHZob3N0LXNjc2kgYmFja2VuZCBhYm91dCB0aGUgZGV2aWNlJ3MgYXZhaWxhYmlsaXR5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHZob3N0X3Njc2lfZGV2YCBzdHJ1Y3R1cmUgaXMgbWFuaXB1bGF0ZWQsIGhvdyBjb21tYW5kIHF1ZXVlcyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGUgZGV2aWNlJ3Mgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIG1hbmFnZWQuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0aGF0IGhhbmRsZSB0aGUgbW9zdCBpbXBvcnRhbnQgc3RlcHMgLSB0aGUgYWN0dWFsIHBsdWdnaW5nIGFuZCB1bnBsdWdnaW5nIG9wZXJhdGlvbnMuIFRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODoyNy4xODIzMDYzNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUwMDpcXHRcXHRyZXR1cm4gXFxcIlVua25vd25cXFwiO1xcbjI1MDE6XFx0fVxcbjI1MDI6XFx0XFxuMjUwMzpcXHRzdGF0aWMgdm9pZFxcbjI1MDQ6XFx0dmhvc3Rfc2NzaV9kb19wbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxcbjI1MDU6XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VfbHVuICpsdW4sIGJvb2wgcGx1ZylcXG4yNTA2OlxcdHtcXG4yNTA3OlxcdFxcbjI1MDg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gdHBnLVxcdTAwM2V2aG9zdF9zY3NpO1xcbjI1MDk6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XFxuMjUxMDpcXHRcXHR1MzIgcmVhc29uO1xcbjI1MTE6XFx0XFxuMjUxMjpcXHRcXHRpZiAoIXZzKVxcbjI1MTM6XFx0XFx0XFx0cmV0dXJuO1xcbjI1MTQ6XFx0XFxuMjUxNTpcXHRcXHRpZiAocGx1ZylcXG4yNTE2OlxcdFxcdFxcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRVNDQU47XFxuMjUxNzpcXHRcXHRlbHNlXFxuMjUxODpcXHRcXHRcXHRyZWFzb24gPSBWSVJUSU9fU0NTSV9FVlRfUkVTRVRfUkVNT1ZFRDtcXG4yNTE5OlxcdFxcbjI1MjA6XFx0XFx0dnEgPSBcXHUwMDI2dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XFxuMjUyMTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjI1MjI6XFx0XFx0LypcXG4yNTIzOlxcdFxcdCAqIFdlIGNhbid0IHF1ZXVlIGV2ZW50cyBpZiB0aGUgYmFja2VuZCBoYXMgYmVlbiBjbGVhcmVkLCBiZWNhdXNlXFxuMjUyNDpcXHRcXHQgKiB3ZSBjb3VsZCBlbmQgdXAgcXVldWVpbmcgYW4gZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoLlxcbjI1MjU6XFx0XFx0ICovXFxuMjUyNjpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4yNTI3OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjI1Mjg6XFx0XFxuMjUyOTpcXHRcXHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19TQ1NJX0ZfSE9UUExVRykpXFxuMjUzMDpcXHRcXHRcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHZzLCB2cSwgdHBnLCBsdW4sXFxuMjUzMTpcXHRcXHRcXHRcXHRcXHQgICBWSVJUSU9fU0NTSV9UX1RSQU5TUE9SVF9SRVNFVCwgcmVhc29uKTtcXG4yNTMyOlxcdHVubG9jazpcXG4yNTMzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4yNTM0OlxcdH1cXG4yNTM1OlxcdFxcbjI1MzY6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ob3RwbHVnKHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLCBzdHJ1Y3Qgc2VfbHVuICpsdW4pXFxuMjUzNzpcXHR7XFxuMjUzODpcXHRcXHR2aG9zdF9zY3NpX2RvX3BsdWcodHBnLCBsdW4sIHRydWUpO1xcbjI1Mzk6XFx0fVxcbjI1NDA6XFx0XFxuMjU0MTpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHVucGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxcbjI1NDI6XFx0e1xcbjI1NDM6XFx0XFx0dmhvc3Rfc2NzaV9kb19wbHVnKHRwZywgbHVuLCBmYWxzZSk7XFxuMjU0NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjI3LjE4MjQ0OTkzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMjkwMDA0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIHZob3N0LXNjc2kgRGVhZGxvY2sgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGB2aG9zdC1zY3NpYCBpc3N1ZSwgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgY2xlYXIuIEl0IHNlZW1zIGB2aG9zdF9zY3NpX2RvX3BsdWdgIHdhcyBhbHNvIGdyYWJiaW5nIHRoZSBgXHUwMDI2dnEtXHUwMDNlbXV0ZXhgIGxvY2ssIHdoaWNoIGlzIHRoZSBzYW1lIG11dGV4IHRoYXQgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCB1c2VzLiBCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGZvcm1lciBmb3IgcGx1Z2dpbmcgb3BlcmF0aW9ucyBhbmQgdGhlIGxhdHRlciBmb3IgaGFuZGxpbmcgZXZlbnRzIGFyZSBjYWxsaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC5cblxuTm93LCB0aGUgY2xhc3NpYyBidWcgd2FzIGhlcmU6IFdoZW4gYHZob3N0X3ZxX3dvcmtfcXVldWVgIGZhaWxlZCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdvdWxkIHByZXZpb3VzbHkgY2FsbCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgKip0aGF0KiogZnVuY3Rpb24gd2FzIGdyYWJiaW5nIHRoZSBsb2NrIGFnYWluISBgbXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7YCBzcGVjaWZpY2FsbHkuIFNvLCB3ZSBoYWQgYSBjbGFzc2ljIG11dGV4IGRlYWRsb2NrIHNpdHVhdGlvbi5cblxuVGhlIGZpeCBJJ20gc2VlaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZXkndmUgcmVwbGFjZWQgdGhlIHByb2JsZW1hdGljIGNhbGwgd2l0aCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7YC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIG5ldyBmdW5jdGlvbiBkb2Vzbid0IHRyeSB0byBhY3F1aXJlIHRoZSBtdXRleCBpdHNlbGYuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgc3RhdGVzOiBcIkNhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC5cIiBUaGF0J3MgdGhlIGtleS5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB1c2VyIHNwYWNlIGNhbiBldmVuICpyZWFjaCogdGhpcyBgdmhvc3Qtc2NzaWAgY29kZS4gU28sIGxldCdzIHNlZSwgaXQgbG9va3MgbGlrZSBgdmhvc3Qtc2NzaWAgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgZGV2aWNlLCBgL2Rldi92aG9zdC1zY3NpYCwgb3IgaW9jdGxzIG9uIHZob3N0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRldmljZSBpcyBjcmVhdGVkIGFuZCBob3cgaXQncyB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgZml4IGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozMC4zMTE0NTMxMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg1NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pc2NfcmVnaXN0ZXJ8ZmlsZV9vcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2OD1zdGF0aWMgX19wb2xsX3Qgdmhvc3RfbmV0X2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzctXFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4OTQ9c3RhdGljIGludCBfX2luaXQgdmhvc3RfbmV0X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5Ny1cXHRcXHR2aG9zdF9uZXRfZW5hYmxlX3pjb3B5KFZIT1NUX05FVF9WUV9UWCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODk4OlxcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF9uZXRfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODk5LX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzODY9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjEtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2My1cXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0Nzc9c3RhdGljIGludCBfX2luaXQgdmhvc3Rfc2NzaV9yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Nzgte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0Nzk6XFx0cmV0dXJuIG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4MC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0zMTc9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzU5LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF90ZXN0X2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzYxLVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTUzMz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNTY3LVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE1Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjktXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05NjQ9c3RhdGljIF9fcG9sbF90IHZob3N0X3Zzb2NrX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk3MS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Zzb2NrX2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk3My1cXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05OTA9c3RhdGljIGludCBfX2luaXQgdmhvc3RfdnNvY2tfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk5OC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTk5OlxcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDAwLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MzAuMzU4NDQ1MDY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDk3ODU2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gYHZob3N0LXNjc2lgIGhhcyBiZWVuIHJlZ2lzdGVyZWQuIFRoZSBrZXJuZWwgaXMgdXNpbmcgYG1pc2NfcmVnaXN0ZXIoXHUwMDI2dmhvc3Rfc2NzaV9taXNjKWAuIFRoYXQgbWVhbnMgaXQncyBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiBpdHMgcm9sZS4gV2UgaGF2ZSBhIHJlZ2lzdHJhdGlvbiwgc28gdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC5cblxuTm93LCBob3cgYXJlIExVTnMgY29uZmlndXJlZD8gQWhhLCBsb29rcyBsaWtlIHdlIGhhdmUgYSBjb3VwbGUgb2Ygb3B0aW9ucy4gSXQncyBlaXRoZXIgZ29pbmcgdG8gYmUgdXNpbmcgdGhlIHN0YW5kYXJkIGB0YXJnZXQvY29uZmlnZnNgIG1ldGhvZCwgb3IsIGFuZCB0aGlzIGlzIG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhbiBJL08gcGF0aCBwZXJzcGVjdGl2ZSwgdGhleSdyZSBsZWFuaW5nIG9uIHRoZSB2aXJ0aW8tc2NzaSB2aG9zdCdzIGlvY3Rscywgc3BlY2lmaWNhbGx5IGBWSE9TVF9TQ1NJX1NFVF9FTkRQT0lOVGAgYW5kIGBWSE9TVF9TQ1NJX0NMRUFSX0VORFBPSU5UYC4gVGhhdCBzaWduYWxzIGEgbW9yZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmhvc3QgbGF5ZXIgZm9yIGVuZHBvaW50IG1hbmFnZW1lbnQuXG5cblRpbWUgdG8gZGl2ZSBkZWVwZXIuIExldCdzIGRpZyBpbnRvIHRoYXQgYHZob3N0X3Njc2lfbWlzY2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVlbiByZWdpc3RlcmVkLCB3aGF0IHRoZSBpbnRlcmZhY2UgbG9va3MgbGlrZSwgYW5kIHdoYXQga2luZCBvZiBvcGVyYXRpb25zIGl0J3Mgc3VwcG9ydGluZy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGxpZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozMy42MDgyMzM3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTMwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfbWlzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ3MTpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3Rfc2NzaV9taXNjID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NzItXFx0TUlTQ19EWU5BTUlDX01JTk9SLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ3Nz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9zY3NpX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3OC17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ3OTpcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2dmhvc3Rfc2NzaV9taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDgwLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0ODI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kZXJlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4My17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4NDpcXHRtaXNjX2RlcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Njc2lfbWlzYyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ4NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjMzLjY1NjM2OTQ1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDYwNDg4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGl2ZSBmb3Igdmhvc3Qvc2NzaS5jKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zIG9mIGB2aG9zdC9zY3NpLmNgLCB3aGljaCBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIExldCdzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkb2VzIHRoaXMgcGllY2UgZml0IGludG8gdGhlIGxhcmdlciB2aG9zdCBmcmFtZXdvcmssIGFuZCBTQ1NJIHNwZWNpZmljYWxseT9cIiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBgY29uZmlnYCBzeW1ib2xzIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlIGB2aG9zdC9zY3NpLmNgLCBvciBwb3RlbnRpYWxseSBpbmRpcmVjdGx5IHRocm91Z2ggaXRzIGRlcGVuZGVuY2llcyBsaWtlIHRoZSB2aG9zdCBjb3JlIG9yIFNDU0kgc3Vic3lzdGVtIG9wdGlvbnMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgdHJpc3RhdGUgb3IgYm9vbGVhbiBzZXR0aW5ncyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGlzIG1vZHVsZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhlIGB2aG9zdC9zY3NpLmNgIG1vZHVsZSBpcyBidWlsdCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzLiBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIG9wdGlvbmFsIGZlYXR1cmVzIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgY29udHJvbGxlZCBieSBLY29uZmlnIHNldHRpbmdzIHdpdGhpbiB0aGlzIGZpbGU/IFRoaXMgc2VhcmNoIHdpbGwgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCB0byBnZXQgdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEkgd2lsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGlzIG1vZHVsZSwgc28gSSBhbSBwcmVwYXJlZCB0byBjb25maWd1cmUgdGhlIHN5c3RlbSB3aXRoIGFueSBkZWZhdWx0IGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjM2LjExNjg2MTMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk3MTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTI0MiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTItXFx0aGVscFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1MzpcXHRTYXkgTSBoZXJlIHRvIGVuYWJsZSB0aGUgdmhvc3Rfc2NzaSBUQ00gZmFicmljIG1vZHVsZVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NC1cXHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXFxuLS1cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlPTM9dmhvc3RfbmV0LXkgOj0gbmV0Lm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTQtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSArPSB2aG9zdF9zY3NpLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjY6dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU0OnN0YXRpYyB1bnNpZ25lZCBpbnQgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250ID0gVkhPU1RfU0NTSV9QUkVBTExPQ19TR0xTO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU2LSNpZmRlZiBDT05GSUdfQVJDSF9OT19TR19DSEFJTlxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU3OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTgtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02My0jZWxzZVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudChjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03OC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3OTpcXHR2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQgPSBjbnQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODAtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04My1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NDpzdGF0aWMgaW50IHZob3N0X3Njc2lfZ2V0X2lubGluZV9zZ19jbnQoY2hhciAqYnVmLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg1LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTg2LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NzpcXHRyZXR1cm4gc3ByaW50ZihidWYsIFxcXCIldVxcXFxuXFxcIiwgdmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04OC19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfaW5saW5lX3NnX2NudF9vcCA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5MTpcXHQuZ2V0ID0gdmhvc3Rfc2NzaV9nZXRfaW5saW5lX3NnX2NudCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5MjpcXHQuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfaW5saW5lX3NnX2NudCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05My19O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk0LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk1Om1vZHVsZV9wYXJhbV9jYihpbmxpbmVfc2dfY250LCBcXHUwMDI2dmhvc3Rfc2NzaV9pbmxpbmVfc2dfY250X29wLCBOVUxMLCAwNjQ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05Ni1NT0RVTEVfUEFSTV9ERVNDKGlubGluZV9zZ19jbnQsIFxcXCJTZXQgdGhlIG51bWJlciBvZiBzY2F0dGVybGlzdCBlbnRyaWVzIHRvIHByZS1hbGxvY2F0ZS4gVGhlIGRlZmF1bHQgaXMgMjA0OC5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMy1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDQ6c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNS1cXHQvKiBXYWl0IGZvciB0aGUgZmx1c2ggb3BlcmF0aW9uIHRvIGZpbmlzaCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTEwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjExMTpzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMi1cXHQvKiBEZXNjcmlwdG9yIGZyb20gdmhvc3RfZ2V0X3ZxX2Rlc2MoKSBmb3IgdmlydF9xdWV1ZSBzZWdtZW50ICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDMtXFx0LyogVXNlZCB0byB0cmFjayBpbmZsaWdodCBjbWQgKi9cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDQ6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0NS19O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0Ni1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDc6c3RydWN0IHZob3N0X3Njc2lfbmV4dXMge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0OC1cXHQvKiBQb2ludGVyIHRvIFRDTSBzZXNzaW9uIGZvciBJX1QgTmV4dXMgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTI6c3RydWN0IHZob3N0X3Njc2lfdHBnIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTMtXFx0LyogVmhvc3QgcG9ydCB0YXJnZXQgcG9ydGFsIGdyb3VwIHRhZyBmb3IgVENNICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTYtXFx0aW50IHR2X3RwZ19wb3J0X2NvdW50O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1NzpcXHQvKiBVc2VkIGZvciB2aG9zdF9zY3NpIGRldmljZSByZWZlcmVuY2UgdG8gdHBnX25leHVzLCBwcm90ZWN0ZWQgYnkgdHZfdHBnX211dGV4ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU4LVxcdGludCB0dl90cGdfdmhvc3RfY291bnQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjAtXFx0aW50IHR2X2ZhYnJpY19wcm90X3R5cGU7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYxOlxcdC8qIGxpc3QgZm9yIHZob3N0X3Njc2lfbGlzdCAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2Mi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHR2X3RwZ19saXN0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY1LVxcdC8qIFBvaW50ZXIgdG8gdGhlIFRDTSBWSG9zdCBJX1QgTmV4dXMgZm9yIHRoaXMgVFBHIGVuZHBvaW50ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY2OlxcdHN0cnVjdCB2aG9zdF9zY3NpX25leHVzICp0cGdfbmV4dXM7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY3OlxcdC8qIFBvaW50ZXIgYmFjayB0byB2aG9zdF9zY3NpX3Rwb3J0ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY4OlxcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjk6XFx0LyogUmV0dXJuZWQgYnkgdmhvc3Rfc2NzaV9tYWtlX3RwZygpICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTcwLVxcdHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgc2VfdHBnO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE3MTpcXHQvKiBQb2ludGVyIGJhY2sgdG8gdmhvc3Rfc2NzaSwgcHJvdGVjdGVkIGJ5IHR2X3RwZ19tdXRleCAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE3MjpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdmhvc3Rfc2NzaTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzMtfTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTc1OnN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNzYtXFx0LyogU0NTSSBwcm90b2NvbCB0aGUgdHBvcnQgaXMgcHJvdmlkaW5nICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODEtXFx0Y2hhciB0cG9ydF9uYW1lW1ZIT1NUX1NDU0lfTkFNRUxFTl07XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgyOlxcdC8qIFJldHVybmVkIGJ5IHZob3N0X3Njc2lfbWFrZV90cG9ydCgpICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzLVxcdHN0cnVjdCBzZV93d24gdHBvcnRfd3duO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTg1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4NjpzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4Ny1cXHQvKiBldmVudCB0byBiZSBzZW50IHRvIGd1ZXN0ICovXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTM9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xOTktLyogTm90ZTogY2FuJ3Qgc2V0IFZJUlRJT19GX1ZFUlNJT05fMSB5ZXQsIHNpbmNlIHRoYXQgaW1wbGllcyBBTllfTEFZT1VULiAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIwMDpzdGF0aWMgY29uc3QgaW50IHZob3N0X3Njc2lfYml0c1tdID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwMS1cXHRWSE9TVF9GRUFUVVJFUyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIwNS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMDY6I2RlZmluZSBWSE9TVF9TQ1NJX0ZFQVRVUkVTIFZIT1NUX0ZFQVRVUkVTX1U2NCh2aG9zdF9zY3NpX2JpdHMsIDApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjA3LVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjExLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxMjpzdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxMzptb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTQtTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCBcXFwiU2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXFxcIik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxNjpzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNy1cXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHZxO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxODpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE5LVxcdC8qXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjMtXFx0ICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjI0OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0IGluZmxpZ2h0c1syXTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjUtXFx0LypcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyOS1cXHRpbnQgaW5mbGlnaHRfaWR4O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMDpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKnNjc2lfY21kcztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzEtXFx0c3RydWN0IHNiaXRtYXAgc2NzaV90YWdzO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM4LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzOTpzdHJ1Y3Qgdmhvc3Rfc2NzaSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQwOlxcdC8qIFByb3RlY3RlZCBieSB2aG9zdF9zY3NpLVxcdTAwM2VkZXYubXV0ZXggKi9cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDE6XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnICoqdnNfdHBnO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0Mi1cXHRjaGFyIHZzX3Zob3N0X3d3cG5bVFJBTlNQT1JUX0lRTl9MRU5dO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0LVxcdHN0cnVjdCB2aG9zdF9kZXYgZGV2O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NTpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnZxcztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDY6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKipvbGRfaW5mbGlnaHQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ3LVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjU2LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1NzpzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1OC1cXHRzdHJ1Y3Qgdmhvc3Rfd29yayB2d29yaztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTktXFx0c3RydWN0IHdvcmtfc3RydWN0IGZsdXNoX3dvcms7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjYwOlxcdHN0cnVjdCB2aG9zdF9zY3NpICp2aG9zdDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNjE6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjYyLVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjY0LVxcdHU4IHNjc2lfcmVzcDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNjU6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKmluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI2Ni1cXHRzdHJ1Y3QgaW92ZWMgcmVzcF9pb3Y7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNzktICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjgwOnN0cnVjdCB2aG9zdF9zY3NpX2N0eCB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjgxLVxcdGludCBoZWFkO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjkwLS8qXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjkxOiAqIEdsb2JhbCBtdXRleCB0byBwcm90ZWN0IHZob3N0X3Njc2kgVFBHIGxpc3QgZm9yIHZob3N0IElPQ1RMcyBhbmQgTElPXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjkyLSAqIGNvbmZpZ2ZzIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTMtICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mjk0OnN0YXRpYyBERUZJTkVfTVVURVgodmhvc3Rfc2NzaV9tdXRleCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mjk1OnN0YXRpYyBMSVNUX0hFQUQodmhvc3Rfc2NzaV9saXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTYtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Mjk3OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZG9uZV9pbmZsaWdodChzdHJ1Y3Qga3JlZiAqa3JlZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTgte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5OTpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzAwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMwMTpcXHRpbmZsaWdodCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCwga3JlZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzAyLVxcdGNvbXBsZXRlKFxcdTAwMjZpbmZsaWdodC1cXHUwMDNlY29tcCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMDQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzA1OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfaW5pdF9pbmZsaWdodChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzA2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqb2xkX2luZmxpZ2h0W10pXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzA3LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMDg6XFx0c3RydWN0IHZob3N0X3Njc2lfaW5mbGlnaHQgKm5ld19pbmZsaWdodDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMDktXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zMzEtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzMyOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzMzOnZob3N0X3Njc2lfZ2V0X2luZmxpZ2h0KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMzNC17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzM1OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozMzY6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzM3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjMzODpcXHRzdnEgPSBjb250YWluZXJfb2YodnEsIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTMzOS1cXHRpbmZsaWdodCA9IFxcdTAwMjZzdnEtXFx1MDAzZWluZmxpZ2h0c1tzdnEtXFx1MDAzZWluZmxpZ2h0X2lkeF07XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzQ1OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcHV0X2luZmxpZ2h0KHN0cnVjdCB2aG9zdF9zY3NpX2luZmxpZ2h0ICppbmZsaWdodClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDYte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM0NzpcXHRrcmVmX3B1dChcXHUwMDI2aW5mbGlnaHQtXFx1MDAzZWtyZWYsIHZob3N0X3Njc2lfZG9uZV9pbmZsaWdodCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzQ4LX1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNDktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzUwOnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jaGVja190cnVlKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zNTEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzU0LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1NTpzdGF0aWMgY2hhciAqdmhvc3Rfc2NzaV9nZXRfZmFicmljX3d3bihzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzU2LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNTc6XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcgPSBjb250YWluZXJfb2Yoc2VfdHBnLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM1ODpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzU5OlxcdHN0cnVjdCB2aG9zdF9zY3NpX3Rwb3J0ICp0cG9ydCA9IHRwZy1cXHUwMDNldHBvcnQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzYwLVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzYzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM2NDpzdGF0aWMgdTE2IHZob3N0X3Njc2lfZ2V0X3RwZ3Qoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2NS17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MzY2OlxcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnID0gY29udGFpbmVyX29mKHNlX3RwZyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNjc6XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnLCBzZV90cGcpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTM2OC1cXHRyZXR1cm4gdHBnLVxcdTAwM2V0cG9ydF90cGd0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzcwLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM3MTpzdGF0aWMgaW50IHZob3N0X3Njc2lfY2hlY2tfcHJvdF9mYWJyaWNfb25seShzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzcyLXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzozNzM6XFx0c3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcgPSBjb250YWluZXJfb2Yoc2VfdHBnLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM3NDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcsIHNlX3RwZyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzc1LVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzc4LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM3OTpzdGF0aWMgaW50IHZob3N0X3Njc2lfY29weV9jbWRfbG9nKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM4MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zODEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHZob3N0X2xvZyAqbG9nLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMzk3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjM5ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0zOTktXFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF9sb2cgKmxvZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQxNS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MTY6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQxNy17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDE4OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqdHZfY21kID0gY29udGFpbmVyX29mKHNlX2NtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MTk6XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfY21kLCB0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0MjA6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2YodHZfY21kLVxcdTAwM2V0dmNfdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDIxOlxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMjpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSBzdnEtXFx1MDAzZXZzO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyMzpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQgPSB0dl9jbWQtXFx1MDAzZWluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyNC1cXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU0LVxcdHNiaXRtYXBfY2xlYXJfYml0KFxcdTAwMjZzdnEtXFx1MDAzZXNjc2lfdGFncywgc2VfY21kLVxcdTAwM2VtYXBfdGFnKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NTU6XFx0dmhvc3Rfc2NzaV9wdXRfaW5mbGlnaHQoaW5mbGlnaHQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ1Ni19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDU3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ1ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NTkte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ2MDpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9pbmZsaWdodCAqaW5mbGlnaHQgPSB0bWYtXFx1MDAzZWluZmxpZ2h0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ2MS1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ2Ni1cXHRrZnJlZSh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ2NzpcXHR2aG9zdF9zY3NpX3B1dF9pbmZsaWdodChpbmZsaWdodCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDY4LX1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NjktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcwOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZHJvcF9jbWRzKHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3MS17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcyOlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCAqdDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzMtXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3Ni1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgdCwgbGxub2RlLCB0dmNfY29tcGxldGlvbl9saXN0KVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ3NzpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzgtfVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3OS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODA6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDgxLXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODItXFx0aWYgKHNlX2NtZC1cXHUwMDNlc2VfY21kX2ZsYWdzIFxcdTAwMjYgU0NGX1NDU0lfVE1SX0NEQikge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4MzpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZiA9IGNvbnRhaW5lcl9vZihzZV9jbWQsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDg0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3RtZiwgc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODUtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODctXFx0fSBlbHNlIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4OTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQsIHR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ5MDpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cSA9ICBjb250YWluZXJfb2YoY21kLVxcdTAwM2V0dmNfdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDkxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5Mi1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5NC1cXHRcXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnN2cS1cXHUwMDNldnEsIFxcdTAwMjZzdnEtXFx1MDAzZWNvbXBsZXRpb25fd29yaykpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDk1OlxcdFxcdFxcdHZob3N0X3Njc2lfZHJvcF9jbWRzKHN2cSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDk2LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5OC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTk6c3RhdGljIGludCB2aG9zdF9zY3NpX3dyaXRlX3BlbmRpbmcoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUwMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTA2OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9xdWV1ZV9kYXRhX2luKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDcte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTExLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxMjpzdGF0aWMgaW50IHZob3N0X3Njc2lfcXVldWVfc3RhdHVzKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTE3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTE5LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1MjA6XFx0c3RydWN0IHZob3N0X3Njc2lfdG1mICp0bWYgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2VfY21kKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUyNi1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1Mjc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9hYm9ydGVkX3Rhc2soc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUyOC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MzEtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTMyOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZnJlZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MzMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTM3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUzODpzdGF0aWMgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1Mzk6dmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQoc3RydWN0IHZob3N0X3Njc2kgKnZzLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTU0MC1cXHRcXHQgICAgICAgdTMyIGV2ZW50LCB1MzIgcmVhc29uKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTQyLVxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXFx1MDAyNnZzLVxcdTAwM2V2cXNbVkhPU1RfU0NTSV9WUV9FVlRdLnZxO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU0MzpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NDQtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NTEtXFx0aWYgKCFldnQpIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1NTI6XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIHZob3N0X3Njc2lfZXZ0XFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NTMtXFx0XFx0dnMtXFx1MDAzZXZzX2V2ZW50c19taXNzZWQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTYzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjU2NDpzdGF0aWMgaW50IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NjUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NTY5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTcwOnZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NzEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjI3LVxcdGVsc2VcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2Mjg6XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiB2aG9zdF9zY3NpX3NlbmRfZXZlbnRcXFxcblxcXCIpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYyOS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2MzA6XFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjMxLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzMy0vKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM1LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2MzY6XFx0c3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQsICp0O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzNy1cXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQxLVxcdFxcdGlmICghZHJvcClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDI6XFx0XFx0XFx0dmhvc3Rfc2NzaV9kb19ldnRfd29yayh2cywgZXZ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDM6XFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDQtXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQ2LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY0NzpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDgte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUxLVxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjUyOlxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1My1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjU2OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU3LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTg6XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1OS1cXHRcXHRcXHRcXHRcXHQgICAgIHZzX2V2ZW50X3dvcmspO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY2MDpcXHR2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2MS19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjYyLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY2MzpzdGF0aWMgaW50IHZob3N0X3Njc2lfY29weV9zZ2xfdG9faW92KHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY2NC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02OTItICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjkzOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfY21kX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjk0LXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2OTU6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2Yod29yayxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2OTY6XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlLCBjb21wbGV0aW9uX3dvcmspO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY5Ny1cXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3Jlc3Agdl9yc3A7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6Njk4OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kLCAqdDtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02OTktXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTcxNS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3MTY6XFx0XFx0aWYgKGNtZC1cXHUwMDNlcmVhZF9pdGVyIFxcdTAwMjZcXHUwMDI2IHZob3N0X3Njc2lfY29weV9zZ2xfdG9faW92KGNtZCkpIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03MTctXFx0XFx0XFx0dl9yc3AucmVzcG9uc2UgPSBWSVJUSU9fU0NTSV9TX0JBRF9UQVJHRVQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03MzgtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzM5OlxcdFxcdHZob3N0X3Njc2lfbG9nX3dyaXRlKGNtZC1cXHUwMDNldHZjX3ZxLCBjbWQtXFx1MDAzZXR2Y19sb2csXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzQwLVxcdFxcdFxcdFxcdCAgICAgY21kLVxcdTAwM2V0dmNfbG9nX251bSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzQxLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc0MjpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhzZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0My1cXHR9XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NTAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzUxOnN0YXRpYyBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKlxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1Mjp2aG9zdF9zY3NpX2dldF9jbWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHU2NCBzY3NpX3RhZylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NTMte1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc1NDpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cSA9IGNvbnRhaW5lcl9vZih2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NTU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlLCB2cSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzU2OlxcdHN0cnVjdCB2aG9zdF9zY3NpX2NtZCAqY21kO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc1Ny1cXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgKnByb3Rfc2dsO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzc1LVxcdGNtZC1cXHUwMDNldHZjX3NlX2NtZC5tYXBfdGFnID0gdGFnO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc3NjpcXHRjbWQtXFx1MDAzZWluZmxpZ2h0ID0gdmhvc3Rfc2NzaV9nZXRfaW5mbGlnaHQodnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc3Ny1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc4MC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3ODE6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZXZlcnRfbWFwX2lvdl90b19zZ2woc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc4Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqY3VycixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTgwNz1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6ODA4OnZob3N0X3Njc2lfbWFwX3RvX3NnbChzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04MDktXFx0XFx0ICAgICAgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODEzLXtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4MTQ6XFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEgPSBjb250YWluZXJfb2YoY21kLVxcdTAwM2V0dmNfdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6ODE1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSwgdnEpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTgxNi1cXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gc3ZxLVxcdTAwM2V1cGFnZXM7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04NTktcmV2ZXJ0X2l0ZXJfZ2V0X3BhZ2VzOlxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjg2MDpcXHR2aG9zdF9zY3NpX3JldmVydF9tYXBfaW92X3RvX3NnbChpdGVyLCAqc2dsLCBzZyk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtODYxLVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9ODczPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4NzQ6dmhvc3Rfc2NzaV9jYWxjX3NnbHMoc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgYnl0ZXMsIGludCBtYXhfc2dscylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04NzUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9ODkzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo4OTQ6dmhvc3Rfc2NzaV9jb3B5X2lvdl90b19zZ2woc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy04OTUtXFx0XFx0XFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZSwgaW50IHNnX2NvdW50LFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9OTUzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5NTQ6dmhvc3Rfc2NzaV9tYXBfaW92X3RvX3NnbChzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk1NS1cXHRcXHRcXHQgIHN0cnVjdCBzZ190YWJsZSAqc2dfdGFibGUsIGludCBzZ19jb3VudCwgYm9vbCBpc19wcm90KVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTYwLVxcdHdoaWxlIChpb3ZfaXRlcl9jb3VudChpdGVyKSkge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk2MTpcXHRcXHRyZXQgPSB2aG9zdF9zY3NpX21hcF90b19zZ2woY21kLCBpdGVyLCBzZ190YWJsZSwgXFx1MDAyNnNnLCBpc19wcm90KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NjItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo5NjM6XFx0XFx0XFx0dmhvc3Rfc2NzaV9yZXZlcnRfbWFwX2lvdl90b19zZ2woaXRlciwgc2dfdGFibGUtXFx1MDAzZXNnbCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NjQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNnKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTk3Mj1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTczOnZob3N0X3Njc2lfbWFwYWwoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05NzQtXFx0XFx0IHNpemVfdCBwcm90X2J5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKnByb3RfaXRlcixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTk3OS1cXHRpZiAocHJvdF9ieXRlcykge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjk4MDpcXHRcXHRzZ2xfY291bnQgPSB2aG9zdF9zY3NpX2NhbGNfc2dscyhwcm90X2l0ZXIsIHByb3RfYnl0ZXMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTgxLVxcdFxcdFxcdFxcdFxcdFxcdCBWSE9TVF9TQ1NJX1BSRUFMTE9DX1BST1RfU0dMUyk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy05OTUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6OTk2OlxcdFxcdHJldCA9IHZob3N0X3Njc2lfbWFwX2lvdl90b19zZ2woY21kLCBwcm90X2l0ZXIsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtOTk3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQtXFx1MDAzZXByb3RfdGFibGUsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDA1LVxcdH1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDA2OlxcdHNnbF9jb3VudCA9IHZob3N0X3Njc2lfY2FsY19zZ2xzKGRhdGFfaXRlciwgZGF0YV9ieXRlcyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDA3LVxcdFxcdFxcdFxcdFxcdCBWSE9TVF9TQ1NJX1BSRUFMTE9DX1NHTFMpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDIxOlxcdHJldCA9IHZob3N0X3Njc2lfbWFwX2lvdl90b19zZ2woY21kLCBkYXRhX2l0ZXIsIFxcdTAwMjZjbWQtXFx1MDAzZXRhYmxlLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMjItXFx0XFx0XFx0XFx0XFx0Y21kLVxcdTAwM2V0dmNfc2dsX2NvdW50LCBmYWxzZSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyMy1cXHRpZiAocmV0ID09IC1FSU5WQUwpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTAyNDpcXHRcXHRyZXQgPSB2aG9zdF9zY3NpX2NvcHlfaW92X3RvX3NnbChjbWQsIGRhdGFfaXRlciwgXFx1MDAyNmNtZC1cXHUwMDNldGFibGUsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTAyNS1cXHRcXHRcXHRcXHRcXHRcXHQgY21kLVxcdTAwM2V0dmNfc2dsX2NvdW50LCBkYXRhX2Rpcik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDMzLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwMzQ6c3RhdGljIGludCB2aG9zdF9zY3NpX3RvX3RjbV9hdHRyKGludCBhdHRyKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwMzUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA1MC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDUxOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdGFyZ2V0X3F1ZXVlX2NtZChzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1cyAqbmV4dXMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTA1MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9jbWQgKmNtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDUzLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmNkYiwgdTE2IGx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEwNzMtXFx0dGFyZ2V0X2luaXRfY21kKHNlX2NtZCwgbmV4dXMtXFx1MDAzZXR2bl9zZV9zZXNzLCBcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2Vuc2VfYnVmWzBdLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEwNzQ6XFx0XFx0XFx0bHVuLCBleHBfZGF0YV9sZW4sIHZob3N0X3Njc2lfdG9fdGNtX2F0dHIodGFza19hdHRyKSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMDc1LVxcdFxcdFxcdGRhdGFfZGlyLCBUQVJHRVRfU0NGX0FDS19LUkVGKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEwODU9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDg2OnZob3N0X3Njc2lfc2VuZF9zdGF0dXMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMDg3OlxcdFxcdCAgICAgICBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHggKnZjLCB1OCBzdGF0dXMpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTA4OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMTExPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTExMjp2aG9zdF9zY3NpX3NlbmRfYmFkX3RhcmdldChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTExMy1cXHRcXHRcXHQgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMTE0OlxcdFxcdFxcdCAgIHN0cnVjdCB2aG9zdF9zY3NpX2N0eCAqdmMsIGludCB0eXBlKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTExMTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTE0OT1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTE1MDp2aG9zdF9zY3NpX2dldF9kZXNjKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTE1MTpcXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMTUyLVxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSlcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyMDM9c3RhdGljIGludFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMDQ6dmhvc3Rfc2NzaV9jaGtfc2l6ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X3Njc2lfY3R4ICp2YylcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjA1LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyMjE9c3RhdGljIGludFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMjI6dmhvc3Rfc2NzaV9nZXRfcmVxKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9jdHggKnZjLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyMjM6XFx0XFx0ICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICoqdHBncClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjI0LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTEyMzMtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjM0OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqKnZzX3RwZywgKnRwZyA9IE5VTEw7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTIzNS1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyNTI9c3RhdGljIGludFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyNTM6dmhvc3Rfc2NzaV9zZXR1cF9yZXNwX2lvdnMoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQsIHN0cnVjdCBpb3ZlYyAqaW5faW92cyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjU0LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpbl9pb3ZzX2NudClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEyOTM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMjk0OnZob3N0X3Njc2lfaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTI5NS17XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTI5NjpcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKip2c190cGcsICp0cGc7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTI5Ny1cXHRzdHJ1Y3QgdmlydGlvX3Njc2lfY21kX3JlcSB2X3JlcTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMjk4LVxcdHN0cnVjdCB2aXJ0aW9fc2NzaV9jbWRfcmVxX3BpIHZfcmVxX3BpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEyOTk6XFx0c3RydWN0IHZob3N0X3Njc2lfbmV4dXMgKm5leHVzO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEzMDA6XFx0c3RydWN0IHZob3N0X3Njc2lfY3R4IHZjO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjEzMDE6XFx0c3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQ7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTMwMi1cXHRzdHJ1Y3QgaW92X2l0ZXIgaW5faXRlciwgcHJvdF9pdGVyLCBkYXRhX2l0ZXI7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xMzMwLVxcdGRvIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxMzMxOlxcdFxcdHJldCA9IHZob3N0X3Njc2lfZ2V0X2Rlc2ModnMsIHZxLCBcXHUwMDI2dmMsIHZxX2xvZywgXFx1MDAyNmxvZ19udW0pO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozNi4xNjk4MzY5MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA5Mjk5MjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVkhPU1RfU0NTSSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBCZWZvcmUgSSBzdGFydCBkZWJ1Z2dpbmcgYW55dGhpbmcgb3IgbWFraW5nIGFueSBjaGFuZ2VzLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVuZGVkIGJlaGF2aW9yIG9mIGBDT05GSUdfVkhPU1RfU0NTSWAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdmhvc3QsIGFuZCBpdCdsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4gSSdtIGhvcGluZyB0byBmaW5kOlxuXG4qICAgKipQcmVyZXF1aXNpdGVzOioqIFdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBDT05GSUdfVkhPU1RfU0NTSWAgdG8gZXZlbiBtYWtlIHNlbnNlPyBBcmUgdGhlcmUgc3BlY2lmaWMgU0NTSSBjb250cm9sbGVyIG9wdGlvbnMgdGhhdCBtdXN0IGJlIHNlbGVjdGVkIGZpcnN0PyBNYXliZSBzb21lIHNwZWNpZmljIHZpcnRpbyBmZWF0dXJlcz9cbiogICAqKkNvbnRleHQ6KiogV2hhdCBkb2VzIGBDT05GSUdfVkhPU1RfU0NTSWAgYWN0dWFsbHkgKmRvKj8gV2hhdCdzIHRoZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uPyBEb2VzIGl0IHByb3ZpZGUgYSB2aG9zdCBpbnRlcmZhY2UgZm9yIGEgcGFydGljdWxhciB0eXBlIG9mIHN0b3JhZ2UsIG9yIGlzIGl0IG1vcmUgZ2VuZXJpYz9cbiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGVyZSdzIGEgaGVscGZ1bCBkZXNjcmlwdGlvbiBvciBldmVuIGEgbGluayB0byBmdXJ0aGVyIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGZpbGUuIFRoYXQncyBhbHdheXMgYSBib251cywgc2F2ZXMgbWUgZnJvbSBoYXZpbmcgdG8gYmFja3RyYWNrIGFuZCBkaWcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgaW1tZWRpYXRlbHkuIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgcGljdHVyZSBoZXJlLlxuXG5Gcm9tIHRoZXJlLCBJIGNhbiBidWlsZCB1cCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgKnN1cHBvc2VkKiB0byB3b3JrLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBkZXZlbG9wIGEgcGxhbiBmb3IgdGVzdGluZyBvciBtb2RpZmljYXRpb24sIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODozOS4yNjI4MzE4OTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcXG4gIDQxOlxcdFxcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgNDQ6XFx0XFx0ICBiZSBjYWxsZWQgdmhvc3RfbmV0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgVkhPU1RfU0NTSVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDQ5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNTA6XFx0XFx0c2VsZWN0IFNHX1BPT0xcXG4gIDUxOlxcdFxcdGRlZmF1bHQgblxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcXG4gIDU0OlxcdFxcdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIFZIT1NUX1ZTT0NLXFxuICA1NzpcXHRcXHR0cmlzdGF0ZSBcXFwidmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclxcXCJcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNTk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA2MDpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNjE6XFx0XFx0ZGVmYXVsdCBuXFxuICA2MjpcXHRcXHRoZWxwXFxuICA2MzpcXHRcXHRUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcHJvdmlkZSBBRl9WU09DS1xcbiAgNjQ6XFx0XFx0c29ja2V0cyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGd1ZXN0cy4gIFRoZSBndWVzdHMgbXVzdCBoYXZlIHRoZVxcbiAgNjU6XFx0XFx0dmlydGlvX3RyYW5zcG9ydC5rbyBkcml2ZXIgbG9hZGVkIHRvIHVzZSB0aGUgdmlydGlvLXZzb2NrIGRldmljZS5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgNjg6XFx0XFx0dmhvc3RfdnNvY2suXFxuICA2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6MzkuMjYyOTAzMzM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTcyMjkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdmhvc3Rfc2NzaWAgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1ZIT1NUX1NDU0lgIHJlbGllcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIEZpcnN0IHF1ZXN0aW9uOiBpcyBgdmhvc3Rfc2NzaWAgc29tZXRoaW5nIHN5emthbGxlciBjYW4gZXZlbiAqcmVhY2gqPyBZZXMsIGl0IGxvb2tzIGxpa2UgaXQgb3BlbnMgYC9kZXYvdmhvc3Qtc2NzaWAgYW5kIHVzZXMgdGhlIHN0YW5kYXJkIGlvY3RscyBsaWtlIGBWSE9TVF9TRVRfT1dORVJgLCBgVkhPU1RfU0NTSV9TRVRfRU5EUE9JTlRgLCBhbmQgc28gb24sIGFsb25nc2lkZSB0YXJnZXQgY29yZSBjb25maWdmcyBhdCBgL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC8uLi5gLiBHb29kLiBUaGF0J3MgYSBzb2xpZCBzdGFydC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgc3l6a2FsbGVyIGhhcyB0aGUgbmVjZXNzYXJ5IGRlc2NyaXB0aW9ucyBmb3IgdGhvc2UgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYC9kZXYvdmhvc3Qtc2NzaWAgYW5kIHRoZSB2aG9zdCBpb2N0bHMgaW4gZ2VuZXJhbC4gQWgsIGdvb2QgbmV3cywgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IGl0ISBFdmVuIGJldHRlciwgdGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgbWVudGlvbnMgdmlydHVhbCBidXNlcyBsaWtlIHZpcnRpbyDigJMgYW5kIHRoYXQgaW5jbHVkZXMgYHZob3N0X3Njc2lgIGJ5IGltcGxpY2F0aW9uLiBTbywgd2UncmUgZGVmaW5pdGVseSBpbiB0aGUgXCJyZWFjaGFibGUgZHJpdmVyXCIgY2F0ZWdvcnkgYXMgcGVyIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuXG5cbk5vdywgdW5kZXIgU2VjdGlvbiAzLCB0aGUgY3JpdGVyaWEgc3RhdGUgdGhhdCB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgYW5kIG9mIGNvdXJzZSwgcmVhY2hhYmxlIGRyaXZlcnMuIFRoaXMgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIGEgcmVhY2hhYmxlIGRyaXZlci5cblxuTm93LCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoaXMgc3BlY2lmaWMgcGF0Y2g6IGl0IG1vZGlmaWVzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgYW5kIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgZXNzZW50aWFsbHkgc3BsaXR0aW5nIG91dCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AuIFRoaXMgaXMgaW50cmlndWluZy4gSXQncyBhIHJlZmFjdG9yaW5nLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgY2hhbmdlLiBXaGF0J3MgdGhlIHJhdGlvbmFsZT9cblxuVGltZSB0byBjaGVjayB0aGUgZ2l0IGxvZy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZSBjb250ZXh0Li4uIHRoZSBmdWxsIGhpc3Rvcnkgb2YgdGhlIGNoYW5nZS4gTGV0J3MgbG9vayBhdCBgZ2l0IGxvZyAtMWAgb3IgbGluZXMgNjMwLTY2MCBvZiBgZHJpdmVycy92aG9zdC9zY3NpLmNgIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaGFwcGVuZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSByZWZhY3RvcmluZyB0aGF0IGV4cG9zZXMgbmV3IHBvdGVudGlhbCBmdXp6aW5nIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NDQuMTIwMTM0ODAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0XFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XFxuIDYzMTpcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdC8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cXG4gNjM0OlxcdHN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dCwgKnQ7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuIDY0MDpcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XFxuIDY0MTpcXHRcXHRcXHRpZiAoIWRyb3ApXFxuIDY0MjpcXHRcXHRcXHRcXHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xcbiA2NDM6XFx0XFx0XFx0dmhvc3Rfc2NzaV9mcmVlX2V2dCh2cywgZXZ0KTtcXG4gNjQ0OlxcdFxcdH1cXG4gNjQ1OlxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuIDY0ODpcXHR7XFxuIDY0OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gNjUyOlxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xcbiA2NTM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiA2NTQ6XFx0fVxcbiA2NTU6XFx0XFxuIDY1NjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0XFx0c3RydWN0IHZob3N0X3Njc2kgKnZzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9zY3NpLFxcbiA2NTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG4gNjYwOlxcdFxcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9jb3B5X3NnbF90b19pb3Yoc3RydWN0IHZob3N0X3Njc2lfY21kICpjbWQpXFxuIDY2NDpcXHR7XFxuIDY2NTpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIgPSBjbWQtXFx1MDAzZXJlYWRfaXRlcjtcXG4gNjY2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIDY2NzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gNjY4OlxcdFxcdHNpemVfdCBsZW47XFxuIDY2OTpcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NDQuMTIwMjY5NzQxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4MTcyMDMzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuZCBGaXhpbmcgYSBQb3RlbnRpYWwgUmVjdXJzaXZlIE11dGV4IERlYWRsb2NrIGluIHZob3N0LXNjc2kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBkZWFkbG9jayBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0IHNlZW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBldmVudHMgdG8gdGhlIHZpcnR1YWwgU0NTSSBiYWNrZW5kLiBJdCBhbGxvY2F0ZXMgYW4gYHZob3N0X3Njc2lfZXZ0YCBzdHJ1Y3R1cmUsIHBvcHVsYXRlcyBpdCB3aXRoIGV2ZW50IGRhdGEgKGluY2x1ZGluZyBMVU4gaW5mb3JtYXRpb24gd2hlbiBhcHBsaWNhYmxlKSwgYW5kIGFkZHMgaXQgdG8gYW4gZXZlbnQgbGlzdC4gQ3J1Y2lhbGx5LCBpdCB0aGVuIGNhbGxzIGB2aG9zdF92cV93b3JrX3F1ZXVlYCB0byBzY2hlZHVsZSBwcm9jZXNzaW5nIG9mIHRoZSBldmVudC5cblxuVGhlIGNyaXRpY2FsIGlzc3VlIGFyaXNlcyB3aGVuIGB2aG9zdF92cV93b3JrX3F1ZXVlYCAqZmFpbHMqLiBUaGlzIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMgcmVhc29uczogdGhlIHdvcmsgcXVldWUgY291bGQgYmUgc3RvcHBlZCwgbm90IHJ1bm5pbmcsIG9yIHRoZXJlIGNvdWxkIGJlIHNvbWUgb3RoZXIgcmVzb3VyY2UgY29uc3RyYWludC4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGlmIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmYWlsZWQsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgIHdhcyBjYWxsZWQuIFRoZSBwcm9ibGVtPyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdhcyB0cnlpbmcgdG8gYWNxdWlyZSBgdnEtXHUwMDNlbXV0ZXhgIVxuXG5Mb29raW5nIGF0IHRoZSBjb250ZXh0LCBhbmQgd2hhdCB0aGUgY29kZSBpcyBkb2luZywgSSBzZWUgdGhhdCB0aGlzIG11dGV4IGlzIGFscmVhZHkgKmhlbGQqIGJ5IHRoZSBjYWxsZXIgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgISBDYWxscyBzdWNoIGFzIHRob3NlIG1hZGUgYnkgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGxvY2sgdGhlIHZxIG11dGV4IGJlZm9yZSBjYWxsaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YC4gU28sIGlmIHRoZSB3b3JrIHF1ZXVlIGZhaWxzLCBhbmQgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB0cmllcyB0byByZWFjcXVpcmUgdGhlIHNhbWUgbXV0ZXgsIHdlIGhhdmUgYSByZWN1cnNpdmUgbXV0ZXggZGVhZGxvY2suIFRoYXQncyBhIGNsYXNzaWMgZXJyb3IsIGFuZCB0aGlzIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgdGhhdC5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IEluc3RlYWQgb2YgY2FsbGluZyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCBkb2VzIHRoZSBsb2NrLCB3ZSBjYWxsIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgcmVhY3F1aXJpbmcgdGhlIGxvY2sgYW5kIHByZXZlbnRzIHRoZSBkZWFkbG9jay5cblxuSSdkIGFsc28gbGlrZSB0byBtYWtlIGEgcXVpY2sgbm90ZSB0aGF0IHRoZSBMVU4gcG9wdWxhdGlvbiBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgbG9va3MgYSBsaXR0bGUgY29udm9sdXRlZC4gVGhlcmUncyBhIGNvbW1lbnQgYWJvdXQgc2hhcmluZyBzZXR1cCBjb2RlIHdpdGggYHZpcnRpby1zY3NpLmtvYCwgc28gcGVyaGFwcyB0aGVyZSdzIGFuIG9wcG9ydHVuaXR5IGZvciBzb21lIGNvZGUgY29uc29saWRhdGlvbiB0aGVyZSBkb3duIHRoZSBsaW5lLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgZWxzZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZml4IGNvdmVycyBhbGwgcG9zc2libGUgZGVhZGxvY2sgc2NlbmFyaW9zLiBJJ2xsIGdyZXAgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODo0OS45Mzc0NzU0NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzQwNzY4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9NTcwPXZob3N0X3Njc2lfZG9fZXZ0X3dvcmsoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzMy0vKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBldmVudCB2aXJ0cXVldWUgbXV0ZXguICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjM0OnN0YXRpYyB2b2lkIF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjM1LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0Ni1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NDc6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBib29sIGRyb3ApXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjQ4LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY1MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjY1MjpcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBkcm9wKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NjU2PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTktXFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NjA6XFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjEtfVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM4LVxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM5OlxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODo1MS42MTE1NTc4MDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYxODg2MjA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3Qtc2NzaSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBgdmhvc3Rfc2NzaV9ldnRfd29ya2AsIGNhbGxzIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZmFsc2UpYC4gVGhhdCdzIHRoZSBrZXkgbGluZSB0byBmb2N1cyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnV6emFibGU/XCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LlxuXG5GaXJzdCwgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IFllcywgdGhlIHBhdGggYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBjbGVhcmx5IGlkZW50aWZpZXMgdGhpcyBhcyB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIsIGFuZCBhIHJlbGV2YW50IGRyaXZlciBhdCB0aGF0LiBTbywgdGhlIGNvZGUgcGF0aCBpdHNlbGYgaXMgdmlhYmxlLiBHb29kLlxuXG5Ob3csIGRvZXMgaXQgbWVldCB0aGUgZnV6emluZyBjcml0ZXJpYT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIERvIGFueSBvZiB0aGVzZSBhcHBseT8gTm9wZS4gSXQncyBub3QgZG9jdW1lbnRhdGlvbiwgaXQncyBub3QgdXNlci1zcGFjZSBjb2RlLCBpdCdzIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGFuZCBpdCdzIG5vdCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbid0IGFmZmVjdCBjb21waWxlZCBsb2dpYy4gQWxzbywgdGhpcyBpc24ndCBzb21lIHVucmVhY2hhYmxlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgYW5kIGl0J3Mgbm90IGEgdGVhcmRvd24gcGF0aCBleGVjdXRlZCBvbmx5IGR1cmluZyBob3QtdW5wbHVnLlxuXG5TaW5jZSBub25lIG9mIHRoZSBuZWdhdGl2ZSBjb25kaXRpb25zIGFwcGx5LCBsZXQncyBsb29rIGF0IHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gRG9lcyBpdCB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlPyBZZXMhICBBbmQgZXZlbiBiZXR0ZXIsIHRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgaXQgaXMgd29ydGh3aGlsZS4gQW5kIGl0IGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMqIHNpbmNlIGl04oCZcyBhc3NvY2lhdGVkIHdpdGggYSB2aXJ0dWFsIGJ1cy4gKkRlZmluaXRlbHkgd29ydGggZnV6emluZyEqXG5cblNvLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gIE5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncz8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgYWdhaW4gdG8gd29yayBvdXQgdGhlIGBFbmFibGVDb25maWdzYC4gSXQgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gVGhpcyBpcyBrZXkgaW5mb3JtYXRpb24gZm9yIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuICBXZSdsbCBuZWVkIHRvIGV4YW1pbmUgd2hhdCdzIHJlcXVpcmVkIGZvciBgVEFSR0VUX0NPUkVgIHRvIGJlIGVuYWJsZWQsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowODo1Ni4yMzA0MjM0MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Njc4MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUQVJHRVRfQ09SRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3RhcmdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90YXJnZXQvS2NvbmZpZy0yLVxcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA4OjU2LjI3OTEyOTU4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTU3NTk5MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBUQVJHRVRfQ09SRWAuIFdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0PyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGluIHRoZSBgZHJpdmVycy90YXJnZXRgIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEknbGwgb3BlbiB1cCBgZHJpdmVycy90YXJnZXQvS2NvbmZpZ2AgYW5kIHNjYW4gdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgdGhlIGBUQVJHRVRfQ09SRWAgc3ltYm9sLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGBjb25maWcgVEFSR0VUX0NPUkVgIGJsb2NrIHdpdGggYSBkZXBlbmRlbmN5IGNoYWluIG91dGxpbmVkLiBJJ20gYW50aWNpcGF0aW5nIGxvb2tpbmcgYXQgdGhlIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGBUQVJHRVRfQ09SRWAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBidXQgSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NTguODM2NzMwOTExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQ19UMTBESUZcXG4gICA4OlxcdFxcdHNlbGVjdCBTQ1NJX0NPTU1PTlxcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcXG4gIDEzOlxcdFxcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xcbiAgMTQ6XFx0XFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBUQVJHRVRfQ09SRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVENNX0lCTE9DS1xcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIlRDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcXFwiXFxuICAyMDpcXHRcXHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDg6NTguODM2Nzk4ODMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMTUyOTI5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaG9zdC1TQ1NJIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIGFzIEkgc2VlIGl0LiBJdCBsb29rcyBsaWtlIGBDT05GSUdfVkhPU1RfU0NTSWAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYENPTkZJR19UQVJHRVRfQ09SRWAg4oCTIHRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBidWlsZGluZyBvbi4gQW5kLCBhcyBleHBlY3RlZCwgd2UgbmVlZCBgRVZFTlRGRGAsIHdoaWNoIGlzIHVzdWFsbHkgYSBub24taXNzdWUgYXMgaXQncyB0eXBpY2FsbHkgZW5hYmxlZC4gU2luY2UgYENPTkZJR19WSE9TVF9TQ1NJYCBhbHNvIHB1bGxzIGluIGBDT05GSUdfVkhPU1RgLCBpdCBzb2xpZGlmaWVzIHRoZSByZWxhdGlvbnNoaXAgdGhlcmUuIFNvLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBkaXJlY3RseS4gVGhlcmUgbWlnaHQgYmUgc29tZSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIG90aGVyIGNvbmZpZyBvcHRpb25zIGRlZmluZWQgdGhlcmUgdGhhdCBhcmUgY3JpdGljYWwuIEEgcXVpY2sgc2NhbiBpcyBpbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjAxLjk1MjA5NDU3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzODY1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz01ND1zdGF0aWMgdW5zaWduZWQgaW50IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudCA9IFZIT1NUX1NDU0lfUFJFQUxMT0NfU0dMUztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01NS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo1NjojaWZkZWYgQ09ORklHX0FSQ0hfTk9fU0dfQ0hBSU5cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01Ny1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2lubGluZV9zZ19jbnQoY29uc3QgY2hhciAqYnVmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOTowMi4wMDQ0ODkwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTI0MjUyMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWSE9TVF9TQ1NJIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoYXQgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGF0IG1lYW5zLCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gYEVuYWJsZUNvbmZpZ3NgIG5lZWRzIHRvIGluY2x1ZGUgYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgb3IgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC4gSSBzZWU6IGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYSBuZXcgc3RhdGljIGhlbHBlciwgYW5kIHRoZW4gYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBhbmQgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBib3RoIG9mIHdoaWNoIGFyZSBhbHNvIHN0YXRpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgKndoeSogdGhleSBhcmUgc3RhdGljLiBBcmUgdGhleSBpbmxpbmVkPyBXaGF0IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGNhbGwgdGhlbT9cblxuTGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhlIHR3byBtYWluIGZ1bmN0aW9ucy4gSSBzZWUgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBpcyBjYWxsZWQgb25seSB3aXRoaW4gYHZob3N0X3Njc2lfZXZ0X3dvcmtgLCB3aGljaCBpdHNlbGYgaXMgYSB3b3JrIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIGB2cy1cdTAwM2V2c19ldmVudF93b3JrYC4gVGhhdCBtYWtlcyBzZW5zZS4gRm9yIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgSSBoYXZlIGEgZmV3IG1vcmUgcGxhY2VzLiBJdCdzIHVzZWQgaW4gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgd2hpY2ggaXMgYW5vdGhlciBraWNrIHdvcmsgaGFuZGxlciAodGhpcyB0aW1lIGZvciB0aGUgZXZlbnQgdmlydHF1ZXVlKSwgYW5kIGFsc28gaW4gYHZob3N0X3Njc2lfZG9fcGx1Z2AuIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgdmhvc3Rfc2NzaV9ob3RwbHVnYCBhbmQgYHZob3N0X3Njc2lfaG90dW5wbHVnYC4gU28sIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSAqdGhvc2UqIGFyZSB1c2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYzOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOTowNS41Mjg3NDQ0MDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDk0NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfaG90cGx1Z3x2aG9zdF9zY3NpX2hvdHVucGx1Z1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0yNTA0PXZob3N0X3Njc2lfZG9fcGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1MzUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjUzNjpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTM3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NDAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjU0MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHVucGx1ZyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZywgc3RydWN0IHNlX2x1biAqbHVuKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NDIte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjU0Nj1zdGF0aWMgaW50IHZob3N0X3Njc2lfcG9ydF9saW5rKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NTMtXFx0dHBnLVxcdTAwM2V0dl90cGdfcG9ydF9jb3VudCsrO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1NTQ6XFx0dmhvc3Rfc2NzaV9ob3RwbHVnKHRwZywgbHVuKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTU1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2dHBnLVxcdTAwM2V0dl90cGdfbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjU2MD1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3BvcnRfdW5saW5rKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NjctXFx0dHBnLVxcdTAwM2V0dl90cGdfcG9ydF9jb3VudC0tO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI1Njg6XFx0dmhvc3Rfc2NzaV9ob3R1bnBsdWcodHBnLCBsdW4pO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI1NjktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0cGctXFx1MDAzZXR2X3RwZ19tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjA1LjU3NDI0MzA5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTE5OTg3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFNDU0kgVmlydGlvLVNDU0kgQ29udW5kcnVtKipcblxuUmlnaHQsIGB2aG9zdF9zY3NpX3BvcnRfbGlua2AgYW5kIGB2aG9zdF9zY3NpX3BvcnRfdW5saW5rYC4uLiB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIG9mIFNDU0kgcG9ydHMgaW4gdGhlIHZob3N0LXNjc2kgc2V0dXAuIEFuZCwgb2YgY291cnNlLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdmlydHF1ZXVlIGlzIFwia2lja2VkLlwiIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIHRoaXMga2ljayBjYWxsYmFjay4uLiBsZXQgbWUganVzdCBmaW5kIHdoZXJlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgaXMgYWN0dWFsbHkgYmVpbmcgcmVnaXN0ZXJlZC4gTmVlZCB0byBzZWUgd2hhdCB0cmlnZ2VycyBpdC4gR290IHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGlzIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg2OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjA3LjY5NDIzMjY5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzMjIwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MTgxND12aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQxLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE4NDI6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTg0My17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjk1PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMzNy1cXHR2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfQ1RMXS52cS5oYW5kbGVfa2ljayA9IHZob3N0X3Njc2lfY3RsX2hhbmRsZV9raWNrO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMzg6XFx0dnMtXFx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnEuaGFuZGxlX2tpY2sgPSB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzM5LVxcdGZvciAoaSA9IFZIT1NUX1NDU0lfVlFfSU87IGkgXFx1MDAzYyBudnFzOyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MDcuNzcyNTYxNjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjExMzcwNjMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBTQ1NJIHZob3N0IEV2ZW50IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBTQ1NJIHZob3N0IGV2ZW50cyBhcmUgcHJvY2Vzc2VkLiBUaGUgY29kZSdzIHRlbGxpbmcgbWUgYHZob3N0X3Njc2lfb3BlbmAgaXMgc2V0dGluZyBgdnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cS5oYW5kbGVfa2lja2AgdG8gYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYC4gVGhhdCdzIHRoZSBldmVudCBxdWV1ZSdzIGtpY2sgaGFuZGxlciwgcmlnaHQ/IEl0J3Mga2V5IGZvciB0cmlnZ2VyaW5nIHdvcmsuXG5cbk5vdywgd2hlcmUgaXMgYHZob3N0X3Njc2lfZXZ0X3dvcmtgIGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdHJhY2sgd2hlcmUgdGhhdCB3b3JrIGZ1bmN0aW9uIGdldHMgc2V0IHVwIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIExldCdzIGxvb2sgYXQgYHZzX2V2ZW50X3dvcmtgISBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MDkuODg2MjcwNTI5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUzODI0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c19ldmVudF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzOT1zdHJ1Y3Qgdmhvc3Rfc2NzaSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDctXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ4OlxcdHN0cnVjdCB2aG9zdF93b3JrIHZzX2V2ZW50X3dvcms7IC8qIGV2dCBpbmplY3Rpb24gd29yayBpdGVtICovXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ5LVxcdHN0cnVjdCBsbGlzdF9oZWFkIHZzX2V2ZW50X2xpc3Q7IC8qIGV2dCBpbmplY3Rpb24gcXVldWUgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU4LVxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3Rfc2NzaSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICB2c19ldmVudF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NjAtXFx0dmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzNy1cXHRsbGlzdF9hZGQoXFx1MDAyNmV2dC1cXHUwMDNlbGlzdCwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF9saXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODM4OlxcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODM5LVxcdFxcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIHRydWUpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI5NT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjktXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjMzMDpcXHR2aG9zdF93b3JrX2luaXQoXFx1MDAyNnZzLVxcdTAwM2V2c19ldmVudF93b3JrLCB2aG9zdF9zY3NpX2V2dF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOTowOS45MzI4MTU0NzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODgxNTk3NTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWl0YWJsZSBmb3IgZnV6emluZy4gSSdtIGxvb2tpbmcgYXQgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAsIGB2aG9zdF9zY3NpX2V2dF93b3JrYCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgLiBUaGUga2V5IGhlcmUsIGFzIHBlciB0aGUgZ3VpZGVsaW5lcywgaXMgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgKm5vdCogZ2VuZXJhbC1wdXJwb3NlOyB0aGV5J3JlIHZlcnkgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdmhvc3Qtc2NzaSBldmVudCBoYW5kbGluZywgc28gdGhleSBwYXNzIHRoZSBpbml0aWFsIHNjcmVlbmluZy5cblxuTm93LCBsZXQncyBjb25zdWx0IFNlY3Rpb24gNC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUYXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYy4gR3JlYXQsIHRoZXNlIGZ1bmN0aW9ucyBkZWZpbml0ZWx5IGZpdCB0aGUgYmlsbC4gVGhleSBpbXBsZW1lbnQgdGhlIGNvcmUgbG9naWMgYmVpbmcgYWx0ZXJlZC4gQWxzbywgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIgb24gaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gU28sIG5vIHByb2JsZW0gaGVyZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGFuZCBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgYXJlIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYCBmaWxlLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIG15IGxpc3Qgb2YgcmVsZXZhbnQgZnVuY3Rpb25zOiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgYHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrYCwgYW5kIGB2aG9zdF9zY3NpX2RvX3BsdWdgLiBUaGV5IGFsbCBzZWVtIHJlbGV2YW50LlxuXG5Ob3csIHRoZSBmaW5hbCBjb25maXJtYXRpb24uIGBXb3J0aEZ1enppbmdgOiBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBpbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgYW5kIGNoYW5nZXMgZXZlbnQgY29tcGxldGlvbiB3aXRoIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AvYF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBUaGlzIGlzICpleGVjdXRhYmxlIGtlcm5lbCBjb2RlKiByZWFjaGFibGUgdmlhIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBkZXZpY2UgYW5kIFRDTSBjb25maWdmcyBpbnRlcmZhY2VzLiBUaGlzIGhpdHMgYWxsIHRoZSBuZWNlc3NhcnkgcmVxdWlyZW1lbnRzLlxuXG5Gb3IgYEZvY3VzU3ltYm9sc2AsIEknbSBsaXN0aW5nIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCwgYHZob3N0X3Njc2lfc2VuZF9ldnRgLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgLCBhbmQgYHZob3N0X3Njc2lfZG9fcGx1Z2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHdhbnQgdGhlIGZ1enplciB0byBmb2N1cyBvbi5cblxuRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgSSBuZWVkIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCB0byBiZSBlbmFibGVkLCB3aGljaCBpcyBjb3JyZWN0LlxuXG5Pa2F5LCBsZXQncyB0cmlwbGUtY2hlY2sgdGhlIGBzZXQtcmVzdWx0c2AgZm9ybWF0LiBUaGUgcmVzdWx0IGlzOlxuYEVuYWJsZUNvbmZpZ3NgOiBgW1wiVkhPU1RfU0NTSVwiLCBcIlRBUkdFVF9DT1JFXCJdYFxuYEZvY3VzU3ltYm9sc2A6IGBbXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsIFwidmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNcIiwgXCJ2aG9zdF9zY3NpX3NlbmRfZXZ0XCIsIFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIiwgXCJ2aG9zdF9zY3NpX2RvX3BsdWdcIl1gXG5gV29ydGhGdXp6aW5nYDogdHJ1ZVxuYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuXG5Ob3csIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIzOCwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MTguNzQ4NzkzODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQyNTI5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c1wiLFxuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIixcbiAgICBcInZob3N0X3Njc2lfZG9fcGx1Z1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMgYnkgaW50cm9kdWNpbmcgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyB0byBhdm9pZCBkb3VibGUtbG9ja2luZyB2cS1cXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c1wiLFxuICAgIFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICAgIFwidmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tcIixcbiAgICBcInZob3N0X3Njc2lfZG9fcGx1Z1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV2ZW50IGNvbXBsZXRpb24gYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gZHJpdmVycy92aG9zdC9zY3NpLmMgYnkgaW50cm9kdWNpbmcgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyB0byBhdm9pZCBkb3VibGUtbG9ja2luZyB2cS1cXHUwMDNlbXV0ZXggd2hlbiBxdWV1aW5nIHdvcmsgZmFpbHMgaW4gdmhvc3Rfc2NzaV9zZW5kX2V2dC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSAvZGV2L3Zob3N0LXNjc2kgZGV2aWNlIGlvY3RsIGludGVyZmFjZSBhbmQgVENNIHRhcmdldCBjb25maWdmcyBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGV2ZW50IHZpcnRxdWV1ZSBwcm9jZXNzaW5nIGFuZCBjb25jdXJyZW5jeS9sb2NraW5nIGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjE4LjgyODIyNzE0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzM4MTI2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToxOC44Mjg3NjY3MzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzQzMzI2Nzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWN1cnNpdmUgbXV0ZXggbG9ja2luZyBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSW4gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdnEtXFx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXFx1MDAzZW11dGV4IGEgc2Vjb25kIHRpbWUuIFRoZSBwYXRjaCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciAoX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpKSBhbmQgY2FsbHMgdGhhdCBkaXJlY3RseSB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZC5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZjRiNTk2MmM0ZWQ2Mjk0YWJiYmE0N2RkODdkYmFiMWJkNWFjNDk1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTA6MDg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA3YTFmMzlhMzI3ZGE2Li43YzkwNWU5YWQ0OWE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtNjMwLDE5ICs2MzAsMjYgQEAgdmhvc3Rfc2NzaV9kb19ldnRfd29yayhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0KVxuIFx0dmhvc3Rfc2NzaV9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nX251bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGV2ZW50IHZpcnRxdWV1ZSBtdXRleC4gKi9cbitzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxuIHtcbi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnMtXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX2V2dCAqZXZ0LCAqdDtcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfbGlzdCk7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgbGxub2RlLCBsaXN0KSB7XG4gXHRcdGlmICghZHJvcClcbiBcdFx0XHR2aG9zdF9zY3NpX2RvX2V2dF93b3JrKHZzLCBldnQpO1xuIFx0XHR2aG9zdF9zY3NpX2ZyZWVfZXZ0KHZzLCBldnQpO1xuIFx0fVxuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyhzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIGJvb2wgZHJvcClcbit7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzLVx1MDAzZXZxc1tWSE9TVF9TQ1NJX1ZRX0VWVF0udnE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbitcdF9fdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHModnMsIGRyb3ApO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiB9XG4gXG5AQCAtMTgyOSw3ICsxODM2LDcgQEAgdmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIFxuIFx0bGxpc3RfYWRkKFx1MDAyNmV2dC1cdTAwM2VsaXN0LCBcdTAwMjZ2cy1cdTAwM2V2c19ldmVudF9saXN0KTtcbiBcdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dnMtXHUwMDNldnNfZXZlbnRfd29yaykpXG4tXHRcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcbitcdFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZXZ0X2hhbmRsZV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MTguODI4NzY4MTg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1ODQzODg0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIEV2ZW50IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZob3N0LXNjc2lgIGNvZGUgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgaXMgZm9jdXNlZCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBob3cgZXZlbnRzIGFyZSBjb21wbGV0ZWQgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGluIHRoZSBmdW5jdGlvbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLlxuXG5Jbml0aWFsbHksIHRoZSBmdW5jdGlvbiBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIHdhcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBhbmQgZnJlZWluZyBldmVudHMgc3RvcmVkIGluIGB2cy1cdTAwM2V2c19ldmVudF9saXN0YC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZ1bmN0aW9uLCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIGFuZCBpdCBhcHBlYXJzIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgbm93IHJlc2lkZXMuIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCBkb2VzIHRoZSBhY3R1YWwgZXZlbnQgcHJvY2Vzc2luZyBhbmQgZnJlZWluZy4gVGhlIG9yaWdpbmFsIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agbm93IHNpbXBseSBjYWxscyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYWZ0ZXIgbG9ja2luZyB0aGUgdmlydHF1ZXVlIG11dGV4IGB2cS1cdTAwM2VtdXRleGAuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLlxuXG5UaGUga2V5IGxpbmUgdG8gaW52ZXN0aWdhdGUgc2VlbXMgdG8gYmUgd2hlcmUgYHZob3N0X3Njc2lfc2VuZF9ldnRgIGlzIGNhbGxlZC4gSXQgdXNlcyBgbGxpc3RfYWRkYCB0byBhZGQgZXZlbnQgdG8gdGhlIGV2ZW50IGxpc3QuIFRoZW4gaXQgY2FsbHMgZWl0aGVyIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBvciwgaWYgdGhhdCByZXR1cm5zIGZhbHNlLCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2Agd2l0aCB0aGUgYGRyb3BgIGZsYWcgc2V0IHRvIHRydWUuICBUaGUgaW1wb3J0YW50IG9ic2VydmF0aW9uIGlzIHRoZSBuZXcgY2FsbCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgdG8gY29tcGxldGUgdGhlIGV2ZW50cywgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY2FsbCB0byBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLlxuXG5TbyB0aGUgaW50ZW50IGlzIHRvIHByb3RlY3QgZXZlbnQgaGFuZGxpbmcuIFRoZSB1c2Ugb2YgdGhlIGludGVybmFsIGZ1bmN0aW9uIGBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzYCB3aXRoIHRoZSBtdXRleCwgY291cGxlZCB3aXRoIGBsbGlzdF9kZWxfYWxsYCBhbmQgYGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBjb25maXJtcyB0aGF0IHRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgZXZlbnQgbGlzdCBkdXJpbmcgcHJvY2Vzc2luZywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMuIFRoaXMgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyByZWZhY3RvcmluZywgYnV0IGF0IGZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIGNsZWFuIGFuZCB3ZWxsLW1vdGl2YXRlZCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToyNi40MTMxNTk2NDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MTA6XFx0XFx0dmhvc3Rfc2NzaV9jdGxfaGFuZGxlX3ZxKHZzLCB2cSk7XFxuMTgxMTpcXHR9XFxuMTgxMjpcXHRcXG4xODEzOlxcdHN0YXRpYyB2b2lkXFxuMTgxNDpcXHR2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMTgxNTpcXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4xODE2OlxcdFxcdFxcdCAgICB1MzIgZXZlbnQsIHUzMiByZWFzb24pXFxuMTgxNzpcXHR7XFxuMTgxODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV9ldnQgKmV2dDtcXG4xODE5OlxcdFxcbjE4MjA6XFx0XFx0ZXZ0ID0gdmhvc3Rfc2NzaV9hbGxvY2F0ZV9ldnQodnMsIGV2ZW50LCByZWFzb24pO1xcbjE4MjE6XFx0XFx0aWYgKCFldnQpXFxuMTgyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTgyMzpcXHRcXG4xODI0OlxcdFxcdGlmICh0cGcgXFx1MDAyNlxcdTAwMjYgbHVuKSB7XFxuMTgyNTpcXHRcXHRcXHQvKiBUT0RPOiBzaGFyZSBsdW4gc2V0dXAgY29kZSB3aXRoIHZpcnRpby1zY3NpLmtvICovXFxuMTgyNjpcXHRcXHRcXHQvKlxcbjE4Mjc6XFx0XFx0XFx0ICogTm90ZTogZXZ0LVxcdTAwM2VldmVudCBpcyB6ZXJvZWQgd2hlbiB3ZSBhbGxvY2F0ZSBpdCBhbmRcXG4xODI4OlxcdFxcdFxcdCAqIGx1bls0LTddIG5lZWQgdG8gYmUgemVybyBhY2NvcmRpbmcgdG8gdmlydGlvLXNjc2kgc3BlYy5cXG4xODI5OlxcdFxcdFxcdCAqL1xcbjE4MzA6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMF0gPSAweDAxO1xcbjE4MzE6XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMV0gPSB0cGctXFx1MDAzZXRwb3J0X3RwZ3Q7XFxuMTgzMjpcXHRcXHRcXHRpZiAobHVuLVxcdTAwM2V1bnBhY2tlZF9sdW4gXFx1MDAzZT0gMjU2KVxcbjE4MzM6XFx0XFx0XFx0XFx0ZXZ0LVxcdTAwM2VldmVudC5sdW5bMl0gPSBsdW4tXFx1MDAzZXVucGFja2VkX2x1biBcXHUwMDNlXFx1MDAzZSA4IHwgMHg0MCA7XFxuMTgzNDpcXHRcXHRcXHRldnQtXFx1MDAzZWV2ZW50Lmx1blszXSA9IGx1bi1cXHUwMDNldW5wYWNrZWRfbHVuIFxcdTAwMjYgMHhGRjtcXG4xODM1OlxcdFxcdH1cXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZldnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfbGlzdCk7XFxuMTgzODpcXHRcXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfd29yaykpXFxuMTgzOTpcXHRcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG4xODQwOlxcdH1cXG4xODQxOlxcdFxcbjE4NDI6XFx0c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuMTg0MzpcXHR7XFxuMTg0NDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLFxcbjE4NDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cG9sbC53b3JrKTtcXG4xODQ2OlxcdFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cyA9IGNvbnRhaW5lcl9vZih2cS1cXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3Rfc2NzaSwgZGV2KTtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4xODQ5OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToyNi40MTMzNTE3NTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4ODUwNjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCBDYWxsIFNpdGVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYHZob3N0X3Njc2lfc2VuZF9ldnRgLiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwaXZvdGFsIGZvciBldmVudCBzaWduYWxpbmcgd2l0aGluIHRoZSB2aG9zdC1zY3NpIGZyYW1ld29yaywgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGFuZCAqd2h5KiBpdCdzIGludm9rZWQgaXMga2V5IHRvIGdyYXNwaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoLiBJIG5lZWQgdG8ga25vdzogd2hhdCB0cmlnZ2VycyB0aGUgZXZlbnQsIHdoYXQgZG9lcyBpdCBzaWduYWwsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIGJhc2VkIG9uIHRoYXQgc2lnbmFsPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIHNlYXJjaCB0byBpZGVudGlmeSBhbGwgZGlyZWN0IGNhbGxzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdXJyb3VuZGluZyBsb2dpYyB0aGF0IHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSBldmVudCdzIHB1cnBvc2UgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIHdoZW4gaXQncyB0cmlnZ2VyZWQuIEknbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMsIHN1Y2ggYXMgY29uZGl0aW9uYWwgY2FsbHMgYmFzZWQgb24gZGV2aWNlIHN0YXRlIG9yIGVycm9yIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjI4LjYwMTg2MTE2N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2Mjc5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZW5kX2V2dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xODEzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgxNDp2aG9zdF9zY3NpX3NlbmRfZXZ0KHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgxNS1cXHRcXHQgICAgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4NDI9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODUyLVxcdGlmICh2cy1cXHUwMDNldnNfZXZlbnRzX21pc3NlZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxODUzOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCBOVUxMLCBOVUxMLCBWSVJUSU9fU0NTSV9UX05PX0VWRU5ULFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE4NTQtXFx0XFx0XFx0XFx0ICAgIDApO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjUwND12aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTI5LVxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNTMwOlxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNTMxLVxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMDowOToyOC42NTE0OTMyNzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTU0NjExMTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGVhZGxvY2sgaW4gdmhvc3Qtc2NzaSBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGB2aG9zdF9zY3NpX2V2dF9oYW5kbGVfa2lja2AgZnVuY3Rpb24gYW5kIGl0J3MgZ3JhYmJpbmcgYHZxLVx1MDAzZW11dGV4YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgbmVlZHMgdG8gcHJvdGVjdCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgdmlydHF1ZXVlLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGNvbmRpdGlvbmFsIGNhbGwgdG8gYHZob3N0X3Njc2lfc2VuZF9ldnRgIHdoZW4gYHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWRgIGlzIHNldC5cblxuSW5zaWRlIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YCwgaXQncyBjaGVja2luZyBgdmhvc3RfdnFfd29ya19xdWV1ZWAuIEFuZCAqdGhhdCdzKiB3aGVyZSBteSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBJZiBgdmhvc3RfdnFfd29ya19xdWV1ZWAgZmFpbHMsIHdlIGhpdCBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLiBBbmQgdGhpcyBjYWxscyBgbXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleClgISBIYW5nIG9uLCBpc24ndCB0aGF0Li4uIGEgcmVjdXJzaXZlIGxvY2s/IFllcywgaXQgaXMuXG5cblNvLCBgdmhvc3Rfc2NzaV9ldnRfaGFuZGxlX2tpY2tgIGdyYWJzIHRoZSBtdXRleCwgYW5kICp0aGVuKiBjYWxscyBhIGZ1bmN0aW9uIHRoYXQgKm1pZ2h0KiB0cnkgdG8gZ3JhYiB0aGUgc2FtZSBtdXRleCBhZ2Fpbi4gVGhhdCdzIGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby4gSXQncyBsaWtlbHkgZGVhZGxvY2tpbmcgaWYgYHZzLVx1MDAzZXZzX2V2ZW50c19taXNzZWRgIGlzIHRydWUuXG5cbkJ1dCB3YWl0LCBpcyB0aGlzIHRoZSBvbmx5IHBsYWNlPyBMZXQncyBjb25zaWRlciBvdGhlciBjb2RlIHBhdGhzIHdoZXJlIGB2cS1cdTAwM2VtdXRleGAgbWlnaHQgYWxyZWFkeSBiZSBoZWxkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEZvciBleGFtcGxlLCBgdmhvc3Rfc2NzaV9kb19wbHVnYCBtaWdodCBhbHNvIGJlIGhvbGRpbmcgdGhlIG11dGV4LCBhbmQgdGhlIHNhbWUgcHJvYmxlbSBjb3VsZCBhcmlzZSBpZiB3ZSBoaXQgdGhlIHNhbWUgcmVjdXJzaXZlIG11dGV4IGxvY2suIFRoaXMgY291bGQgYmUgYSBtdWNoIG1vcmUgd2lkZXNwcmVhZCBpc3N1ZSB0aGFuIEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGB2aG9zdF9zY3NpX2RvX3BsdWdgIGlzIHVzZWQgdG8gY29uZmlybSB0aGlzLiBUaGlzIG5lZWRzIGltbWVkaWF0ZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MzQuMTk3NjA3OTE2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTAwOlxcdFxcdHJldHVybiBcXFwiVW5rbm93blxcXCI7XFxuMjUwMTpcXHR9XFxuMjUwMjpcXHRcXG4yNTAzOlxcdHN0YXRpYyB2b2lkXFxuMjUwNDpcXHR2aG9zdF9zY3NpX2RvX3BsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXFxuMjUwNTpcXHRcXHRcXHQgIHN0cnVjdCBzZV9sdW4gKmx1biwgYm9vbCBwbHVnKVxcbjI1MDY6XFx0e1xcbjI1MDc6XFx0XFxuMjUwODpcXHRcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMgPSB0cGctXFx1MDAzZXZob3N0X3Njc2k7XFxuMjUwOTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG4yNTEwOlxcdFxcdHUzMiByZWFzb247XFxuMjUxMTpcXHRcXG4yNTEyOlxcdFxcdGlmICghdnMpXFxuMjUxMzpcXHRcXHRcXHRyZXR1cm47XFxuMjUxNDpcXHRcXG4yNTE1OlxcdFxcdGlmIChwbHVnKVxcbjI1MTY6XFx0XFx0XFx0cmVhc29uID0gVklSVElPX1NDU0lfRVZUX1JFU0VUX1JFU0NBTjtcXG4yNTE3OlxcdFxcdGVsc2VcXG4yNTE4OlxcdFxcdFxcdHJlYXNvbiA9IFZJUlRJT19TQ1NJX0VWVF9SRVNFVF9SRU1PVkVEO1xcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHR2cSA9IFxcdTAwMjZ2cy1cXHUwMDNldnFzW1ZIT1NUX1NDU0lfVlFfRVZUXS52cTtcXG4yNTIxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuMjUyMjpcXHRcXHQvKlxcbjI1MjM6XFx0XFx0ICogV2UgY2FuJ3QgcXVldWUgZXZlbnRzIGlmIHRoZSBiYWNrZW5kIGhhcyBiZWVuIGNsZWFyZWQsIGJlY2F1c2VcXG4yNTI0OlxcdFxcdCAqIHdlIGNvdWxkIGVuZCB1cCBxdWV1ZWluZyBhbiBldmVudCBhZnRlciB0aGUgZmx1c2guXFxuMjUyNTpcXHRcXHQgKi9cXG4yNTI2OlxcdFxcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxcbjI1Mjc6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMjUyODpcXHRcXG4yNTI5OlxcdFxcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1NDU0lfRl9IT1RQTFVHKSlcXG4yNTMwOlxcdFxcdFxcdHZob3N0X3Njc2lfc2VuZF9ldnQodnMsIHZxLCB0cGcsIGx1bixcXG4yNTMxOlxcdFxcdFxcdFxcdFxcdCAgIFZJUlRJT19TQ1NJX1RfVFJBTlNQT1JUX1JFU0VULCByZWFzb24pO1xcbjI1MzI6XFx0dW5sb2NrOlxcbjI1MzM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbjI1MzQ6XFx0fVxcbjI1MzU6XFx0XFxuMjUzNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2hvdHBsdWcoc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsIHN0cnVjdCBzZV9sdW4gKmx1bilcXG4yNTM3OlxcdHtcXG4yNTM4OlxcdFxcdHZob3N0X3Njc2lfZG9fcGx1Zyh0cGcsIGx1biwgdHJ1ZSk7XFxuMjUzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjM0LjE5NzgwODExNloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDMyOTk0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYWRsb2NrIEZpeCBmb3Igdmhvc3Qtc2NzaSBFdmVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHZob3N0LXNjc2kgY29kZSwgYW5kIEkndmUgc3BvdHRlZCBhIG5hc3R5IHBvdGVudGlhbCBkZWFkbG9jay4gSXQgbG9va3MgbGlrZSBgdmhvc3Rfc2NzaV9kb19wbHVnYCB3YXMgbG9ja2luZyBgdnEtXHUwMDNlbXV0ZXhgLCBhbmQgdGhlbiBgdmhvc3Rfc2NzaV9zZW5kX2V2dGAgKmFsc28qIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBob2xkIGB2cS1cdTAwM2VtdXRleGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB2aG9zdF92cV93b3JrX3F1ZXVlYCBmYWlsczsgaXQgdGhlbiBjYWxscyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgLCB3aGljaCwgaW4gdHVybiwgdHJpZXMgdG8gbG9jayBgdnEtXHUwMDNlbXV0ZXhgICphZ2FpbiohIFRoYXQncyBhIGNsYXNzaWMgcmVjdXJzaXZlIG11dGV4IGFjcXVpc2l0aW9uIGJ1ZywgcmlnaHQgdGhlcmUuXG5cblRoZSBwYXRjaCBhaW1zIHRvIGZpeCB0aGlzIGJ5IGNhcmVmdWxseSByZXN0cnVjdHVyaW5nIHRoZSBsb2NraW5nLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgY3JlYXRlZCBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AsIHdoaWNoIG9wZXJhdGVzIHdpdGhvdXQgbG9ja2luZyBgdnEtXHUwMDNlbXV0ZXhg4oCUdGhlIGFzc3VtcHRpb24gYmVpbmcgdGhlIGNhbGxlciAqYWxyZWFkeSogaG9sZHMgaXQuIGB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50c2AgaXMgbm93IHJlc3BvbnNpYmxlIGZvciB3cmFwcGluZyBgbXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleClgIGFyb3VuZCB0aGUgY2FsbCB0byB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIGNsZXZlciBwYXJ0IGlzIGluIGB2aG9zdF9zY3NpX3NlbmRfZXZ0YDsgc2luY2UgaXQncyBjYWxsZWQgd2l0aCBgdnEtXHUwMDNlbXV0ZXhgIGFscmVhZHkgaGVsZCwgaXQganVzdCBjYWxscyBgX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgdHJ1ZSlgLiBUaGlzIGF2b2lkcyB0aGUgZG91YmxlLWxvY2sgYW5kLCBob3BlZnVsbHksIHRoZSBkZWFkbG9jay5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBmaXggaXMgc291bmQsIHNvIEkgc2hvdWxkIHJlYWxseSBjaGVjayBhbGwgdGhlIGxvY2F0aW9ucyB3aGVyZSBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGlzIG5vdyBjYWxsZWQgdG8gc2VlIGlmIHRoaXMgbmV3IGxvY2tpbmcgc2NoZW1lIGlzIGJlaW5nIGhvbm9yZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjM3LjYzMDgwNTAwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjcxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTU3MD12aG9zdF9zY3NpX2RvX2V2dF93b3JrKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfZXZ0ICpldnQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02MzMtLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZXZlbnQgdmlydHF1ZXVlIG11dGV4LiAqL1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjYzNDpzdGF0aWMgdm9pZCBfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTYzNS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NDYtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjQ3OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgYm9vbCBkcm9wKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTY0OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy02NTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo2NTI6XFx0X192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cyh2cywgZHJvcCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjUzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY1Nj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2V2dF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjU5LVxcdFxcdFxcdFxcdFxcdCAgICAgdnNfZXZlbnRfd29yayk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NjYwOlxcdHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCBmYWxzZSk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNjYxLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE4MTQ9dmhvc3Rfc2NzaV9zZW5kX2V2dChzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTgzOC1cXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ2cy1cXHUwMDNldnNfZXZlbnRfd29yaykpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTgzOTpcXHRcXHRfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKHZzLCB0cnVlKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xODQwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTA6MDk6MzcuNzUwNDgyNDY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTE1MjcyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBmb3Igdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBgdmhvc3Rfc2NzaV9ldnRfd29ya2AgaXMgY2FsbGluZyBgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHNgIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgcmVmYWN0b3Jpbmcgd2FycmFudHMgZW5hYmxpbmcgS01TQU4uIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGRvZXMgdGhpcyBwYXRjaCBldmVuICp0b3VjaCogYW55dGhpbmcgdGhhdCdzIGNvcGllZCB0byB1c2Vyc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBUaGlzIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsLiBOZXh0LCBhbSBJIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdmFyaWFibGVzPyBOb3BlLCBkb2Vzbid0IHNlZW0gbGlrZSBpdC4gSXQncyBhYm91dCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gb24gdGhhdCBgdnEtXHUwMDNlbXV0ZXhgLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgcHJldmVudGluZyByZWN1cnNpdmUgbG9ja2luZyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy5cblxuU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGxvY2tzLCB0aGUgcHJpbWFyeSBjb25jZXJucyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgdGhhdCBMT0NLREVQIGlzIGRlc2lnbmVkIHRvIGNhdGNoLCBvciwgcG90ZW50aWFsbHksIGEgc2ltcGxlIGhhbmcuICBUaGVzZSBraW5kcyBvZiBwcm9ibGVtcyBhcmUgbm90IHdoYXQgS01TQU4gaXMgZm9yLiBLTVNBTiBpcyB0aGUgS2VybmVsTWVtb3J5U2FuaXRpemVyOyBpdCdzIGRlc2lnbmVkIHRvIGZpbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2UuIFRoYXQncyBub3QgdGhlIGNhc2UgaGVyZS5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIEtNU0FOIGd1aWRlbGluZXMuIFwiUnVubmluZyBhIEtNU0FOIHNlc3Npb24gaXMgcG9pbnRsZXNzIGlmIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoIHRoZSBwcm9ibGVtLlwiICBUaGlzIHJlZmFjdG9yaW5nIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGxvY2tpbmcuICBLTVNBTiBmdXp6aW5nIGhhcyByZXNvdXJjZSBjb3N0cy4gSXQgYWxzbyBzYXlzIHRvIHNldCBgTmVlZHNLTVNBTj10cnVlYCBvbmx5IGlmIHRoZSBjb2RlIGludHJvZHVjZXMgcmlza3Mgb2YgVU5JTklUSUFMSVpFRCBNRU1PUlkgdGhhdCBpcyBPTkxZIGRldGVjdGVkIGJ5IEtNU0FOLlxuXG5UaGUgZ3VpZGVsaW5lcyBhbHNvIHNheSB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmIHRoZSBjb2RlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAoY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQKS4gQW5kLCBpZiBhbnkgbmV3IHN0cnVjdHVyZXMgaW50cm9kdWNlZCBhcmUgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSByZWFkL2NvcHksIG9yIHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvIGxlYWtzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlIGFuc3dlciBpcyB1bmVxdWl2b2NhbGx5IGBOZWVkc0tNU0FOPWZhbHNlYC4gTGV0J3MgYnVpbGQgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjUsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEwOjA5OjQyLjI2MjAxMjYxN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWN1cnNpdmUgbXV0ZXggbG9ja2luZyBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBpbiBkcml2ZXJzL3Zob3N0L3Njc2kuYy4gSW4gdmhvc3Rfc2NzaV9zZW5kX2V2dCgpLCB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdnEtXFx1MDAzZW11dGV4LiBQcmV2aW91c2x5LCBpZiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgZmFpbGVkLCB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIHdhcyBpbnZva2VkLCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdnEtXFx1MDAzZW11dGV4IGEgc2Vjb25kIHRpbWUuIFRoZSBwYXRjaCBzcGxpdHMgdmhvc3Rfc2NzaV9jb21wbGV0ZV9ldmVudHMoKSBpbnRvIGFuIHVubG9ja2VkIGhlbHBlciAoX192aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpKSBhbmQgY2FsbHMgdGhhdCBkaXJlY3RseSB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZC5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgYnVmZmVyIGNvcHlpbmcsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlY3Vyc2l2ZSBtdXRleCBsb2NraW5nIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGluIGRyaXZlcnMvdmhvc3Qvc2NzaS5jLiBJbiB2aG9zdF9zY3NpX3NlbmRfZXZ0KCksIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB2cS1cXHUwMDNlbXV0ZXguIFByZXZpb3VzbHksIGlmIHZob3N0X3ZxX3dvcmtfcXVldWUoKSBmYWlsZWQsIHZob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkgd2FzIGludm9rZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB2cS1cXHUwMDNlbXV0ZXggYSBzZWNvbmQgdGltZS4gVGhlIHBhdGNoIHNwbGl0cyB2aG9zdF9zY3NpX2NvbXBsZXRlX2V2ZW50cygpIGludG8gYW4gdW5sb2NrZWQgaGVscGVyIChfX3Zob3N0X3Njc2lfY29tcGxldGVfZXZlbnRzKCkpIGFuZCBjYWxscyB0aGF0IGRpcmVjdGx5IHdoZW4gdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLlxcblxcblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXIgY29weWluZywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcy4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4sIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbcjlw[1] Phase: Succeeded StartedAt: 2026-09-12 10:09:53 +0000 UTC FinishedAt: 2026-09-12 10:09:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 10:09:53 +0000 UTC FinishedAt: 2026-09-12 10:09:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2] Phase: Succeeded StartedAt: 2026-09-12 10:09:53 +0000 UTC FinishedAt: 2026-09-12 12:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 10:09:53 +0000 UTC FinishedAt: 2026-09-12 12:01:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 10:09:53 +0000 UTC FinishedAt: 2026-09-12 10:10:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 10:09:53 +0000 UTC FinishedAt: 2026-09-12 10:09:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbcjlw/series-workflowbcjlw-convert-artifact-1590566541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 10:10:04 +0000 UTC FinishedAt: 2026-09-12 10:26:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 10:10:04 +0000 UTC FinishedAt: 2026-09-12 10:26:27 +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:*4d5eadf1-1c39-4cd8-928e-d58eacf7a1fd,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-workflowbcjlw/series-workflowbcjlw-convert-artifact-1590566541/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": "cac11a3f-8381-491c-a447-a0328e343d09", "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-workflowbcjlw/series-workflowbcjlw-build-action-1334147587/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 10:10:04 +0000 UTC FinishedAt: 2026-09-12 10:26:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4d5eadf1-1c39-4cd8-928e-d58eacf7a1fd,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-workflowbcjlw/series-workflowbcjlw-convert-artifact-1590566541/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": "cac11a3f-8381-491c-a447-a0328e343d09", "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-workflowbcjlw/series-workflowbcjlw-build-action-1334147587/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 10:26:27 +0000 UTC FinishedAt: 2026-09-12 10:26:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 10:26:27 +0000 UTC FinishedAt: 2026-09-12 10:26:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 10:26:27 +0000 UTC FinishedAt: 2026-09-12 10:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 10:26:27 +0000 UTC FinishedAt: 2026-09-12 10:26:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbcjlw/series-workflowbcjlw-convert-artifact-3544706024/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 10:26:37 +0000 UTC FinishedAt: 2026-09-12 10:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 10:26:37 +0000 UTC FinishedAt: 2026-09-12 10:28:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cac11a3f-8381-491c-a447-a0328e343d09,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-workflowbcjlw/series-workflowbcjlw-build-action-1334147587/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-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 10:28:31 +0000 UTC FinishedAt: 2026-09-12 10:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 10:28:31 +0000 UTC FinishedAt: 2026-09-12 10:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 10:28:31 +0000 UTC FinishedAt: 2026-09-12 10:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 10:28:31 +0000 UTC FinishedAt: 2026-09-12 10:44:55 +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:*4d5eadf1-1c39-4cd8-928e-d58eacf7a1fd,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-workflowbcjlw/series-workflowbcjlw-convert-artifact-3544706024/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": "cadb1202-3dfe-4ad1-8c0c-25fa9a6b419f", "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-workflowbcjlw/series-workflowbcjlw-build-action-4214530964/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 10:28:31 +0000 UTC FinishedAt: 2026-09-12 10:44:45 +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:*4d5eadf1-1c39-4cd8-928e-d58eacf7a1fd,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-workflowbcjlw/series-workflowbcjlw-convert-artifact-3544706024/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": "cadb1202-3dfe-4ad1-8c0c-25fa9a6b419f", "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-workflowbcjlw/series-workflowbcjlw-build-action-4214530964/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 10:44:55 +0000 UTC FinishedAt: 2026-09-12 10:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 10:44:55 +0000 UTC FinishedAt: 2026-09-12 10:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 10:44:55 +0000 UTC FinishedAt: 2026-09-12 10:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 10:44:55 +0000 UTC FinishedAt: 2026-09-12 10:46:40 +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:*cadb1202-3dfe-4ad1-8c0c-25fa9a6b419f,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-workflowbcjlw/series-workflowbcjlw-build-action-4214530964/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-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 12:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 12:01:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cac11a3f-8381-491c-a447-a0328e343d09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cadb1202-3dfe-4ad1-8c0c-25fa9a6b419f,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-workflowbcjlw/series-workflowbcjlw-build-action-1334147587/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-workflowbcjlw/series-workflowbcjlw-build-action-4214530964/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 10:47:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 10:46:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbcjlw/series-workflowbcjlw-convert-artifact-2108977185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 10:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 10:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 10:46:50 +0000 UTC FinishedAt: 2026-09-12 10:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 10:47:00 +0000 UTC FinishedAt: 2026-09-12 12:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbcjlw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["__vhost_scsi_complete_events","vhost_scsi_complete_events","vhost_scsi_send_evt","vhost_scsi_evt_handle_kick","vhost_scsi_do_plug"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb26524ef4ac28fcfa554c0656e8dc412c38a8ff","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"8450f72f-8d44-4836-bd3d-5172fe78f991","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 10:47:00 +0000 UTC FinishedAt: 2026-09-12 12:01:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cac11a3f-8381-491c-a447-a0328e343d09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cadb1202-3dfe-4ad1-8c0c-25fa9a6b419f,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-workflowbcjlw/series-workflowbcjlw-build-action-1334147587/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-workflowbcjlw/series-workflowbcjlw-build-action-4214530964/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-workflowbcjlw/series-workflowbcjlw-convert-artifact-2108977185/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,}