Name: series-workflowwcmb9 Phase: Succeeded StartedAt: 2026-08-03 14:06:07 +0000 UTC FinishedAt: 2026-08-03 18:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[0] Phase: Succeeded StartedAt: 2026-08-03 14:06:07 +0000 UTC FinishedAt: 2026-08-03 14:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 14:06:07 +0000 UTC FinishedAt: 2026-08-03 14:51:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8996fed3e53f53216f36183f6b6539846bc15a67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "USER_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8996fed3e53f53216f36183f6b6539846bc15a67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "USER_NS" ], "series_id": "75b41f5f-4701-4c21-8d3e-498ebcabe79f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bm_register_write", "bm_entry_write", "bm_evict_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9ldmljdF9pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBsaW1pdCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBpbiBgYmluZm10X21pc2NgIHVzaW5nIGB1Y291bnRzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBhbmQgYGJpbmZtdF9taXNjYCBmaWxlc3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAoaW4gYSB1c2VyIG5hbWVzcGFjZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgb2YgYGJpbmZtdF9taXNjYCBlbnRyaWVzIHRvIHRlc3QgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIG9mIHRoZSBidWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYmU4NTNlM2M5M2M4YzE5ZGUyYWUyMzc1ZmE3NjdlYjViZDM1NjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNDo0Njo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCA2MjJiNWQ4Yzg5OTU3Li5kMjZiNjNhMjdjMjU5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTI4LDYgJiM0MzsxMjgsMTEgQEAgVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zOlxuICAgIG5hbWVkIGJ5IGFuIGFic29sdXRlIHBhdGguIEl0IGlzIG9wZW5lZCB3aGVuIHRoZSBiaW5hcnkgaXMgZXhlY3V0ZWQsIHNvXG4gICAgYSByZWxhdGl2ZSBvbmUgd291bGQgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2ZcbiAgICB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeVxuJiM0MzsgLSB0aGUgYW1vdW50IG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGJ5IGBgRmBgLCBvciBib3VuZCB0byBhIGBgQmBgIGVudHJ5XG4mIzQzOyAgIGlzIGxpbWl0ZWQgYnkgdGhlIGBgL3Byb2Mvc3lzL3VzZXIvbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2BgIHN5c2N0bC4gQVxuJiM0MzsgICByZWdpc3RyYXRpb24gcGFzdCB0aGUgbGltaXQgaXMgcmVmdXNlZCB3aXRoIGBgLUVOT1NQQ2BgLiBUaGlzIGxpbWl0cyBhblxuJiM0MzsgICB1bnByaXZpbGVnZWQgbmFtZXNwYWNlIHBpbm5pbmcgZmlsZXMuIEEgbmVzdGVkIG5hbWVzcGFjZSBjYW4gcmFpc2Ugb25seSBpdHNcbiYjNDM7ICAgb3duIGxpbWl0IGFuZCBldmVyeSBhbmNlc3RvciBpcyBjaGFyZ2VkIHRvb1xuIFxuIFxuIFRvIHVzZSBiaW5mbXRfbWlzYyB5b3UgaGF2ZSB0byBtb3VudCBpdCBmaXJzdC4gWW91IGNhbiBtb3VudCBpdCB3aXRoXG5AQCAtMjE1LDEwICYjNDM7MjIwLDkgQEAgd2l0aCB0aGUgY3JlZGVudGlhbHMgdGhlIGVudHJ5IGZpbGUgd2FzIG9wZW5lZCB3aXRoLCBleGFjdGx5IHRoZSB3YXkgYGBGYGBcbiBwcmUtb3BlbnMgYSBzdGF0aWMgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbiBwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaXQgY2Fubm90XG4gZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XG4tYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbi1gYC1FTk9TUENgYC4gVG8gYmluZCBhIGZpbGUgdGhhdCBoYXMgbm8gcGF0aCBvZiBpdHMgb3duIC0gYWxyZWFkeVxuLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxuLW9wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4mIzQzO2JpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVycywgYW5kIGVhY2ggb25lIGlzIGNoYXJnZWQgYWdhaW5zdFxuJiM0MztgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBsaWtlIGFueSBvdGhlciBiaW5kaW5nLiBBIHdyaXRlIHBhc3QgZWl0aGVyXG4mIzQzO2xpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC5cbiBcbiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcbiBgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpYGAga2Z1bmMsIGFuZCBldmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiB0aGVcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDRcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjLmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVycCwgdG1wLCBcdTAwMjZlLVx1MDAzZWludGVycHMsIGxpc3QpIHtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2aW50ZXJwLVx1MDAzZWxpc3QpO1xuIFx0XHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXHUwMDNlZmlsZSk7XG4mIzQzO1x0XHRkZWNfdWNvdW50KGludGVycC1cdTAwM2V1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcbiBcdFx0a2ZyZWUoaW50ZXJwKTtcbiBcdH1cbiB9XG5AQCAtMzA3LDcgJiM0MzszMDgsOCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbiAgKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHZhbGlkYXRlZCBAbmFtZSBhbmQgQHBhdGgsIGVzdGFibGlzaGVkIHRoYXQgQGVcbiAgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuXG4gICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZSBlbnRyeSBpcyBmdWxsIG9yIHRoZSBiaW5kZXIgaXMgb3V0IG9mXG4mIzQzOyAqICAgICAgICAgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyBidWRnZXQsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxuQEAgLTMxNSwyMiAmIzQzOzMxNywzMiBAQCBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0c2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4mIzQzO1x0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XG4gXG4gXHRpZiAoYmluZm10X21pc2NfZmluZF9pbnRlcnAoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzLCBuYW1lKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAobGlzdF9jb3VudF9ub2RlcyhcdTAwMjZlLVx1MDAzZWludGVycHMpIFx1MDAzZT0gQklORk1UX01JU0NfSU5URVJQX01BWClcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXG4mIzQzO1x0LyogVGhlIGJpbmRpbmcga2VlcHMgYSBmaWxlIG9wZW4sIHNvIGNoYXJnZSBpdCB0byB3aG9ldmVyIGJpbmRzIGl0LiAqL1xuJiM0MztcdHVjb3VudHMgPSBpbmNfdWNvdW50KGN1cnJlbnRfdXNlcl9ucygpLCBjdXJyZW50X2V1aWQoKSxcbiYjNDM7XHRcdFx0ICAgICBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcbiYjNDM7XHRpZiAoIXVjb3VudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4gXHQvKiBPbmUgYWxsb2NhdGlvbiwgYm90aCBzdHJpbmdzIGluIGl0LCBsaWtlIHRoZSBlbnRyeSYjMzk7cyBvd24gYnVmZmVyLiAqL1xuIFx0aW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gJiM0MzsgcGxlbiAmIzQzOyAyKSxcbiBcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi1cdGlmICghaW50ZXJwKVxuJiM0MztcdGlmICghaW50ZXJwKSB7XG4mIzQzO1x0XHRkZWNfdWNvdW50KHVjb3VudHMsIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4gXG4gXHRpbnRlcnAtXHUwMDNlcGF0aCA9IGludGVycC1cdTAwM2VuYW1lICYjNDM7IG5sZW4gJiM0MzsgMTtcbiBcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUsIG5hbWUsIG5sZW4gJiM0MzsgMSk7XG4gXHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lICYjNDM7IG5sZW4gJiM0MzsgMSwgcGF0aCwgcGxlbiAmIzQzOyAxKTtcbiBcdGludGVycC1cdTAwM2VmaWxlID0gZjtcbiYjNDM7XHRpbnRlcnAtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gXHQvKiBQdWJsaXNoIHRoZSBub2RlOiBhIGxvY2tsZXNzIGNhdCBtYXkgYmUgd2Fsa2luZyB0aGUgbGlzdC4gKi9cbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmludGVycC1cdTAwM2VsaXN0LCBcdTAwMjZlLVx1MDAzZWludGVycHMpO1xuIFx0cHJfZGVidWcoXCYjMzQ7cmVnaXN0ZXI6IGludGVycHJldGVyOiAlcyB7JXN9XFxuXCYjMzQ7LCBuYW1lLCBwYXRoKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbmluZGV4IDA3MmU0YjNkZDc4ZDIuLjgwNDViMTBkZDNlNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxuQEAgLTcsNiAmIzQzOzcsNyBAQFxuIHN0cnVjdCBicGZfcHJvZztcbiBzdHJ1Y3QgZmlsZTtcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xuJiM0MztzdHJ1Y3QgdWNvdW50cztcbiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4gXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcbkBAIC0yMSw2ICYjNDM7MjIsNyBAQCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4gICogc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAtIGFuIGludGVycHJldGVyIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbiAgKiBAbGlzdDogbGluayBpbiB0aGUgZW50cnkmIzM5O3MgbGlzdCwgaW4gcmVnaXN0cmF0aW9uIG9yZGVyXG4gICogQGZpbGU6IHRoZSBmaWxlLCBvcGVuZWQgYXQgcmVnaXN0cmF0aW9uIGFuZCBuZXZlciByZXNvbHZlZCBhZ2FpblxuJiM0MzsgKiBAdWNvdW50czogdGhlIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgY2hhcmdlIHRoZSBiaW5kaW5nIHRvb2tcbiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyXG4gICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXG4gICogQG5hbWU6IHRoZSBuYW1lIHRoZSBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdCBieTsgZW1wdHkgZm9yIHRoZSBmaXhlZFxuQEAgLTMzLDYgJiM0MzszNSw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZTtcbiYjNDM7XHRzdHJ1Y3QgdWNvdW50c1x0XHQqdWNvdW50cztcbiBcdGNvbnN0IGNoYXJcdFx0KnBhdGg7XG4gXHRjaGFyXHRcdFx0bmFtZVtdO1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG5pbmRleCA5YzNiZTE1NzM5N2UwLi5lMzhkOWU2MDU2OWYwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcbkBAIC01Nyw2ICYjNDM7NTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHtcbiAjaWZkZWYgQ09ORklHX0ZBTk9USUZZXG4gXHRVQ09VTlRfRkFOT1RJRllfR1JPVVBTLFxuIFx0VUNPVU5UX0ZBTk9USUZZX01BUktTLFxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDKVxuJiM0MztcdFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsXG4gI2VuZGlmXG4gXHRVQ09VTlRfQ09VTlRTLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL3Vjb3VudC5jIGIva2VybmVsL3Vjb3VudC5jXG5pbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NFxuLS0tIGEva2VybmVsL3Vjb3VudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdWNvdW50LmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtODksNiAmIzQzOzkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdXNlcl90YWJsZVtdID0ge1xuIFx0VUNPVU5UX0VOVFJZKFwmIzM0O21heF9mYW5vdGlmeV9ncm91cHNcJiMzNDspLFxuIFx0VUNPVU5UX0VOVFJZKFwmIzM0O21heF9mYW5vdGlmeV9tYXJrc1wmIzM0OyksXG4gI2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQylcbiYjNDM7XHRVQ09VTlRfRU5UUlkoXCYjMzQ7bWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1wmIzM0OyksXG4mIzQzOyNlbmRpZlxuIH07XG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbkBAIC0yMzMsNiAmIzQzOzIzNyw3IEBAIHN0cnVjdCB1Y291bnRzICppbmNfdWNvdW50KHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGt1aWRfdCB1aWQsXG4gXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhpbmNfdWNvdW50LCBcJiMzNDtiaW5mbXRfbWlzY1wmIzM0Oyk7XG4gXG4gdm9pZCBkZWNfdWNvdW50KHN0cnVjdCB1Y291bnRzICp1Y291bnRzLCBlbnVtIHVjb3VudF90eXBlIHR5cGUpXG4ge1xuQEAgLTI0Myw2ICYjNDM7MjQ4LDcgQEAgdm9pZCBkZWNfdWNvdW50KHN0cnVjdCB1Y291bnRzICp1Y291bnRzLCBlbnVtIHVjb3VudF90eXBlIHR5cGUpXG4gXHR9XG4gXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZGVjX3Vjb3VudCwgXCYjMzQ7YmluZm10X21pc2NcJiMzNDspO1xuIFxuIGxvbmcgaW5jX3JsaW1pdF91Y291bnRzKHN0cnVjdCB1Y291bnRzICp1Y291bnRzLCBlbnVtIHJsaW1pdF90eXBlIHR5cGUsIGxvbmcgdilcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXG5pbmRleCBmYmJiMTYwMGRkYjk0Li5lNDJlY2Q0YzkwOGQxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjLy5naXRpZ25vcmVcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQCB4eHh4eHh4eCpcbiBwaXBlXG4gU19JKi50ZXN0XG4gYmluZm10X21pc2NfYnBmXG4mIzQzO2JpbmZtdF9taXNjX2ludGVycGxpbWl0XG4gYmluZm10X2JwZl9pbnRlcnBcbiBiaW5mbXRfYnBmX2FwcFxuIGJpbmZtdF9taXNjX3RyYW5zcGFyZW50XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbmluZGV4IDQxMGM5MzYwNmEwYzMuLmI2NDBhZjhmMDJiNTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5AQCAtMjUsNiAmIzQzOzI1LDEwIEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSBjaGVjay1leGVjXG4gIyBvciBhbiAmIzM5O0YmIzM5OyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19zZWxmcGluXG4gXG4mIzQzOyMgVGhlIGludGVycHJldGVycyBhbiAmIzM5O0YmIzM5OyBvciAmIzM5O0ImIzM5OyBlbnRyeSBwcmUtb3BlbnMgYXJlIGNoYXJnZWQgYWdhaW5zdFxuJiM0MzsjIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfaW50ZXJwbGltaXRcbiYjNDM7XG4gIyAmIzM5O0QmIzM5OyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXG4gIyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gU3RhdGljIG1hZ2ljIGVudHJ5LCBubyBicGYgdG9vbGNoYWluLlxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kaXNhYmxlZFxuQEAgLTEwNCw2ICYjNDM7MTA4LDggQEAgJChPVVRQVVQpL3NjcmlwdC1ub2V4ZWMuaW5jOiAkKENIRUNLX0VYRUNfU0FNUExFUykvc2NyaXB0LW5vZXhlYy5pbmNcbiAjIENGTEFHUyBmb3IgZXZlcnkgcHJvZ3JhbSBpbiB0aGlzIGRpcmVjdG9yeS5cbiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogQ0ZMQUdTICYjNDM7PSAkKFRPT0xTX0lOQ0xVREVTKVxuICQoT1VUUFVUKS9iaW5mbXRfbWlzY19zZWxmcGluOiAuLi9maWxlc3lzdGVtcy91dGlscy5jXG4mIzQzOyQoT1VUUFVUKS9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdDogQ0ZMQUdTICYjNDM7PSAkKFRPT0xTX0lOQ0xVREVTKVxuJiM0MzskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmNcbiBcbiAjIC0tLSBiaW5mbXRfbWlzYyBicGYgKCYjMzk7QiYjMzk7KSBoYW5kbGVyIHRlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIyBUaGUgc3RydWN0X29wcyBicGYgb2JqZWN0cyBhcmUgY29tcGlsZWQgYWdhaW5zdCB0aGUgcnVubmluZyBrZXJuZWwmIzM5O3MgQlRGLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXG5pbmRleCAyYzdiNjMwNzVmMWQ5Li5iMmE0NTE4OTAxYjBmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuQEAgLTM4LDYgJiM0MzszOCw3IEBAXG4gI2RlZmluZSBfR05VX1NPVVJDRVxuICNpbmNsdWRlIFx1MDAzY2VsZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG5AQCAtNjUsNiAmIzQzOzY2LDkgQEBcbiAjZGVmaW5lIEJJTkRfUklTQ1ZfUEFUSFx0XCYjMzQ7L3RtcC9iaW5mbXRfYmluZF9yaXNjdlwmIzM0O1xuICNkZWZpbmUgQklORF9FWFBFQ1RcdFwmIzM0O0JJTkRfUkFOIFwmIzM0O1xuICNkZWZpbmUgQklORF9NQVhcdDEwMFxuJiM0MzsjZGVmaW5lIElOVEVSUF9MSU1JVFx0XCYjMzQ7L3Byb2Mvc3lzL3VzZXIvbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1wmIzM0O1xuJiM0MzsvKiBFeGl0IHN0YXR1cyBvZiB0aGUgYmluZGluZyBjaGlsZCB3aGVuIGl0IGNhbm5vdCBzZXQgdXAgYSBidWRnZXQgb2YgaXRzIG93bi4gKi9cbiYjNDM7I2RlZmluZSBCSU5EX05PX0JVREdFVFx0MjAwXG4gXG4gLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqL1xuIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpXG5AQCAtMzc4LDYgJiM0MzszODIsNTcgQEAgc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxuIFx0cmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7XG4gfVxuIFxuJiM0MzsvKiBTZXQgdGhlIGludGVycHJldGVyIGJ1ZGdldCBvZiB0aGlzIG5hbWVzcGFjZS4gKi9cbiYjNDM7c3RhdGljIGludCB3cml0ZV9pbnRlcnBfbGltaXQoY29uc3QgY2hhciAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKElOVEVSUF9MSU1JVCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRuID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gbiBcdTAwM2MgMCA/IC0xIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGVycm5vIGEgYmluZCBpcyByZWZ1c2VkIHdpdGggd2hlbiB0aGUgd3JpdGVyIGlzIGEgY2hpbGQgdGhhdCBoYXMgc3BlbnRcbiYjNDM7ICogdGhlIGJ1ZGdldCBvZiBhIHVzZXIgbmFtZXNwYWNlIG9mIGl0cyBvd24sIDAgaWYgaXQgc3VjY2VlZGVkIGFuZCAtMSBpZiB0aGVcbiYjNDM7ICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGVcbiYjNDM7ICogaW50ZXJwcmV0ZXIgaXMgc3RpbGwgb3BlbmVkIHdpdGggdGhpcyBwcm9jZXNzJiMzOTtzIGNyZWRlbnRpYWxzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBiaW5kX291dF9vZl9idWRnZXQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNtZFtQQVRIX01BWF0sIGZpbGVbUEFUSF9NQVhdO1xuJiM0MztcdGludCBmZCwgc3RhdHVzLCByZXR2YWw7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksIEJJTkZNVF9ESVIgXCYjMzQ7LyVzXCYjMzQ7LCBlbnRyeSk7XG4mIzQzO1x0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXCYjMzQ7JiM0MzslcyAlc1xcblwmIzM0OywgbmFtZSwgcGF0aCk7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihmaWxlLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRzc2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdFx0LyogQSBuYW1lc3BhY2Ugb2YgaXRzIG93biwgd2l0aCBub3RoaW5nIGxlZnQgaW4gaXQgdG8gc3BlbmQuICovXG4mIzQzO1x0XHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSB8fCB3cml0ZV9pbnRlcnBfbGltaXQoXCYjMzQ7MFwmIzM0OykpXG4mIzQzO1x0XHRcdF9leGl0KEJJTkRfTk9fQlVER0VUKTtcbiYjNDM7XHRcdG4gPSB3cml0ZShmZCwgY21kLCBzdHJsZW4oY21kKSk7XG4mIzQzO1x0XHRfZXhpdChuIFx1MDAzYyAwID8gZXJybm8gOiAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGlmIChwaWQgXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR2YWwgPSBXRVhJVFNUQVRVUyhzdGF0dXMpO1xuJiM0MztcdHJldHVybiByZXR2YWwgPT0gQklORF9OT19CVURHRVQgPyAtMSA6IHJldHZhbDtcbiYjNDM7fVxuJiM0MztcbiBGSVhUVVJFKGJvdW5kX2ludGVycCkge1xuIFx0Y2hhciBvYmpbUEFUSF9NQVhdO1xuIFx0c3RydWN0IGJwZl9jYXNlIGM7XG5AQCAtNTY1LDQgJiM0Mzs2MjAsMTkgQEAgVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxuIFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7b3ZlclwmIzM0OywgQklORF9GSVJTVCksIC1FTk9TUEMpO1xuIH1cbiBcbiYjNDM7LyogQSBiaW5kaW5nIHBpbnMgYSBmaWxlOiBpdCBpcyBjaGFyZ2VkLCBhbmQgcmVmdXNlZCBvbmNlIHRoZSBidWRnZXQgaXMgb3V0LiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBiaW5kaW5nc19hcmVfY2hhcmdlZClcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSBiaW5kX291dF9vZl9idWRnZXQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7dGhpcmRcJiMzNDssIEJJTkRfRklSU1QpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIHVzZXIgbmFtZXNwYWNlcyBvciBubyBcJiMzNDsgSU5URVJQX0xJTUlUKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoYXJnZSBmb2xsb3dzIHRoZSB3cml0ZXIsIG5vdCB0aGUgZW50cnkgZmlsZSBpdCB3cml0ZXMgdG8uICovXG4mIzQzO1x0RVhQRUNUX0VRKGVyciwgRU5PU1BDKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGJ1ZGdldCB3YXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHdheS4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEoZW50cnlfYmluZChcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LCBcJiMzNDt0aGlyZFwmIzM0OywgQklORF9GSVJTVCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmY2MTFjNTUxNzg0MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jXG5AQCAtMCwwICYjNDM7MSwyMzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogQSBwcmUtb3BlbmVkIGludGVycHJldGVyIC0gd2hhdCAmIzM5O0YmIzM5OyBnaXZlcyBhIHN0YXRpYyBlbnRyeSBhbmQgd2hhdCBhICYjMzk7QiYjMzk7XG4mIzQzOyAqIGVudHJ5IGJpbmRzIC0ga2VlcHMgYSBmaWxlIG9wZW4gZm9yIGFzIGxvbmcgYXMgdGhlIGVudHJ5IGxpdmVzLCBzbyBpdCBwaW5zXG4mIzQzOyAqIHRoZSBtb3VudCBpdCBjYW1lIGZyb20uIEl0IGNvc3RzIG5vIGZpbGUgZGVzY3JpcHRvciwgYW5kIGJpbmZtdF9taXNjIGlzXG4mIzQzOyAqIEZTX1VTRVJOU19NT1VOVCwgc28gYW4gdW5wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlIGNhbiBjcmVhdGUgdGhlbSB3aXRob3V0XG4mIzQzOyAqIGJvdW5kLiBDaGVjayB0aGF0IFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYm91bmRzIGl0LCB0aGF0IGFuIGVudHJ5XG4mIzQzOyAqIHRoYXQgcHJlLW9wZW5zIG5vdGhpbmcgaXMgbm90IGNoYXJnZWQsIHRoYXQgcmVtb3ZpbmcgYW4gZW50cnkgZ2l2ZXMgdGhlXG4mIzQzOyAqIGNoYXJnZSBiYWNrLCBhbmQgdGhhdCBuZXN0aW5nIGEgdXNlciBuYW1lc3BhY2UgZG9lcyBub3QgZXZhZGUgaXQuXG4mIzQzOyAqXG4mIzQzOyAqIFJ1bnMgdW5wcml2aWxlZ2VkIGluIGEgdXNlciBuYW1lc3BhY2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNTlRcdFx0XCYjMzQ7L3RtcC9iaW5mbXRfaW50ZXJwbGltaXRcJiMzNDtcbiYjNDM7I2RlZmluZSBORVNURURfTU5UXHRcJiMzNDsvdG1wL2JpbmZtdF9pbnRlcnBsaW1pdF9uZXN0ZWRcJiMzNDtcbiYjNDM7I2RlZmluZSBMSU1JVF9TWVNDVExcdFwmIzM0Oy9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFHSUNcdFx0XCYjMzQ7XFxcXHhkZVxcXFx4YWRcJiMzNDtcbiYjNDM7LyogTm90IG9uIHRoZSBpbnN0YW5jZSwgYW5kIHVubGlrZSAvYmluL3RydWUgaXQgYWx3YXlzIGV4aXN0cy4gKi9cbiYjNDM7I2RlZmluZSBJTlRFUlBcdFx0XCYjMzQ7L3Byb2Mvc2VsZi9leGVcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFNtYWxsIGVub3VnaCB0byBmaWxsIGJ5IGhhbmQsIGJpZyBlbm91Z2ggdGhhdCBhIHJlZnVuZCBpcyB2aXNpYmxlLiAqL1xuJiM0MzsjZGVmaW5lIExJTUlUXHRcdDRcbiYjNDM7XG4mIzQzOy8qIFdoYXQgVUNPVU5UX0VOVFJZKCkgbGV0cyBhIG5hbWVzcGFjZSByYWlzZSBpdHMgb3duIGxpbWl0IHRvLiAqL1xuJiM0MzsjZGVmaW5lIExJTUlUX01BWFx0XCYjMzQ7MjE0NzQ4MzY0N1wmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRpZiAobWtkaXIocGF0aCwgMDc1NSkgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVFWElTVClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV3JpdGUgQHZhbCB0byBAcGF0aCwgcHJlc2VydmluZyB3cml0ZSgyKSYjMzk7cyBlcnJubyBmb3IgdGhlIGNhbGxlci4gKi9cbiYjNDM7c3RhdGljIGludCB3cml0ZV9rZWVwX2Vycm5vKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgc2F2ZWQ7XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRuID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpO1xuJiM0MztcdHNhdmVkID0gZXJybm87XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGVycm5vID0gc2F2ZWQ7XG4mIzQzO1x0cmV0dXJuIG4gXHUwMDNjIDAgPyAtMSA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2V0X2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKExJTUlUX1NZU0NUTCwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9hdChjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKnJ1bGUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzL3JlZ2lzdGVyXCYjMzQ7LCBtbnQpO1xuJiM0MztcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbiAmIzM5O0YmIzM5OyBlbnRyeTogb25lIGludGVycHJldGVyIHByZS1vcGVuZWQgYXQgcmVnaXN0cmF0aW9uLCBvbmUgY2hhcmdlLiAqL1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX2ZpeGVkKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgcnVsZVtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCYjMzQ7OiVzOk06OlwmIzM0OyBNQUdJQyBcJiMzNDs6OlwmIzM0OyBJTlRFUlAgXCYjMzQ7OkZcJiMzNDssIG5hbWUpO1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc2FtZSBlbnRyeSB3aXRob3V0ICYjMzk7RiYjMzk7OiB0aGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHBlciBleGVjIGluc3RlYWQuICovXG4mIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGxhaW4oY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBydWxlW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcJiMzNDs6JXM6TTo6XCYjMzQ7IE1BR0lDIFwmIzM0Ozo6XCYjMzQ7IElOVEVSUCBcJiMzNDs6XCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZW1vdmVfZW50cnkoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy8lc1wmIzM0OywgbW50LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhwYXRoLCBcJiMzNDstMVxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGVudHJ5X2V4aXN0cyhjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzLyVzXCYjMzQ7LCBtbnQsIG5hbWUpO1xuJiM0MztcdHJldHVybiBhY2Nlc3MocGF0aCwgRl9PSykgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVnaXN0ZXIgQG4gJiMzOTtGJiMzOTsgZW50cmllcywgZWFjaCB3aXRoIGEgbmFtZSBvZiBpdHMgb3duLiAqL1xuJiM0MztzdGF0aWMgaW50IGZpbGxfYnVkZ2V0KGNvbnN0IGNoYXIgKm1udCwgdW5zaWduZWQgaW50IG4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5hbWVbMzJdO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDtmaXhlZCV1XCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGlmIChyZWdpc3Rlcl9maXhlZChtbnQsIG5hbWUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKGludGVycF9saW1pdCkge1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChpbnRlcnBfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHQvKiBzZXR1cF91c2VybnMoKSBleGl0cyByYXRoZXIgdGhhbiByZXR1cm5zIGlmIHRoaXMgaXMgbm90IHRoZXJlLiAqL1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L3Byb2Mvc2VsZi9ucy91c2VyXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgd2l0aG91dCB1c2VyIG5hbWVzcGFjZXNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIENBUF9TWVNfUkVTT1VSQ0UgaW4gdGhpcyBuYW1lc3BhY2UgaXMgd2hhdCBtYWtlcyBpdCB3cml0YWJsZS4gKi9cbiYjNDM7XHRpZiAoc2V0X2xpbWl0KExJTUlUX01BWCkpIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgd2l0aG91dCBcJiMzNDsgTElNSVRfU1lTQ1RMKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtjYW5ub3Qgc2V0IHRoZSBsaW1pdDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZW5zdXJlX2RpcihNTlQpLCAwKTtcbiYjNDM7XHRpZiAobW91bnQoXCYjMzQ7YmluZm10X21pc2NcJiMzNDssIE1OVCwgXCYjMzQ7YmluZm10X21pc2NcJiMzNDssIDAsIE5VTEwpKSB7XG4mIzQzO1x0XHRpbnQgc2F2ZWQgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHQvKiBUZWFyZG93biBkb2VzbiYjMzk7dCBydW4gd2hlbiBzZXR1cCBza2lwcywgc28gY2xlYW4gdXAgaGVyZS4gKi9cbiYjNDM7XHRcdHJtZGlyKE1OVCk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gYmluZm10X21pc2M6ICVzXCYjMzQ7LCBzdHJlcnJvcihzYXZlZCkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihpbnRlcnBfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgbmFtZXNwYWNlcyBnbyB3aXRoIHRoZSBwcm9jZXNzOyBqdXN0IGRvbiYjMzk7dCBsaXR0ZXIgL3RtcC4gKi9cbiYjNDM7XHR1bW91bnQyKE5FU1RFRF9NTlQsIE1OVF9ERVRBQ0gpO1xuJiM0MztcdHVtb3VudDIoTU5ULCBNTlRfREVUQUNIKTtcbiYjNDM7XHRybWRpcihORVNURURfTU5UKTtcbiYjNDM7XHRybWRpcihNTlQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBFdmVyeSBwcmUtb3BlbmVkIGludGVycHJldGVyIGlzIGNoYXJnZWQsIGFuZCB0aGUgYnVkZ2V0IGlzIGEgaGFyZCBzdG9wLiAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBmaXhlZF9pbnRlcnByZXRlcnNfYXJlX2NoYXJnZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlszMl07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyV1XCYjMzQ7LCBMSU1JVCk7XG4mIzQzO1x0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX05FKHJlZ2lzdGVyX2ZpeGVkKE1OVCwgXCYjMzQ7b3ZlclwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PU1BDKTtcbiYjNDM7XG4mIzQzO1x0LyogQSByZWZ1c2VkIHJlZ2lzdHJhdGlvbiBsZWF2ZXMgbm90aGluZyBiZWhpbmQuICovXG4mIzQzO1x0RVhQRUNUX0ZBTFNFKGVudHJ5X2V4aXN0cyhNTlQsIFwmIzM0O292ZXJcJiMzNDspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gZW50cnkgdGhhdCBwcmUtb3BlbnMgbm90aGluZyBwaW5zIG5vdGhpbmcsIHNvIGl0IGlzIG5vdCBjaGFyZ2VkLiAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBwbGFpbl9lbnRyaWVzX2FyZV9ub3RfY2hhcmdlZClcbiYjNDM7e1xuJiM0MztcdEFTU0VSVF9FUShzZXRfbGltaXQoXCYjMzQ7MFwmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEocmVnaXN0ZXJfcGxhaW4oTU5ULCBcJiMzNDtwbGFpblwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X2V4aXN0cyhNTlQsIFwmIzM0O3BsYWluXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdC8qIC4uLiB3aGlsZSB0aGUgc2FtZSBlbnRyeSB3aXRoICYjMzk7RiYjMzk7IGhhcyBub3RoaW5nIHRvIHNwZW5kLiAqL1xuJiM0MztcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwmIzM0O2ZpeGVkXCYjMzQ7KSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCByZW1vdmFsX3JlZnVuZHNfdGhlX2NoYXJnZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzMyXTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7JXVcJiMzNDssIExJTUlUKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZmlsbF9idWRnZXQoTU5ULCBMSU1JVCksIDApO1xuJiM0MztcdEFTU0VSVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwmIzM0O292ZXJcJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHJlbW92ZV9lbnRyeShNTlQsIFwmIzM0O2ZpeGVkMFwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShyZWdpc3Rlcl9maXhlZChNTlQsIFwmIzM0O292ZXJcJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGNoYXJnZSB3YWxrcyB0aGUgYW5jZXN0b3JzLCBzbyBhIG5hbWVzcGFjZSBjYW5ub3QgYnV5IGl0c2VsZiBidWRnZXQgYnlcbiYjNDM7ICogbmVzdGluZzogaXQgbWF5IHJhaXNlIG9ubHkgaXRzIG93biBsaW1pdCwgYW5kIHRoZSBwYXJlbnQgaXQgd2FzIGNyZWF0ZWRcbiYjNDM7ICogZnJvbSBpcyBjaGFyZ2VkIGZvciBldmVyeSBiaW5kaW5nIG1hZGUgYmVsb3cgaXQuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBuZXN0aW5nX2RvZXNfbm90X2V2YWRlX2l0KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldVwmIzM0OywgTElNSVQpO1xuJiM0MztcdEFTU0VSVF9FUShzZXRfbGltaXQoYnVmKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNldHVwX3VzZXJucygpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2V0X2xpbWl0KExJTUlUX01BWCksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZW5zdXJlX2RpcihORVNURURfTU5UKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1vdW50KFwmIzM0O2JpbmZtdF9taXNjXCYjMzQ7LCBORVNURURfTU5ULCBcJiMzNDtiaW5mbXRfbWlzY1wmIzM0OywgMCwgTlVMTCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBBIGZyZXNoIGluc3RhbmNlIHdpdGggYW4gdW5saW1pdGVkIGJ1ZGdldCBvZiBpdHMgb3duLCBhbmQgeWV0OiAqL1xuJiM0MztcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChORVNURURfTU5ULCBcJiMzNDtuZXN0ZWRcJiMzNDspLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1NQQyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBuZXN0ZWQgaW5zdGFuY2Ugd29ya3MgZm9yIGFueXRoaW5nIHRoYXQgcGlucyBubyBmaWxlLiAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWdpc3Rlcl9wbGFpbihORVNURURfTU5ULCBcJiMzNDtuZXN0ZWRfcGxhaW5cJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX2V2aWN0X2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIGxpbWl0IGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGluIGBiaW5mbXRfbWlzY2AgdXNpbmcgYHVjb3VudHNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGFuZCBgYmluZm10X21pc2NgIGZpbGVzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgdW5wcml2aWxlZ2VkIHVzZXJzIChpbiBhIHVzZXIgbmFtZXNwYWNlKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBvZiBgYmluZm10X21pc2NgIGVudHJpZXMgdG8gdGVzdCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb2YgdGhlIGJ1ZGdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFiZTg1M2UzYzkzYzhjMTlkZTJhZTIzNzVmYTc2N2ViNWJkMzU2NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE0OjQ2OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAppbmRleCA2MjJiNWQ4Yzg5OTU3Li5kMjZiNjNhMjdjMjU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdApAQCAtMTI4LDYgJiM0MzsxMjgsMTEgQEAgVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zOgogICAgbmFtZWQgYnkgYW4gYWJzb2x1dGUgcGF0aC4gSXQgaXMgb3BlbmVkIHdoZW4gdGhlIGJpbmFyeSBpcyBleGVjdXRlZCwgc28KICAgIGEgcmVsYXRpdmUgb25lIHdvdWxkIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mCiAgICB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeQomIzQzOyAtIHRoZSBhbW91bnQgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgYnkgYGBGYGAsIG9yIGJvdW5kIHRvIGEgYGBCYGAgZW50cnkKJiM0MzsgICBpcyBsaW1pdGVkIGJ5IHRoZSBgYC9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBzeXNjdGwuIEEKJiM0MzsgICByZWdpc3RyYXRpb24gcGFzdCB0aGUgbGltaXQgaXMgcmVmdXNlZCB3aXRoIGBgLUVOT1NQQ2BgLiBUaGlzIGxpbWl0cyBhbgomIzQzOyAgIHVucHJpdmlsZWdlZCBuYW1lc3BhY2UgcGlubmluZyBmaWxlcy4gQSBuZXN0ZWQgbmFtZXNwYWNlIGNhbiByYWlzZSBvbmx5IGl0cwomIzQzOyAgIG93biBsaW1pdCBhbmQgZXZlcnkgYW5jZXN0b3IgaXMgY2hhcmdlZCB0b28KIAogCiBUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aApAQCAtMjE1LDEwICYjNDM7MjIwLDkgQEAgd2l0aCB0aGUgY3JlZGVudGlhbHMgdGhlIGVudHJ5IGZpbGUgd2FzIG9wZW5lZCB3aXRoLCBleGFjdGx5IHRoZSB3YXkgYGBGYGAKIHByZS1vcGVucyBhIHN0YXRpYyBlbnRyeSYjMzk7cyBpbnRlcnByZXRlcjsgdGhlIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUuIFRoZQogcGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGl0IGNhbm5vdAogZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5Ci1iaW5kcyBhdCBtb3N0IDEwMCBpbnRlcnByZXRlcnM7IGEgd3JpdGUgcGFzdCB0aGF0IGlzIHJlZnVzZWQgd2l0aAotYGAtRU5PU1BDYGAuIFRvIGJpbmQgYSBmaWxlIHRoYXQgaGFzIG5vIHBhdGggb2YgaXRzIG93biAtIGFscmVhZHkKLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLQotb3BlbiBpdCBhbmQgd3JpdGUgYGAvcHJvYy9zZWxmL2ZkL05gYC4KJiM0MztiaW5kcyBhdCBtb3N0IDEwMCBpbnRlcnByZXRlcnMsIGFuZCBlYWNoIG9uZSBpcyBjaGFyZ2VkIGFnYWluc3QKJiM0MztgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBsaWtlIGFueSBvdGhlciBiaW5kaW5nLiBBIHdyaXRlIHBhc3QgZWl0aGVyCiYjNDM7bGltaXQgaXMgcmVmdXNlZCB3aXRoIGBgLUVOT1NQQ2BgLgogCiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGUKIGBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmMKaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X21pc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jCkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRlcnAsIHRtcCwgJmFtcDtlLSZndDtpbnRlcnBzLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZhbXA7aW50ZXJwLSZndDtsaXN0KTsKIAkJY2xvc2VfaW50ZXJwX2ZpbGUoaW50ZXJwLSZndDtmaWxlKTsKJiM0MzsJCWRlY191Y291bnQoaW50ZXJwLSZndDt1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTsKIAkJa2ZyZWUoaW50ZXJwKTsKIAl9CiB9CkBAIC0zMDcsNyAmIzQzOzMwOCw4IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKQogICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlCiAgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuCiAgKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZSBlbnRyeSBpcyBmdWxsIG9yIHRoZSBiaW5kZXIgaXMgb3V0IG9mCiYjNDM7ICogICAgICAgICBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTIGJ1ZGdldCwgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwKIAkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKQEAgLTMxNSwyMiAmIzQzOzMxNywzMiBAQCBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsCiB7CiAJc2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7CiAJc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwOwomIzQzOwlzdHJ1Y3QgdWNvdW50cyAqdWNvdW50czsKIAogCWlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycCgmYW1wO2UtJmd0O2ludGVycHMsIG5hbWUpKQogCQlyZXR1cm4gLUVFWElTVDsKIAlpZiAobGlzdF9jb3VudF9ub2RlcygmYW1wO2UtJmd0O2ludGVycHMpICZndDs9IEJJTkZNVF9NSVNDX0lOVEVSUF9NQVgpCiAJCXJldHVybiAtRU5PU1BDOwogCiYjNDM7CS8qIFRoZSBiaW5kaW5nIGtlZXBzIGEgZmlsZSBvcGVuLCBzbyBjaGFyZ2UgaXQgdG8gd2hvZXZlciBiaW5kcyBpdC4gKi8KJiM0MzsJdWNvdW50cyA9IGluY191Y291bnQoY3VycmVudF91c2VyX25zKCksIGN1cnJlbnRfZXVpZCgpLAomIzQzOwkJCSAgICAgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyk7CiYjNDM7CWlmICghdWNvdW50cykKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwogCS8qIE9uZSBhbGxvY2F0aW9uLCBib3RoIHN0cmluZ3MgaW4gaXQsIGxpa2UgdGhlIGVudHJ5JiMzOTtzIG93biBidWZmZXIuICovCiAJaW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gJiM0MzsgcGxlbiAmIzQzOyAyKSwKIAkJCSBHRlBfS0VSTkVMX0FDQ09VTlQpOwotCWlmICghaW50ZXJwKQomIzQzOwlpZiAoIWludGVycCkgewomIzQzOwkJZGVjX3Vjb3VudCh1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTsKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCWludGVycC0mZ3Q7cGF0aCA9IGludGVycC0mZ3Q7bmFtZSAmIzQzOyBubGVuICYjNDM7IDE7CiAJc3Ryc2NweShpbnRlcnAtJmd0O25hbWUsIG5hbWUsIG5sZW4gJiM0MzsgMSk7CiAJc3Ryc2NweShpbnRlcnAtJmd0O25hbWUgJiM0MzsgbmxlbiAmIzQzOyAxLCBwYXRoLCBwbGVuICYjNDM7IDEpOwogCWludGVycC0mZ3Q7ZmlsZSA9IGY7CiYjNDM7CWludGVycC0mZ3Q7dWNvdW50cyA9IHVjb3VudHM7CiAJLyogUHVibGlzaCB0aGUgbm9kZTogYSBsb2NrbGVzcyBjYXQgbWF5IGJlIHdhbGtpbmcgdGhlIGxpc3QuICovCiAJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtpbnRlcnAtJmd0O2xpc3QsICZhbXA7ZS0mZ3Q7aW50ZXJwcyk7CiAJcHJfZGVidWcoJiMzNDtyZWdpc3RlcjogaW50ZXJwcmV0ZXI6ICVzIHslc31cbiYjMzQ7LCBuYW1lLCBwYXRoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaCBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaAppbmRleCAwNzJlNGIzZGQ3OGQyLi44MDQ1YjEwZGQzZTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oCkBAIC03LDYgJiM0Mzs3LDcgQEAKIHN0cnVjdCBicGZfcHJvZzsKIHN0cnVjdCBmaWxlOwogc3RydWN0IGxpbnV4X2JpbnBybTsKJiM0MztzdHJ1Y3QgdWNvdW50czsKIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKIAogI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTYKQEAgLTIxLDYgJiM0MzsyMiw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKICAqIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgLSBhbiBpbnRlcnByZXRlciBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoCiAgKiBAbGlzdDogbGluayBpbiB0aGUgZW50cnkmIzM5O3MgbGlzdCwgaW4gcmVnaXN0cmF0aW9uIG9yZGVyCiAgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluCiYjNDM7ICogQHVjb3VudHM6IHRoZSBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTIGNoYXJnZSB0aGUgYmluZGluZyB0b29rCiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyCiAgKiAgICAgICAgcnVucyB1bmRlcjsgc3RvcmVkIGFmdGVyIEBuYW1lIGluIHRoZSBzYW1lIGFsbG9jYXRpb24KICAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWQKQEAgLTMzLDYgJiM0MzszNSw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGU7CiYjNDM7CXN0cnVjdCB1Y291bnRzCQkqdWNvdW50czsKIAljb25zdCBjaGFyCQkqcGF0aDsKIAljaGFyCQkJbmFtZVtdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCA5YzNiZTE1NzM5N2UwLi5lMzhkOWU2MDU2OWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC01Nyw2ICYjNDM7NTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHsKICNpZmRlZiBDT05GSUdfRkFOT1RJRlkKIAlVQ09VTlRfRkFOT1RJRllfR1JPVVBTLAogCVVDT1VOVF9GQU5PVElGWV9NQVJLUywKJiM0MzsjZW5kaWYKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpCiYjNDM7CVVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsCiAjZW5kaWYKIAlVQ09VTlRfQ09VTlRTLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC91Y291bnQuYyBiL2tlcm5lbC91Y291bnQuYwppbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NAotLS0gYS9rZXJuZWwvdWNvdW50LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Vjb3VudC5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva21lbWxlYWsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyX25hbWVzcGFjZS5oJmd0OwpAQCAtODksNiAmIzQzOzkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdXNlcl90YWJsZVtdID0gewogCVVDT1VOVF9FTlRSWSgmIzM0O21heF9mYW5vdGlmeV9ncm91cHMmIzM0OyksCiAJVUNPVU5UX0VOVFJZKCYjMzQ7bWF4X2Zhbm90aWZ5X21hcmtzJiMzNDspLAogI2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDKQomIzQzOwlVQ09VTlRfRU5UUlkoJiMzNDttYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzJiMzNDspLAomIzQzOyNlbmRpZgogfTsKICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKQEAgLTIzMyw2ICYjNDM7MjM3LDcgQEAgc3RydWN0IHVjb3VudHMgKmluY191Y291bnQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywga3VpZF90IHVpZCwKIAlwdXRfdWNvdW50cyh1Y291bnRzKTsKIAlyZXR1cm4gTlVMTDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGluY191Y291bnQsICYjMzQ7YmluZm10X21pc2MmIzM0Oyk7CiAKIHZvaWQgZGVjX3Vjb3VudChzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSB1Y291bnRfdHlwZSB0eXBlKQogewpAQCAtMjQzLDYgJiM0MzsyNDgsNyBAQCB2b2lkIGRlY191Y291bnQoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gdWNvdW50X3R5cGUgdHlwZSkKIAl9CiAJcHV0X3Vjb3VudHModWNvdW50cyk7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhkZWNfdWNvdW50LCAmIzM0O2JpbmZtdF9taXNjJiMzNDspOwogCiBsb25nIGluY19ybGltaXRfdWNvdW50cyhzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSBybGltaXRfdHlwZSB0eXBlLCBsb25nIHYpCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjLy5naXRpZ25vcmUKaW5kZXggZmJiYjE2MDBkZGI5NC4uZTQyZWNkNGM5MDhkMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZQpAQCAtMjAsNiAmIzQzOzIwLDcgQEAgeHh4eHh4eHgqCiBwaXBlCiBTX0kqLnRlc3QKIGJpbmZtdF9taXNjX2JwZgomIzQzO2JpbmZtdF9taXNjX2ludGVycGxpbWl0CiBiaW5mbXRfYnBmX2ludGVycAogYmluZm10X2JwZl9hcHAKIGJpbmZtdF9taXNjX3RyYW5zcGFyZW50CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQppbmRleCA0MTBjOTM2MDZhMGMzLi5iNjQwYWY4ZjAyYjUxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKQEAgLTI1LDYgJiM0MzsyNSwxMCBAQCBURVNUX0dFTl9QUk9HUyAmIzQzOz0gY2hlY2stZXhlYwogIyBvciBhbiAmIzM5O0YmIzM5OyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLgogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3NlbGZwaW4KIAomIzQzOyMgVGhlIGludGVycHJldGVycyBhbiAmIzM5O0YmIzM5OyBvciAmIzM5O0ImIzM5OyBlbnRyeSBwcmUtb3BlbnMgYXJlIGNoYXJnZWQgYWdhaW5zdAomIzQzOyMgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUy4gVW5wcml2aWxlZ2VkLCBubyBicGYuCiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2ludGVycGxpbWl0CiYjNDM7CiAjICYjMzk7RCYjMzk7IChyZWdpc3RlciBkaXNhYmxlZCkgYmluZm10X21pc2MgdGVzdDogYW4gZW50cnkgdGhhdCBleGlzdHMgYnV0IGRvZXMKICMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi4KIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kaXNhYmxlZApAQCAtMTA0LDYgJiM0MzsxMDgsOCBAQCAkKE9VVFBVVCkvc2NyaXB0LW5vZXhlYy5pbmM6ICQoQ0hFQ0tfRVhFQ19TQU1QTEVTKS9zY3JpcHQtbm9leGVjLmluYwogIyBDRkxBR1MgZm9yIGV2ZXJ5IHByb2dyYW0gaW4gdGhpcyBkaXJlY3RvcnkuCiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogQ0ZMQUdTICYjNDM7PSAkKFRPT0xTX0lOQ0xVREVTKQogJChPVVRQVVQpL2JpbmZtdF9taXNjX3NlbGZwaW46IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmMKJiM0MzskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IENGTEFHUyAmIzQzOz0gJChUT09MU19JTkNMVURFUykKJiM0MzskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmMKIAogIyAtLS0gYmluZm10X21pc2MgYnBmICgmIzM5O0ImIzM5OykgaGFuZGxlciB0ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgc3RydWN0X29wcyBicGYgb2JqZWN0cyBhcmUgY29tcGlsZWQgYWdhaW5zdCB0aGUgcnVubmluZyBrZXJuZWwmIzM5O3MgQlRGLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmMKaW5kZXggMmM3YjYzMDc1ZjFkOS4uYjJhNDUxODkwMWIwZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jCkBAIC0zOCw2ICYjNDM7MzgsNyBAQAogI2RlZmluZSBfR05VX1NPVVJDRQogI2luY2x1ZGUgJmx0O2VsZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CkBAIC02NSw2ICYjNDM7NjYsOSBAQAogI2RlZmluZSBCSU5EX1JJU0NWX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9iaW5kX3Jpc2N2JiMzNDsKICNkZWZpbmUgQklORF9FWFBFQ1QJJiMzNDtCSU5EX1JBTiAmIzM0OwogI2RlZmluZSBCSU5EX01BWAkxMDAKJiM0MzsjZGVmaW5lIElOVEVSUF9MSU1JVAkmIzM0Oy9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnMmIzM0OwomIzQzOy8qIEV4aXQgc3RhdHVzIG9mIHRoZSBiaW5kaW5nIGNoaWxkIHdoZW4gaXQgY2Fubm90IHNldCB1cCBhIGJ1ZGdldCBvZiBpdHMgb3duLiAqLwomIzQzOyNkZWZpbmUgQklORF9OT19CVURHRVQJMjAwCiAKIC8qIEEgbWluaW1hbCA2NC1iaXQgbGl0dGxlLWVuZGlhbiBFTEYgaGVhZGVyLCBwYWRkZWQgdG8gdGhlIHJlYWQgc2l6ZS4gKi8KIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpCkBAIC0zNzgsNiAmIzQzOzM4Miw1NyBAQCBzdGF0aWMgaW50IGVudHJ5X2JpbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpCiAJcmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7CiB9CiAKJiM0MzsvKiBTZXQgdGhlIGludGVycHJldGVyIGJ1ZGdldCBvZiB0aGlzIG5hbWVzcGFjZS4gKi8KJiM0MztzdGF0aWMgaW50IHdyaXRlX2ludGVycF9saW1pdChjb25zdCBjaGFyICp2YWwpCiYjNDM7ewomIzQzOwlzc2l6ZV90IG47CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKElOVEVSUF9MSU1JVCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwluID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBuICZsdDsgMCA/IC0xIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZXJybm8gYSBiaW5kIGlzIHJlZnVzZWQgd2l0aCB3aGVuIHRoZSB3cml0ZXIgaXMgYSBjaGlsZCB0aGF0IGhhcyBzcGVudAomIzQzOyAqIHRoZSBidWRnZXQgb2YgYSB1c2VyIG5hbWVzcGFjZSBvZiBpdHMgb3duLCAwIGlmIGl0IHN1Y2NlZWRlZCBhbmQgLTEgaWYgdGhlCiYjNDM7ICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGUKJiM0MzsgKiBpbnRlcnByZXRlciBpcyBzdGlsbCBvcGVuZWQgd2l0aCB0aGlzIHByb2Nlc3MmIzM5O3MgY3JlZGVudGlhbHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaW5kX291dF9vZl9idWRnZXQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJICAgICAgY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CWNoYXIgY21kW1BBVEhfTUFYXSwgZmlsZVtQQVRIX01BWF07CiYjNDM7CWludCBmZCwgc3RhdHVzLCByZXR2YWw7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsKJiM0MzsJc25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCBCSU5GTVRfRElSICYjMzQ7LyVzJiMzNDssIGVudHJ5KTsKJiM0MzsJc25wcmludGYoY21kLCBzaXplb2YoY21kKSwgJiMzNDsmIzQzOyVzICVzXG4mIzM0OywgbmFtZSwgcGF0aCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzc2l6ZV90IG47CiYjNDM7CiYjNDM7CQkvKiBBIG5hbWVzcGFjZSBvZiBpdHMgb3duLCB3aXRoIG5vdGhpbmcgbGVmdCBpbiBpdCB0byBzcGVuZC4gKi8KJiM0MzsJCWlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpIHx8IHdyaXRlX2ludGVycF9saW1pdCgmIzM0OzAmIzM0OykpCiYjNDM7CQkJX2V4aXQoQklORF9OT19CVURHRVQpOwomIzQzOwkJbiA9IHdyaXRlKGZkLCBjbWQsIHN0cmxlbihjbWQpKTsKJiM0MzsJCV9leGl0KG4gJmx0OyAwID8gZXJybm8gOiAwKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChwaWQgJmx0OyAwIHx8IHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dmFsID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKJiM0MzsJcmV0dXJuIHJldHZhbCA9PSBCSU5EX05PX0JVREdFVCA/IC0xIDogcmV0dmFsOwomIzQzO30KJiM0MzsKIEZJWFRVUkUoYm91bmRfaW50ZXJwKSB7CiAJY2hhciBvYmpbUEFUSF9NQVhdOwogCXN0cnVjdCBicGZfY2FzZSBjOwpAQCAtNTY1LDQgJiM0Mzs2MjAsMTkgQEAgVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKQogCUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O292ZXImIzM0OywgQklORF9GSVJTVCksIC1FTk9TUEMpOwogfQogCiYjNDM7LyogQSBiaW5kaW5nIHBpbnMgYSBmaWxlOiBpdCBpcyBjaGFyZ2VkLCBhbmQgcmVmdXNlZCBvbmNlIHRoZSBidWRnZXQgaXMgb3V0LiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGJpbmRpbmdzX2FyZV9jaGFyZ2VkKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IGJpbmRfb3V0X29mX2J1ZGdldCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDt0aGlyZCYjMzQ7LCBCSU5EX0ZJUlNUKTsKJiM0MzsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyB1c2VyIG5hbWVzcGFjZXMgb3Igbm8gJiMzNDsgSU5URVJQX0xJTUlUKTsKJiM0MzsKJiM0MzsJLyogVGhlIGNoYXJnZSBmb2xsb3dzIHRoZSB3cml0ZXIsIG5vdCB0aGUgZW50cnkgZmlsZSBpdCB3cml0ZXMgdG8uICovCiYjNDM7CUVYUEVDVF9FUShlcnIsIEVOT1NQQyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBidWRnZXQgd2FzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSB3YXkuICovCiYjNDM7CUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O3RoaXJkJiMzNDssIEJJTkRfRklSU1QpLCAwKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmNjExYzU1MTc4NDIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2ludGVycGxpbWl0LmMKQEAgLTAsMCAmIzQzOzEsMjMyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIEEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciAtIHdoYXQgJiMzOTtGJiMzOTsgZ2l2ZXMgYSBzdGF0aWMgZW50cnkgYW5kIHdoYXQgYSAmIzM5O0ImIzM5OwomIzQzOyAqIGVudHJ5IGJpbmRzIC0ga2VlcHMgYSBmaWxlIG9wZW4gZm9yIGFzIGxvbmcgYXMgdGhlIGVudHJ5IGxpdmVzLCBzbyBpdCBwaW5zCiYjNDM7ICogdGhlIG1vdW50IGl0IGNhbWUgZnJvbS4gSXQgY29zdHMgbm8gZmlsZSBkZXNjcmlwdG9yLCBhbmQgYmluZm10X21pc2MgaXMKJiM0MzsgKiBGU19VU0VSTlNfTU9VTlQsIHNvIGFuIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZSBjYW4gY3JlYXRlIHRoZW0gd2l0aG91dAomIzQzOyAqIGJvdW5kLiBDaGVjayB0aGF0IFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYm91bmRzIGl0LCB0aGF0IGFuIGVudHJ5CiYjNDM7ICogdGhhdCBwcmUtb3BlbnMgbm90aGluZyBpcyBub3QgY2hhcmdlZCwgdGhhdCByZW1vdmluZyBhbiBlbnRyeSBnaXZlcyB0aGUKJiM0MzsgKiBjaGFyZ2UgYmFjaywgYW5kIHRoYXQgbmVzdGluZyBhIHVzZXIgbmFtZXNwYWNlIGRvZXMgbm90IGV2YWRlIGl0LgomIzQzOyAqCiYjNDM7ICogUnVucyB1bnByaXZpbGVnZWQgaW4gYSB1c2VyIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21vdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vZmlsZXN5c3RlbXMvdXRpbHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1OVAkJJiMzNDsvdG1wL2JpbmZtdF9pbnRlcnBsaW1pdCYjMzQ7CiYjNDM7I2RlZmluZSBORVNURURfTU5UCSYjMzQ7L3RtcC9iaW5mbXRfaW50ZXJwbGltaXRfbmVzdGVkJiMzNDsKJiM0MzsjZGVmaW5lIExJTUlUX1NZU0NUTAkmIzM0Oy9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnMmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUFHSUMJCSYjMzQ7XFx4ZGVcXHhhZCYjMzQ7CiYjNDM7LyogTm90IG9uIHRoZSBpbnN0YW5jZSwgYW5kIHVubGlrZSAvYmluL3RydWUgaXQgYWx3YXlzIGV4aXN0cy4gKi8KJiM0MzsjZGVmaW5lIElOVEVSUAkJJiMzNDsvcHJvYy9zZWxmL2V4ZSYjMzQ7CiYjNDM7CiYjNDM7LyogU21hbGwgZW5vdWdoIHRvIGZpbGwgYnkgaGFuZCwgYmlnIGVub3VnaCB0aGF0IGEgcmVmdW5kIGlzIHZpc2libGUuICovCiYjNDM7I2RlZmluZSBMSU1JVAkJNAomIzQzOwomIzQzOy8qIFdoYXQgVUNPVU5UX0VOVFJZKCkgbGV0cyBhIG5hbWVzcGFjZSByYWlzZSBpdHMgb3duIGxpbWl0IHRvLiAqLwomIzQzOyNkZWZpbmUgTElNSVRfTUFYCSYjMzQ7MjE0NzQ4MzY0NyYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlpZiAobWtkaXIocGF0aCwgMDc1NSkgJmFtcDsmYW1wOyBlcnJubyAhPSBFRVhJU1QpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXcml0ZSBAdmFsIHRvIEBwYXRoLCBwcmVzZXJ2aW5nIHdyaXRlKDIpJiMzOTtzIGVycm5vIGZvciB0aGUgY2FsbGVyLiAqLwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfa2VlcF9lcnJubyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWwpCiYjNDM7ewomIzQzOwlpbnQgZmQsIHNhdmVkOwomIzQzOwlzc2l6ZV90IG47CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CW4gPSB3cml0ZShmZCwgdmFsLCBzdHJsZW4odmFsKSk7CiYjNDM7CXNhdmVkID0gZXJybm87CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZXJybm8gPSBzYXZlZDsKJiM0MzsJcmV0dXJuIG4gJmx0OyAwID8gLTEgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNldF9saW1pdChjb25zdCBjaGFyICp2YWwpCiYjNDM7ewomIzQzOwlyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhMSU1JVF9TWVNDVEwsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfYXQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpydWxlKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3JlZ2lzdGVyJiMzNDssIG1udCk7CiYjNDM7CXJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiAmIzM5O0YmIzM5OyBlbnRyeTogb25lIGludGVycHJldGVyIHByZS1vcGVuZWQgYXQgcmVnaXN0cmF0aW9uLCBvbmUgY2hhcmdlLiAqLwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfZml4ZWQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJY2hhciBydWxlW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJc25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCAmIzM0OzolczpNOjomIzM0OyBNQUdJQyAmIzM0Ozo6JiMzNDsgSU5URVJQICYjMzQ7OkYmIzM0OywgbmFtZSk7CiYjNDM7CXJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgc2FtZSBlbnRyeSB3aXRob3V0ICYjMzk7RiYjMzk7OiB0aGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHBlciBleGVjIGluc3RlYWQuICovCiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9wbGFpbihjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwljaGFyIHJ1bGVbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7OiVzOk06OiYjMzQ7IE1BR0lDICYjMzQ7OjomIzM0OyBJTlRFUlAgJiMzNDs6JiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZW1vdmVfZW50cnkoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzLyVzJiMzNDssIG1udCwgbmFtZSk7CiYjNDM7CXJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsICYjMzQ7LTFcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZW50cnlfZXhpc3RzKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy8lcyYjMzQ7LCBtbnQsIG5hbWUpOwomIzQzOwlyZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spID09IDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlZ2lzdGVyIEBuICYjMzk7RiYjMzk7IGVudHJpZXMsIGVhY2ggd2l0aCBhIG5hbWUgb2YgaXRzIG93bi4gKi8KJiM0MztzdGF0aWMgaW50IGZpbGxfYnVkZ2V0KGNvbnN0IGNoYXIgKm1udCwgdW5zaWduZWQgaW50IG4pCiYjNDM7ewomIzQzOwljaGFyIG5hbWVbMzJdOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7Zml4ZWQldSYjMzQ7LCBpKTsKJiM0MzsJCWlmIChyZWdpc3Rlcl9maXhlZChtbnQsIG5hbWUpKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRShpbnRlcnBfbGltaXQpIHsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoaW50ZXJwX2xpbWl0KQomIzQzO3sKJiM0MzsJLyogc2V0dXBfdXNlcm5zKCkgZXhpdHMgcmF0aGVyIHRoYW4gcmV0dXJucyBpZiB0aGlzIGlzIG5vdCB0aGVyZS4gKi8KJiM0MzsJaWYgKGFjY2VzcygmIzM0Oy9wcm9jL3NlbGYvbnMvdXNlciYjMzQ7LCBGX09LKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCB3aXRob3V0IHVzZXIgbmFtZXNwYWNlcyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNldHVwX3VzZXJucygpLCAwKTsKJiM0MzsKJiM0MzsJLyogQ0FQX1NZU19SRVNPVVJDRSBpbiB0aGlzIG5hbWVzcGFjZSBpcyB3aGF0IG1ha2VzIGl0IHdyaXRhYmxlLiAqLwomIzQzOwlpZiAoc2V0X2xpbWl0KExJTUlUX01BWCkpIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFTk9FTlQpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgJiMzNDsgTElNSVRfU1lTQ1RMKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2Nhbm5vdCBzZXQgdGhlIGxpbWl0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlbnN1cmVfZGlyKE1OVCksIDApOwomIzQzOwlpZiAobW91bnQoJiMzNDtiaW5mbXRfbWlzYyYjMzQ7LCBNTlQsICYjMzQ7YmluZm10X21pc2MmIzM0OywgMCwgTlVMTCkpIHsKJiM0MzsJCWludCBzYXZlZCA9IGVycm5vOwomIzQzOwomIzQzOwkJLyogVGVhcmRvd24gZG9lc24mIzM5O3QgcnVuIHdoZW4gc2V0dXAgc2tpcHMsIHNvIGNsZWFuIHVwIGhlcmUuICovCiYjNDM7CQlybWRpcihNTlQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gYmluZm10X21pc2M6ICVzJiMzNDssIHN0cmVycm9yKHNhdmVkKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihpbnRlcnBfbGltaXQpCiYjNDM7ewomIzQzOwkvKiBUaGUgbmFtZXNwYWNlcyBnbyB3aXRoIHRoZSBwcm9jZXNzOyBqdXN0IGRvbiYjMzk7dCBsaXR0ZXIgL3RtcC4gKi8KJiM0MzsJdW1vdW50MihORVNURURfTU5ULCBNTlRfREVUQUNIKTsKJiM0MzsJdW1vdW50MihNTlQsIE1OVF9ERVRBQ0gpOwomIzQzOwlybWRpcihORVNURURfTU5UKTsKJiM0MzsJcm1kaXIoTU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRXZlcnkgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBpcyBjaGFyZ2VkLCBhbmQgdGhlIGJ1ZGdldCBpcyBhIGhhcmQgc3RvcC4gKi8KJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBmaXhlZF9pbnRlcnByZXRlcnNfYXJlX2NoYXJnZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlszMl07CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JXUmIzM0OywgTElNSVQpOwomIzQzOwlBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZmlsbF9idWRnZXQoTU5ULCBMSU1JVCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCAmIzM0O292ZXImIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1NQQyk7CiYjNDM7CiYjNDM7CS8qIEEgcmVmdXNlZCByZWdpc3RyYXRpb24gbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiAqLwomIzQzOwlFWFBFQ1RfRkFMU0UoZW50cnlfZXhpc3RzKE1OVCwgJiMzNDtvdmVyJiMzNDspKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gZW50cnkgdGhhdCBwcmUtb3BlbnMgbm90aGluZyBwaW5zIG5vdGhpbmcsIHNvIGl0IGlzIG5vdCBjaGFyZ2VkLiAqLwomIzQzO1RFU1RfRihpbnRlcnBfbGltaXQsIHBsYWluX2VudHJpZXNfYXJlX25vdF9jaGFyZ2VkKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHNldF9saW1pdCgmIzM0OzAmIzM0OyksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEocmVnaXN0ZXJfcGxhaW4oTU5ULCAmIzM0O3BsYWluJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfZXhpc3RzKE1OVCwgJiMzNDtwbGFpbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CS8qIC4uLiB3aGlsZSB0aGUgc2FtZSBlbnRyeSB3aXRoICYjMzk7RiYjMzk7IGhhcyBub3RoaW5nIHRvIHNwZW5kLiAqLwomIzQzOwlFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCAmIzM0O2ZpeGVkJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqLwomIzQzO1RFU1RfRihpbnRlcnBfbGltaXQsIHJlbW92YWxfcmVmdW5kc190aGVfY2hhcmdlKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyV1JiMzNDssIExJTUlUKTsKJiM0MzsJQVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTsKJiM0MzsJQVNTRVJUX05FKHJlZ2lzdGVyX2ZpeGVkKE1OVCwgJiMzNDtvdmVyJiMzNDspLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHJlbW92ZV9lbnRyeShNTlQsICYjMzQ7Zml4ZWQwJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHJlZ2lzdGVyX2ZpeGVkKE1OVCwgJiMzNDtvdmVyJiMzNDspLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgY2hhcmdlIHdhbGtzIHRoZSBhbmNlc3RvcnMsIHNvIGEgbmFtZXNwYWNlIGNhbm5vdCBidXkgaXRzZWxmIGJ1ZGdldCBieQomIzQzOyAqIG5lc3Rpbmc6IGl0IG1heSByYWlzZSBvbmx5IGl0cyBvd24gbGltaXQsIGFuZCB0aGUgcGFyZW50IGl0IHdhcyBjcmVhdGVkCiYjNDM7ICogZnJvbSBpcyBjaGFyZ2VkIGZvciBldmVyeSBiaW5kaW5nIG1hZGUgYmVsb3cgaXQuCiYjNDM7ICovCiYjNDM7VEVTVF9GKGludGVycF9saW1pdCwgbmVzdGluZ19kb2VzX25vdF9ldmFkZV9pdCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldSYjMzQ7LCBMSU1JVCk7CiYjNDM7CUFTU0VSVF9FUShzZXRfbGltaXQoYnVmKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShmaWxsX2J1ZGdldChNTlQsIExJTUlUKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzZXRfbGltaXQoTElNSVRfTUFYKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlbnN1cmVfZGlyKE5FU1RFRF9NTlQpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKG1vdW50KCYjMzQ7YmluZm10X21pc2MmIzM0OywgTkVTVEVEX01OVCwgJiMzNDtiaW5mbXRfbWlzYyYjMzQ7LCAwLCBOVUxMKSwgMCk7CiYjNDM7CiYjNDM7CS8qIEEgZnJlc2ggaW5zdGFuY2Ugd2l0aCBhbiB1bmxpbWl0ZWQgYnVkZ2V0IG9mIGl0cyBvd24sIGFuZCB5ZXQ6ICovCiYjNDM7CUVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChORVNURURfTU5ULCAmIzM0O25lc3RlZCYjMzQ7KSwgMCk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PU1BDKTsKJiM0MzsKJiM0MzsJLyogVGhlIG5lc3RlZCBpbnN0YW5jZSB3b3JrcyBmb3IgYW55dGhpbmcgdGhhdCBwaW5zIG5vIGZpbGUuICovCiYjNDM7CUVYUEVDVF9FUShyZWdpc3Rlcl9wbGFpbihORVNURURfTU5ULCAmIzM0O25lc3RlZF9wbGFpbiYjMzQ7KSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCaW5mbXRfbWlzYyBJbnRlcnByZXRlciBMaW1pdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLiBJdCYjMzk7cyB0b3VjaGluZyBgZnMvYmluZm10X21pc2MuY2AgYW5kIGFkZGluZyBhIG5ldyBzeXNjdGwsIGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYCwgd2hpY2ggaXMgaW50cmlndWluZy4gTGltaXRpbmcgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyB3aXRoaW4gYGJpbmZtdF9taXNjYCBpcyBhIGdvb2QgaWRlYSBpbiB0ZXJtcyBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaGFyZGVuaW5nLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHVzaW5nIGBpbmNfdWNvdW50YCBhbmQgYGRlY191Y291bnRgIHdpdGggYFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlNgIHRvIG1hbmFnZSB0aGUgYWNjb3VudGluZywgd2hpY2ggaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciByZXNvdXJjZSBsaW1pdGluZy4gVGhlIGNoYW5nZXMgZm9jdXMgb24gbW9kaWZ5aW5nIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIHRvIGFwcGx5IHRoZSBjaGFyZ2UsIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSB0ZXN0LCBgYmluZm10X21pc2NfaW50ZXJwbGltaXQuY2AsIGFuZCB0b3VjaGVkIGBiaW5mbXRfbWlzY19icGYuY2AuCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBga2VybmVsL3Vjb3VudC5jYCB0byBzZWUgaG93IHRoZSBsaW1pdCBpcyBpbXBsZW1lbnRlZC4gSSBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoZSBwb3RlbnRpYWwgaGVyZSBmb3IgZnV6emluZy4gYGJpbmZtdF9taXNjYCBpcywgYWZ0ZXIgYWxsLCB1c2VyLXJlYWNoYWJsZSB0aHJvdWdoIG1vdW50aW5nIGFuZCB3cml0aW5nIHRvIHRoZSBmaWxlIHN5c3RlbS4gVGhhdCBtZWFucyBhbnkgZmxhdyBpbiB0aGUgbG9naWMgaXMgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlIGxvb2suCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgc291bmRzIGxpa2UgdGhlIGNyaXRpY2FsIHBvaW50LiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VudHJ5X2F0dGFjaF9pbnRlcnByZXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz0yODU9c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0yOTctLyoqXG5mcy9iaW5mbXRfbWlzYy5jOjI5ODogKiBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIgLSBiaW5kIGFuIG9wZW5lZCBpbnRlcnByZXRlciB0byBAZVxuZnMvYmluZm10X21pc2MuYy0yOTktICogQGU6IGVudHJ5IGJlaW5nIGNvbmZpZ3VyZWRcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTMxMy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MzE0OnN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMzE1LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMzAxPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM1MS1cdGVsc2VcbmZzL2JpbmZtdF9taXNjLmM6MTM1MjpcdFx0cmV0dmFsID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIG5hbWUsIHBhdGgsIGYpO1xuZnMvYmluZm10X21pc2MuYy0xMzUzLVx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQ2Mj1zdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0ODYtXHRcdFx0cmV0dXJuIFBUUl9FUlIoZik7XG5mcy9iaW5mbXRfbWlzYy5jOjE0ODc6XHRcdGVyciA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBcJiMzNDtcJiMzNDssIGUtXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xuZnMvYmluZm10X21pc2MuYy0xNDg4LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEludGVycHJldGVyIEF0dGFjaG1lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBob3cgaW50ZXJwcmV0ZXJzIGFyZSBiZWluZyBsaW5rZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgYGJtX2VudHJ5X2FkZF9pbnRlcnBgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBhbmQgYm90aCBvZiB0aG9zZSB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHNjb3Bpbmcg4oCTIHNwZWNpZmljYWxseSwgYXJlIHRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgZG9pbmcgdGhlIGF0dGFjaGluZywgZGVjbGFyZWQgYXMgc3RhdGljPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJZiB0aGV5ICphcmUqIHN0YXRpYywgaXQgcmVhbGx5IGxpbWl0cyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBtYW5pcHVsYXRpb24gb3IgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVpciB2aXNpYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgb3IgaWYgdGhleSBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzZWN1cml0eSwgbWFpbnRhaW5hYmlsaXR5LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aG9zZSBkZWNsYXJhdGlvbnMgcXVpY2tseSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4cG9zdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JtX2VudHJ5X2FkZF9pbnRlcnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmM9MTI2ND1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjg1LS8qKlxuZnMvYmluZm10X21pc2MuYzoxMjg2OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcbmZzL2JpbmZtdF9taXNjLmMtMTI4Ny0gKiBAZTogdGhlIGVudHJ5XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMzAwLSAqL1xuZnMvYmluZm10X21pc2MuYzoxMzAxOnN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xMzAyLVx0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTM2Mj1zdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEzNzktXHRpZiAoYnVmWzBdID09ICYjMzk7JiM0MzsmIzM5OylcbmZzL2JpbmZtdF9taXNjLmM6MTM4MDpcdFx0cmV0dXJuIGJtX2VudHJ5X2FkZF9pbnRlcnAoZSwgZmlsZSwgYnVmLCBjb3VudCk7XG5mcy9iaW5mbXRfbWlzYy5jLTEzODEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipEaXZpbmcgaW50byB0aGUgV3JpdGUgT3BlcmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBibV9lbnRyeV93cml0ZWAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGZpbGUgb3BlcmF0aW9uIHdyaXRlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCbG9jayBNYW5hZ2VyLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGNvbmZpcm1pbmcgaG93IHdyaXRlcyBhcmUgcmVnaXN0ZXJlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBibV9yZWdpc3Rlcl93cml0ZWAgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGludGVybmFsbHkuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcmVnaXN0ZXJpbmcgYSB3cml0ZSBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTE0MzE9c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2MS1cbmZzL2JpbmZtdF9taXNjLmM6MTQ2MjpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTQ2My1cdFx0XHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xNTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jOjE1MDQ6XHQud3JpdGVcdFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcbmZzL2JpbmZtdF9taXNjLmMtMTUwNS1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRW50cnkgUG9pbnRzKioKCkFscmlnaHQsIGxldCYjMzk7cyB6b29tIGluIG9uIHRoaXMgY29kZS4gSXQgbG9va3MgbGlrZSBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBgYm1fZW50cnlfd3JpdGVgIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHdoYXRldmVyIHRoaXMgc3lzdGVtIGlzIGRvaW5nLiBHaXZlbiB0aGVpciBuYW1lcywgSSYjMzk7bSBndWVzc2luZyBvbmUgaGFuZGxlcyByZWdpc3Rlci1sZXZlbCB3cml0ZXMgYW5kIHRoZSBvdGhlciBtYW5hZ2VzIGRhdGEgZW50cmllcy4gU2VlbXMgbG9naWNhbCwgYSBzdGFuZGFyZCBhcmNoaXRlY3R1cmFsIGJyZWFrZG93biwgYW5kIGxpa2VseSBmb2xsb3dzIGEgY29tbW9uIHNvZnR3YXJlIGRlc2lnbiBwYXR0ZXJuLiBUbyB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHksIG15IGltbWVkaWF0ZSBmb2N1cyBoYXMgdG8gYmUgb24gYGJtX2VudHJ5X3dyaXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IG9wZXJhdGVzLCB0aGF0IHdpbGwgbGlrZWx5IGlsbHVtaW5hdGUgdGhlIHdob2xlIG9wZXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym1fZW50cnlfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmM9MTI2ND1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjcxLVxuZnMvYmluZm10X21pc2MuYzoxMjcyOlx0Lyogc2VxX29wZW4oKSBjbGVhcnMgRk1PREVfUFdSSVRFLCBibV9lbnRyeV93cml0ZSgpIHRha2VzIGFueSBvZmZzZXQgKi9cbmZzL2JpbmZtdF9taXNjLmMtMTI3My1cdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMzAxPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM2MS1cbmZzL2JpbmZtdF9taXNjLmM6MTM2MjpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTM2My1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9lbnRyeV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQyMi1cdC5yZWFkXHRcdD0gc2VxX3JlYWQsXG5mcy9iaW5mbXRfbWlzYy5jOjE0MjM6XHQud3JpdGVcdFx0PSBibV9lbnRyeV93cml0ZSxcbmZzL2JpbmZtdF9taXNjLmMtMTQyNC1cdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGZvciBDb21wbGV0ZSBGaWxlIE9wZXJhdGlvbiBDb3ZlcmFnZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0hhdmUgd2UgdHJ1bHkgYWNjb3VudGVkIGZvciAqYWxsKiB0aGUgZmlsZSBvcGVyYXRpb25zIGhlcmU/JiMzNDsgSXQmIzM5O3MgYSBjcml0aWNhbCBxdWVzdGlvbiB0byBhc2ssIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBkYXRhIG1hbmlwdWxhdGlvbi4gTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gcXVpY2tseSBhbmQgY29tcHJlaGVuc2l2ZWx5IHNjYW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHRvIHNlZSBpZiB3ZSYjMzk7dmUgbWlzc2VkIGFueXRoaW5nLiBNeSBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGFyZWFzIHdoZXJlIHdlIHB1dCBpbmZvcm1hdGlvbiBpbnRvIGEgc3lzdGVtLCB3aGljaCBzaG91bGQgY292ZXIgdGhlIG1vc3QgaW1wb3J0YW50IGFzcGVjdHMuICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCYjMzQ7LiBJJiMzOTtsbCB1c2UgdGhhdCBhcyBhIGp1bXBpbmctb2ZmIHBvaW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY2FwdHVyZWQgdGhlIGNvcmUgYWN0aW9ucyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW50cnlfcHV0X2ludGVycHJldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz0yNzM9c3RhdGljIHN0cnVjdCBmaWxlICpvcGVuX2ludGVycF9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBjaGFyICpwYXRoKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMjg0LS8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xuZnMvYmluZm10X21pc2MuYzoyODU6c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG5mcy9iaW5mbXRfbWlzYy5jLTI4Ni17XG4tLVxuZnMvYmluZm10X21pc2MuYz0zNzE9c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM3Ni1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbmZzL2JpbmZtdF9taXNjLmM6Mzc3Olx0XHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xuZnMvYmluZm10X21pc2MuYy0zNzgtXHRcdC8qIFdhbGtlcnMgbWF5IHN0aWxsIGRlcmVmZXJlbmNlIHRoaXMgZW50cnksIGV2ZW4gc2xlZXBpbmcuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGJpbmZtdF9oYW5kbGVyIFJlbW92YWwqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHB1dF9iaW5mbXRfaGFuZGxlcmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgdGhlICpyZW1vdmFsKiBvZiBhIGJpbmZtdCBoYW5kbGVyLiBUaGF0IG1ha2VzIGltbWVkaWF0ZSBzZW5zZTsgd2UgbmVlZCBhIG1lY2hhbmlzbSB0byBncmFjZWZ1bGx5IGNsZWFuIHVwIGFmdGVyIGEgaGFuZGxlciBpcyBubyBsb25nZXIgYWN0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgZXhhY3RseS4gV2hhdCBjbGVhbnVwIHRhc2tzIGFyZSBpbml0aWF0ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSBmcmVlZD8gSSBleHBlY3QgYSB3ZWxsLWRlc2lnbmVkIGhhbmRsZXIgd2lsbCBoYXZlIGFsbG9jYXRlZCBzb21lIGtlcm5lbCBzdHJ1Y3R1cmVzIGFuZCBwZXJoYXBzIGZpbGUgZGVzY3JpcHRvcnMsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgaXMgZnJlZWQgYW5kIGlmIHdlIGFyZSBjYWxsaW5nIGFwcHJvcHJpYXRlIGRlc3RydWN0aW9uIGZ1bmN0aW9ucyBmb3IgdGhhdCBkYXRhLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN0YWJpbGl0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcHV0X2JpbmZtdF9oYW5kbGVyYCBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X2JpbmZtdF9oYW5kbGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTM1Mj1zdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM2Mi0vKipcbmZzL2JpbmZtdF9taXNjLmM6MzYzOiAqIHB1dF9iaW5mbXRfaGFuZGxlciAtIHB1dCBiaW5hcnkgaGFuZGxlciBlbnRyeVxuZnMvYmluZm10X21pc2MuYy0zNjQtICogQGU6IGVudHJ5IHRvIHB1dFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzcwLSAqL1xuZnMvYmluZm10X21pc2MuYzozNzE6c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtMzcyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM4Mi1cbmZzL2JpbmZtdF9taXNjLmM6MzgzOkRFRklORV9GUkVFKHB1dF9iaW5mbXRfaGFuZGxlciwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICosIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG5mcy9iaW5mbXRfbWlzYy5jLTM4NC1cbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTYyMT1zdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2JpbmZtdF9taXNjLmMtNjIyLXtcbmZzL2JpbmZtdF9taXNjLmM6NjIzOlx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpmbXQgX19mcmVlKHB1dF9iaW5mbXRfaGFuZGxlcikgPSBOVUxMO1xuZnMvYmluZm10X21pc2MuYy02MjQtXHRjb25zdCBjaGFyICppbnRlcnByZXRlcjtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTg0OD1zdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTk5NC1cbmZzL2JpbmZtdF9taXNjLmM6OTk1Olx0LyogQm9ybiBob2xkaW5nIG9uZSByZWZlcmVuY2U7IHB1dF9iaW5mbXRfaGFuZGxlcigpIGlzIHRoZSB0ZWFyZG93bi4gKi9cbmZzL2JpbmZtdF9taXNjLmMtOTk2LVx0cmVmY291bnRfc2V0KFx1MDAyNmUtXHUwMDNldXNlcnMsIDEpO1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTE0OT1zdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTE2Mi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuZnMvYmluZm10X21pc2MuYzoxMTYzOlx0XHRwdXRfYmluZm10X2hhbmRsZXIoZSk7XG5mcy9iaW5mbXRfbWlzYy5jLTExNjQtXHR9XG4tLVxuZnMvYmluZm10X21pc2MuYz0xNDYyPXN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2NC17XG5mcy9iaW5mbXRfbWlzYy5jOjE0NjU6XHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKHB1dF9iaW5mbXRfaGFuZGxlcikgPSBOVUxMO1xuZnMvYmluZm10X21pc2MuYy0xNDY2LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBiaW5mbXRfbWlzYyBJbnRlcnByZXRlciBMaW1pdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9ldmljdF9pbm9kZWAsIGFuZCBgbG9hZF9taXNjX2JpbmFyeWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGhlcmUuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBiaW5mbXRfbWlzY2AsIHNwZWNpZmljYWxseSBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzLiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4KCkkgc2VlIHRoYXQgYFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlNgIGhhcyBiZWVuIGludHJvZHVjZWQsIGFsb25nIHdpdGggcmVsYXRlZCBkZWZpbml0aW9ucyBpbiBgdWNvdW50LmNgIGFuZCBgdXNlcl9uYW1lc3BhY2UuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgY29udHJvbCBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGF0IGNvdW50ZXIgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYXJlIGBDT05GSUdfQklORk1UX01JU0NgIGFuZCBgQ09ORklHX1VTRVJfTlNgLiBNYWtlcyBzZW5zZTsgYENPTkZJR19VU0VSX05TYCBpcyBjcnVjaWFsIGZvciBuYW1lc3BhY2UtYXdhcmUgbGltaXRzLiBUaW1lIHRvIGRpdmUgaW50byBgZnMvS2NvbmZpZy5iaW5mbXRgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBCSU5GTVRfTUlTQ2AuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gY29uZmlnIG9wdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgaG93IHRvIG1hbmFnZSB0aGlzIGludGVycHJldGVyIGxpbWl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQklORk1UX01JU0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxuLS1cbmZzL0tjb25maWcuYmluZm10LTE0NC1cbmZzL0tjb25maWcuYmluZm10OjE0NTpjb25maWcgQklORk1UX01JU0NcbmZzL0tjb25maWcuYmluZm10LTE0Ni1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBNSVNDIGJpbmFyaWVzXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTcxOmNvbmZpZyBCSU5GTVRfTUlTQ19CUEZcbmZzL0tjb25maWcuYmluZm10LTE3Mi1cdGJvb2wgXCYjMzQ7QlBGLXNlbGVjdGVkIGludGVycHJldGVycyBmb3IgbWlzYyBiaW5hcmllc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBrZXJuZWw6CgoqKkRlbHZpbmcgaW50byBVc2VyIE5hbWVzcGFjZXM6IEV4YW1pbmluZyBga2VybmVsL3Vjb3VudC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgcGVyaGFwcyBjb25maXJtIGEgaHVuY2gsIGFib3V0IGhvdyB1c2VyIG5hbWVzcGFjZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGtlcm5lbC91Y291bnQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYW55IGNvZGUgcmVsYXRlZCB0byBgVVNFUl9OU2AuIEl0JiMzOTtzIGEga2V5IHN0cnVjdHVyZSBhbmQgbWVjaGFuaXNtLCBhbmQgdGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbG9naWMgZm9yIG1hbmFnaW5nIHVzZXIgbmFtZXNwYWNlIHJlc291cmNlIGFjY291bnRpbmcsIHBlcmhhcHMgdXNlciBJRCBtYXBwaW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBzeXN0ZW0gY2FsbHMuIFRoZSBjb2RlIGluIGB1Y291bnQuY2Agc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBrZXJuZWwgdHJhY2tzIGFuZCBsaW1pdHMgcmVzb3VyY2UgY29uc3VtcHRpb24gd2l0aGluIHRoZXNlIGlzb2xhdGVkIHVzZXIgZW52aXJvbm1lbnRzLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIGhvdyB1c2VyIG5hbWVzcGFjZXMgb3BlcmF0ZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoaXMgZGV0YWlsIGZvciBsYXRlciBpbiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNDI5PWNvbmZpZyBJUENfTlNcbi0tXG5pbml0L0tjb25maWctMTQzNi1cbmluaXQvS2NvbmZpZzoxNDM3OmNvbmZpZyBVU0VSX05TXG5pbml0L0tjb25maWctMTQzOC1cdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDEKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiA0MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJJTkZNVF9NSVNDIGFuZCBVU0VSX05TIGZvciBSZWxldmFudCBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQklORk1UX01JU0NgIGFuZCBgVVNFUl9OU2AgYXMgbXkgY29uZmlnIGNvbnRleHQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9ldmljdF9pbm9kZWAsIGFuZCBgbG9hZF9taXNjX2JpbmFyeWAuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSB0aGUgY3J1Y2lhbCBvbmVzIGJlY2F1c2UgKnRoZXkqIGFyZSB3aGF0IGNhbGwgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAsIGFuZCB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGBpbmNfdWNvdW50YC4gT24gdGhlIGZsaXAgc2lkZSwgYGJtX2V2aWN0X2lub2RlYCBpcyBsaW5rZWQgdG8gYHB1dF9iaW5mbXRfaGFuZGxlcmAsIHdoaWNoIGNhbGxzIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCwgdGhhdCB0aGVuIGRvZXMgdGhlIGBkZWNfdWNvdW50YCBvcGVyYXRpb24uCgpMZXQmIzM5O3MgZHJpbGwgZG93bi4gYGJtX3JlZ2lzdGVyX3dyaXRlYCBsb29rcyBzb2xpZDsgaXQgaGFuZGxlcyB3cml0ZXMgdG8gYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmAuICBgYm1fZW50cnlfd3JpdGVgIGlzIHNpbWlsYXJseSBmb2N1c2VkIG9uIHdyaXRlcyB0byBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjLyZsdDtlbnRyeSZndDtgLiAgYGJtX2V2aWN0X2lub2RlYCBpcyB0cmlnZ2VyZWQgd2hlbiBhIGJpbmZtdCBlbnRyeSBmaWxlIGdldHMgcmVtb3ZlZC4gQW5kIGBsb2FkX21pc2NfYmluYXJ5YCBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gYSBiaW5hcnkgaXMgZXhlY3V0ZWQuIFNvLCBjb25zaWRlcmluZyB0aGF0LCBJJiMzOTttIGRlZmluaXRlbHkgaW5jbHVkaW5nIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIGBibV9lbnRyeV93cml0ZWAgaW4gbXkgYW5hbHlzaXMuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIHN0YXRpYyBpc3N1ZS4gYGJtX3JlZ2lzdGVyX3dyaXRlYCAqaXMqIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgb2ZmIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBIb3dldmVyLCB0aGVzZSBgYm1fKmAgZnVuY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3RzLiBUaGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGFuZCB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgb3B0aW9uPwoKYGluY191Y291bnRgIGFuZCBgZGVjX3Vjb3VudGAgYXJlIGV4cG9ydGVkLCBidXQgdGhvc2UgYXJlIGp1c3QgZ2VuZXJpYyB1dGlsaXRpZXMuIExldCBtZSBjaGVjayBpZiBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBpcyBpbmxpbmVkLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0ICphdXRvbWF0aWNhbGx5KiBtZWFuIGl0JiMzOTtzIGlubGluZWQuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZnMvYmluZm10X21pc2MuY2AgZm9yIHNvbWUgbW9yZSBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDEKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRmluZGluZyBEeW5hbWljIEZ1bmN0aW9uYWxpdHkgaW4gYGZzL2JpbmZtdF9taXNjLmNgKioKClJpZ2h0LCBzbyB0aGUgZ29hbCBpcyB0byBwaW5wb2ludCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL2JpbmZtdF9taXNjLmNgLiBXaHk/IFdlbGwsIHByb2JhYmx5IGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZHluYW1pY2FsbHkgaGFuZGxlcyBleGVjdXRhYmxlIGZvcm1hdHMsIG9yIHBlcmhhcHMgSSYjMzk7bSBsb29raW5nIHRvIGV4dGVuZCBpdHMgY2FwYWJpbGl0aWVzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsaW1pdGVkIGluIHNjb3BlLCBhbmQgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHNvIHRvIHNwZWFrLCBvZiB0aGF0IGZpbGUuIFRoZXkmIzM5O3JlIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBob29rcywgdGhlIHRoaW5ncyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB1c2VyLXNwYWNlIG1pZ2h0IGNhbGwgaW50by4gVGhlcmVmb3JlLCBmb2N1c2luZyBvbiB0aGUgbm9uLXN0YXRpYyBvbmVzIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjYWxsYWJsZSBieSBvdGhlciBtb2R1bGVzIG9yIHRoZSBrZXJuZWwgYXMgYSB3aG9sZS4gSSBleHBlY3QgdGhlc2Ugd2lsbCBiZSB0aGUgZnVuY3Rpb25zIG1hbmFnaW5nIHRoZSByZWdpc3RyYXRpb24sIGxvYWRpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZm9ybWF0cyBhcmUgaGFuZGxlZCBhbmQgd2hhdCBob29rcyBhcmUgYXZhaWxhYmxlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTI3CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqQ29uc2lkZXJpbmcgUG90ZW50aWFsIFR5cGUgUXVhbGlmaWVycyBmb3IgU2l6ZS1SZWxhdGVkIFZhcmlhYmxlcyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZGVzaWduIHByb2JsZW0sIGFuZCBJJiMzOTttIGF0IHRoZSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gc2V0dGxlIG9uIGEgdHlwZSBxdWFsaWZpZXIgZm9yIGEgdmFyaWFibGUgbGlrZWx5IHRvIGhvbGQgc2l6ZSBpbmZvcm1hdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUgYmVzdCBvcHRpb25zIGhlcmU/JiMzNDsgTXkgaW5pdGlhbCBpbnN0aW5jdCBsZWFucyB0b3dhcmRzIHRyeWluZyBgXnZvaWRgIG9yIGBec3NpemVfdGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFzc2VzcyB0aGUgdHJhZGVvZmZzLiBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiBIb3cgZG9lcyB0aGlzIGltcGFjdCBwb3J0YWJpbGl0eT8gSXMgYF52b2lkYCBvdmVybHkgZ2VuZXJpYywgb3IgZG9lcyBpdCBvZmZlciBzb21lIHBvdGVudGlhbCBmb3IgZnV0dXJlIGZsZXhpYmlsaXR5PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgXnNzaXplX3RgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoOiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgcGxhdGZvcm0sIGFuZCB3aWxsIGl0IGJlIHRoZSBiZXN0IG9wdGlvbiBoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxzc2l6ZV90fGludCkgW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBGb2N1c2VkIEFwcHJvYWNoKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXIuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gaW1tZWRpYXRlbHkgZW5nYWdlIHdpdGggdGhlIGNvcmUgZWxlbWVudDogdGhlIGZpbGUgaXRzZWxmLiBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIG92ZXJ0aGluayB0aGUgc2l0dWF0aW9uIG9yIGdldCBib2dnZWQgZG93biBpbiBhbmNpbGxhcnkgY29uY2VybnMuIExldCYjMzk7cyBjdXQgdGhyb3VnaCB0aGUgbm9pc2UgYW5kIGRpcmVjdGx5IGFzc2VzcyB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24uIEp1bXBpbmcgc3RyYWlnaHQgaW50byB0aGUgZmlsZSBpcyB0aGUgbW9zdCBlZmZpY2llbnQgYW5kIHByYWN0aWNhbCBzdGFydGluZyBwb2ludC4gVGhhdCBpbml0aWFsIHNjYW4gYW5kIHBhcnNlIHdpbGwgaW5mb3JtIG15IHN1YnNlcXVlbnQgZXZhbHVhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIGJpbmZtdF9taXNjLmNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEfDvG50aGVyXG4gICA2Olx0ICpcbiAgIDc6XHQgKiBiaW5mbXRfbWlzYyBkZXRlY3RzIGJpbmFyaWVzIHZpYSBhIG1hZ2ljIG9yIGZpbGVuYW1lIGV4dGVuc2lvbiBhbmQgaW52b2tlc1xuICAgODpcdCAqIGEgc3BlY2lmaWVkIHdyYXBwZXIuIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10X21pc2MuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmVkLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jdHlwZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzdHJ0b3guaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICAzMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAgMzI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gIDM0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2ZpbGUuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAzNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuICAzNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gIDM4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2hlbHBlcnMuaFx1MDAzZVxuICAzOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICA0MDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcdTAwM2VcbiAgNDE6XHRcbiAgNDI6XHQjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gIDQzOlx0XG4gIDQ0Olx0LyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqL1xuICA0NTpcdGVudW0gYmluZm10X21pc2NfZW50cnlfYml0cyB7XG4gIDQ2Olx0XHRNSVNDX0ZNVF9FTkFCTEVEX0JJVFx0PSAwLFxuICA0NzpcdFx0TUlTQ19GTVRfTUFHSUNfQklUXHQ9IDEsXG4gIDQ4Olx0XHRNSVNDX0ZNVF9CUEZfQklUXHQ9IDIsXG4gIDQ5Olx0fTtcbiAgNTA6XHRcbiAgNTE6XHQvKiBFbnRyeSBiZWhhdmlvciBmbGFncywgZml4ZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWUuICovXG4gIDUyOlx0ZW51bSBiaW5mbXRfbWlzY19lbnRyeV9mbGFncyB7XG4gIDUzOlx0XHRNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMFx0PSAoMVUgXHUwMDNjXHUwMDNjIDMxKSxcbiAgNTQ6XHRcdE1JU0NfRk1UX09QRU5fQklOQVJZXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMzApLFxuICA1NTpcdFx0TUlTQ19GTVRfQ1JFREVOVElBTFNcdD0gKDFVIFx1MDAzY1x1MDAzYyAyOSksXG4gIDU2Olx0XHRNSVNDX0ZNVF9PUEVOX0ZJTEVcdD0gKDFVIFx1MDAzY1x1MDAzYyAyOCksXG4gIDU3Olx0XHRNSVNDX0ZNVF9UUkFOU1BBUkVOVFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI3KSxcbiAgNTg6XHRcdE1JU0NfRk1UX0xPQURFUlx0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjYpLFxuICA1OTpcdFx0TUlTQ19GTVRfRElTQUJMRURcdD0gKDFVIFx1MDAzY1x1MDAzYyAyNSksXG4gIDYwOlx0fTtcbiAgNjE6XHRcbiAgNjI6XHQvKiBUaGUgZmxhZ3MgdGhhdCBzaGFwZSB0aGUgaW52b2NhdGlvbjsgYSAmIzM5O0ImIzM5OyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqL1xuICA2MzpcdCNkZWZpbmUgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUyAoTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgfFx0XFxcbiAgNjQ6XHRcdFx0XHRcdCAgIE1JU0NfRk1UX09QRU5fQklOQVJZIHxcdFxcXG4gIDY1Olx0XHRcdFx0XHQgICBNSVNDX0ZNVF9DUkVERU5USUFMUyB8XHRcXFxuICA2NjpcdFx0XHRcdFx0ICAgTUlTQ19GTVRfT1BFTl9GSUxFIHxcdFx0XFxcbiAgNjc6XHRcdFx0XHRcdCAgIE1JU0NfRk1UX1RSQU5TUEFSRU5UIHxcdFxcXG4gIDY4Olx0XHRcdFx0XHQgICBNSVNDX0ZNVF9MT0FERVIpXG4gIDY5Olx0XG4gIDcwOlx0LyoqXG4gIDcxOlx0ICogc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgLSBhIGZsYWcgY2hhcmFjdGVyIG9mIHRoZSByZWdpc3RlciBzdHJpbmdcbiAgNzI6XHQgKiBAYzogdGhlIGNoYXJhY3RlciB1c2Vyc3BhY2Ugd3JpdGVzIGFuZCByZWFkcyBiYWNrXG4gIDczOlx0ICogQGZsYWc6IHRoZSBlbnRyeSBmbGFnIGl0IHNldHNcbiAgNzQ6XHQgKiBAaW1wbGllczogZW50cnkgZmxhZ3MgaXQgdHVybnMgb24gaW4gYWRkaXRpb25cbiAgNzU6XHQgKiBAZGVzYzogd2hhdCBpdCBkb2VzLCBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBkZWJ1ZyBvdXRwdXRcbiAgNzY6XHQgKi9cbiAgNzc6XHRzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XG4gIDc4Olx0XHRjaGFyXHRcdGM7XG4gIDc5Olx0XHR1bnNpZ25lZCBsb25nXHRmbGFnO1xuICA4MDpcdFx0dW5zaWduZWQgbG9uZ1x0aW1wbGllcztcbiAgODE6XHRcdGNvbnN0IGNoYXJcdCpkZXNjO1xuICA4MjpcdH07XG4gIDgzOlx0XG4gIDg0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcbiAgODU6XHRcdHsgJiMzOTtQJiMzOTssIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwLFx0MCxcdFx0XHRcJiMzNDtwcmVzZXJ2ZSBhcmd2MFwmIzM0O1x0XHR9LFxuICA4NjpcdFx0eyAmIzM5O08mIzM5OywgTUlTQ19GTVRfT1BFTl9CSU5BUlksXHQwLFx0XHRcdFwmIzM0O29wZW4gYmluYXJ5XCYjMzQ7XHRcdFx0fSxcbiAgODc6XHRcdHsgJiMzOTtDJiMzOTssIE1JU0NfRk1UX0NSRURFTlRJQUxTLFx0TUlTQ19GTVRfT1BFTl9CSU5BUlksXHRcJiMzNDtjcmVkZW50aWFscyBmcm9tIHRoZSBiaW5hcnlcJiMzNDtcdH0sXG4gIDg4Olx0XHR7ICYjMzk7RiYjMzk7LCBNSVNDX0ZNVF9PUEVOX0ZJTEUsXHQwLFx0XHRcdFwmIzM0O29wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcJiMzNDtcdH0sXG4gIDg5Olx0XHR7ICYjMzk7VCYjMzk7LCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcdE1JU0NfRk1UX09QRU5fQklOQVJZLFx0XCYjMzQ7dHJhbnNwYXJlbnRcJiMzNDtcdFx0XHR9LFxuICA5MDpcdFx0eyAmIzM5O0wmIzM5OywgTUlTQ19GTVRfTE9BREVSLFx0XHQwLFx0XHRcdFwmIzM0O2xvYWRlciBzdWJzdGl0dXRpb25cJiMzNDtcdFx0fSxcbiAgOTE6XHRcdHsgJiMzOTtEJiMzOTssIE1JU0NfRk1UX0RJU0FCTEVELFx0MCxcdFx0XHRcJiMzNDtyZWdpc3RlciBkaXNhYmxlZFwmIzM0O1x0XHR9LFxuICA5MjpcdH07XG4gIDkzOlx0XG4gIDk0Olx0LyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXG4gIDk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpXG4gIDk2Olx0e1xuICA5NzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWlzY19mbGFncyk7IGkmIzQzOyYjNDM7KVxuICA5ODpcdFx0XHRpZiAobWlzY19mbGFnc1tpXS5jID09IGMpXG4gIDk5Olx0XHRcdFx0cmV0dXJuIFx1MDAyNm1pc2NfZmxhZ3NbaV07XG4gMTAwOlx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRvIHRoaXMuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBEaWdpdGFsIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGF0IGEgcG9pbnQgaW4gdGhpcyBwcm9jZXNzIHdoZXJlIEkmIzM5O3ZlIGFuYWx5emVkIGEgc3BlY2lmaWMgcGFydCwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiBteSBwZXJzcGVjdGl2ZS4gSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQsIGJ1dCB0byBiZSB0cnVseSB0aG9yb3VnaCwgSSBuZWVkIHRvIHpvb20gb3V0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZSYjMzQ7LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSYjMzk7bSBtZW50YWxseSBidWlsZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHNuaXBwZXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlLCB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIHRoZSB3aWRlciBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gVGhlcmUgY291bGQgYmUgY3JpdGljYWwgY29ubmVjdGlvbnMgYW5kIGltcGxpY2l0IGFzc3VtcHRpb25zLCBhbGwgb2Ygd2hpY2ggbWlnaHQgYmUgcmV2ZWFsZWQgdGhyb3VnaCBicm9hZGVyIGNvbnRleHQuIFNvLCBJJiMzOTtsbCBiZSBnb2luZyB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRvIHNlZSBob3cgdGhpcyBhcmVhIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz03Nz1zdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XG4tLVxuZnMvYmluZm10X21pc2MuYy04My1cbmZzL2JpbmZtdF9taXNjLmM6ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcbmZzL2JpbmZtdF9taXNjLmMtODUtXHR7ICYjMzk7UCYjMzk7LCBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCxcdDAsXHRcdFx0XCYjMzQ7cHJlc2VydmUgYXJndjBcJiMzNDtcdFx0fSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTk0LS8qIExvb2sgdXAgYSBmbGFnIGNoYXJhY3RlciwgTlVMTCBpZiBAYyBpcyBub3Qgb25lLiAqL1xuZnMvYmluZm10X21pc2MuYzo5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgKm1pc2NfZmxhZ19ieV9jaGFyKGNvbnN0IGNoYXIgYylcbmZzL2JpbmZtdF9taXNjLmMtOTYte1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQwPURFRklORV9TVEFUSUNfU1JDVV9GQVNUKGJtX2VudHJpZXNfc3JjdSk7XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDItLyogQ2hlY2sgaWYgQGUmIzM5O3MgbWFnaWMgbWF0Y2hlcyBAYnBybSYjMzk7cyBidWZmZXIsIGFwcGx5aW5nIHRoZSBtYXNrIGlmIHNldC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTQzOnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfbWFnaWMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xNDQtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTU4LS8qIENoZWNrIGlmIEBlJiMzOTtzIHJlZ2lzdGVyZWQgZXh0ZW5zaW9uIG1hdGNoZXMgQGV4dCwgTlVMTCBpZiB0aGVyZSBpcyBub25lLiAqL1xuZnMvYmluZm10X21pc2MuYzoxNTk6c3RhdGljIGJvb2wgZW50cnlfbWF0Y2hlc19leHRlbnNpb24oY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xNjAtXHRcdFx0XHQgICAgY29uc3QgY2hhciAqZXh0KVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTgxLSAqL1xuZnMvYmluZm10X21pc2MuYzoxODI6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqXG5mcy9iaW5mbXRfbWlzYy5jLTE4My1zZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMjMwLSAqL1xuZnMvYmluZm10X21pc2MuYzoyMzE6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbmZzL2JpbmZtdF9taXNjLmMtMjMyLVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MjQ2PWJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0yNTYtLyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqL1xuZnMvYmluZm10X21pc2MuYzoyNTc6c3RhdGljIHZvaWQgY2xvc2VfaW50ZXJwX2ZpbGUoc3RydWN0IGZpbGUgKmYpXG5mcy9iaW5mbXRfbWlzYy5jLTI1OC17XG4tLVxuZnMvYmluZm10X21pc2MuYz0yNjU9REVGSU5FX0ZSRUUoY2xvc2VfaW50ZXJwX2ZpbGUsIHN0cnVjdCBmaWxlICosIGNsb3NlX2ludGVycF9maWxlKF9UKSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTI3Mi0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MjczOnN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcbmZzL2JpbmZtdF9taXNjLmMtMjc0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTI4NC0vKiBSZWxlYXNlIHRoZSBpbnRlcnByZXRlcnMgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6Mjg1OnN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuZnMvYmluZm10X21pc2MuYy0yODYte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzEzLSAqL1xuZnMvYmluZm10X21pc2MuYzozMTQ6c3RhdGljIGludCBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0zMTUtXHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM1MS1cbmZzL2JpbmZtdF9taXNjLmM6MzUyOnN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuZnMvYmluZm10X21pc2MuYy0zNTMte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzcwLSAqL1xuZnMvYmluZm10X21pc2MuYzozNzE6c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtMzcyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTM4Mz1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzg1LS8qIERyb3AgZXZlcnl0aGluZyBhIGxvYWQgcHJvZ3JhbSBzdGFnZWQgZm9yIHRoaXMgZXhlYy4gKi9cbmZzL2JpbmZtdF9taXNjLmM6Mzg2OnN0YXRpYyB2b2lkIGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuZnMvYmluZm10X21pc2MuYy0zODcte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNDEwLSAqL1xuZnMvYmluZm10X21pc2MuYzo0MTE6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqY3VycmVudF9iaW5mbXRfbWlzYyh2b2lkKVxuZnMvYmluZm10X21pc2MuYy00MTIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNDM3LSAqL1xuZnMvYmluZm10X21pc2MuYzo0Mzg6c3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTQzOS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X21pc2MuYy00ODgtICovXG5mcy9iaW5mbXRfbWlzYy5jOjQ4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtNDkwLVx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTUyNy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NTI4OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTUyOS1cdFx0XHRcdFx0ICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTU3MC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NTcxOnN0YXRpYyBpbnQgYnVpbGRfaW50ZXJwX2FyZ3Yoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqaW50ZXJwcmV0ZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTU3Mi1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxuZnMvYmluZm10X21pc2MuYy02MjAtICovXG5mcy9iaW5mbXRfbWlzYy5jOjYyMTpzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2JpbmZtdF9taXNjLmMtNjIyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTcwMi0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NzAzOnN0YXRpYyBjaGFyICpzY2FuYXJnKGNoYXIgKnMsIGNoYXIgZGVsKVxuZnMvYmluZm10X21pc2MuYy03MDQte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNzIwLS8qIFBhcnNlIHRoZSAmIzM5O2ZsYWdzJiMzOTsgZmllbGQsIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBpcyBub3Qgb25lLiAqL1xuZnMvYmluZm10X21pc2MuYzo3MjE6c3RhdGljIGNoYXIgKmNoZWNrX3NwZWNpYWxfZmxhZ3MoY2hhciAqcCwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuZnMvYmluZm10X21pc2MuYy03MjIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNzMzLS8qIFBhcnNlIHRoZSAmIzM5O29mZnNldCYjMzk7LCAmIzM5O21hZ2ljJiMzOTsgYW5kICYjMzk7bWFzayYjMzk7IGZpZWxkcyBvZiBhbiAmIzM5O00mIzM5OyBlbnRyeS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6NzM0OnN0YXRpYyBjaGFyICpwYXJzZV9tYWdpY19maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcbmZzL2JpbmZtdF9taXNjLmMtNzM1LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTc5NC0vKiBQYXJzZSB0aGUgJiMzOTttYWdpYyYjMzk7IGZpZWxkIG9mIGFuICYjMzk7RSYjMzk7IGVudHJ5OiB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uLiAqL1xuZnMvYmluZm10X21pc2MuYzo3OTU6c3RhdGljIGNoYXIgKnBhcnNlX2V4dGVuc2lvbl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLFxuZnMvYmluZm10X21pc2MuYy03OTYtXHRcdFx0XHQgICAgY2hhciBkZWwpXG4tLVxuZnMvYmluZm10X21pc2MuYy04MjUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjgyNjpzdGF0aWMgY2hhciAqcGFyc2VfYnBmX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsIGNoYXIgZGVsKVxuZnMvYmluZm10X21pc2MuYy04Mjcte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtODQ3LSAqL1xuZnMvYmluZm10X21pc2MuYzo4NDg6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTg0OS1cdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTAwMT1lbnVtIGJtX2NvbW1hbmQge1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTAxNC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTAxNTpzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciAqcywgc2l6ZV90IGNvdW50KVxuZnMvYmluZm10X21pc2MuYy0xMDE2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwMzItLyogQ29weSBpbiBhIGNvbW1hbmQgZnJvbSBhIGZpbGUgdGhhdCB0YWtlcyBub3RoaW5nIGVsc2UsIGFuZCBwYXJzZSBpdC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTAzMzpzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXG5mcy9iaW5mbXRfbWlzYy5jLTEwMzQte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTA0Ni0vKiBUaGUgcm9vdCBkaXJlY3RvcnkmIzM5O3MgaW5vZGU7IGl0cyBsb2NrIHNlcmlhbGl6ZXMgY29uZmlndXJpbmcgYW4gaW5zdGFuY2UuICovXG5mcy9iaW5mbXRfbWlzYy5jOjEwNDc6c3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xMDQ4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTEtXG5mcy9iaW5mbXRfbWlzYy5jOjEwNTI6c3RhdGljIHZvaWQgYm1fc2VxX2hleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHU4ICpkYXRhLCBpbnQgc2l6ZSlcbmZzL2JpbmZtdF9taXNjLmMtMTA1My17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDU3LVxuZnMvYmluZm10X21pc2MuYzoxMDU4OnN0YXRpYyBpbnQgYm1fZW50cnlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZClcbmZzL2JpbmZtdF9taXNjLmMtMTA1OS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMTA3LVxuZnMvYmluZm10X21pc2MuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bW9kZV90IG1vZGUpXG5mcy9iaW5mbXRfbWlzYy5jLTExMDkte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTEzMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTEzMTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICppX2JpbmZtdF9taXNjKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9iaW5mbXRfbWlzYy5jLTExMzIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTE0OC0qL1xuZnMvYmluZm10X21pc2MuYzoxMTQ5OnN0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9iaW5mbXRfbWlzYy5jLTExNTAte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTE3OC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTE3OTpzdGF0aWMgdm9pZCB1bmxpbmtfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuZnMvYmluZm10X21pc2MuYy0xMTgwLVx0XHRcdFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMTk0LSAqL1xuZnMvYmluZm10X21pc2MuYzoxMTk1OnN0YXRpYyB2b2lkIHJlbW92ZV9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG5mcy9iaW5mbXRfbWlzYy5jLTExOTYtXHRcdFx0XHQgIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyMDItLyogUmVtb3ZlIEBlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLiAqL1xuZnMvYmluZm10X21pc2MuYzoxMjAzOnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9iaW5mbXRfbWlzYy5jLTEyMDQte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTIxNC0vKiBSZW1vdmUgYWxsIGVudHJpZXMgb2YgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIEBtaXNjIGJlbG9uZ2luZyB0byBAc2IuICovXG5mcy9iaW5mbXRfbWlzYy5jOjEyMTU6c3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbmZzL2JpbmZtdF9taXNjLmMtMTIxNi1cdFx0XHRcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyNDUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjEyNDY6c3RhdGljIGludCBibV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2JpbmZtdF9taXNjLmMtMTI0Ny17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjU2LVxuZnMvYmluZm10X21pc2MuYzoxMjU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBibV9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTI1OC1cdC5sb29rdXBcdFx0PSBzaW1wbGVfbG9va3VwLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTI2My1cbmZzL2JpbmZtdF9taXNjLmM6MTI2NDpzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9iaW5mbXRfbWlzYy5jLTEyNjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTMwMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTMwMTpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMTMwMi1cdFx0XHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjEtXG5mcy9iaW5mbXRfbWlzYy5jOjEzNjI6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjMtXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTktXG5mcy9iaW5mbXRfbWlzYy5jOjE0MjA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fZW50cnlfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTQyMS1cdC5vcGVuXHRcdD0gYm1fZW50cnlfb3Blbixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0MzAtLyogYWRkIHRvIGZpbGVzeXN0ZW0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTQzMTpzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9iaW5mbXRfbWlzYy5jLTE0MzIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2MS1cbmZzL2JpbmZtdF9taXNjLmM6MTQ2MjpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTQ2My1cdFx0XHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTAyLVxuZnMvYmluZm10X21pc2MuYzoxNTAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE1MDQtXHQud3JpdGVcdFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1MDktXG5mcy9iaW5mbXRfbWlzYy5jOjE1MTA6c3RhdGljIHNzaXplX3RcbmZzL2JpbmZtdF9taXNjLmMtMTUxMS1ibV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTUyMC1cbmZzL2JpbmZtdF9taXNjLmM6MTUyMTpzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTE1MjItXHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTU0NC1cbmZzL2JpbmZtdF9taXNjLmM6MTU0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9zdGF0dXNfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTU0Ni1cdC5yZWFkXHRcdD0gYm1fc3RhdHVzX3JlYWQsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTUyLVxuZnMvYmluZm10X21pc2MuYzoxNTUzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBibV9zdXBlcl9vcHMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE1NTQtXHQuc3RhdGZzXHRcdD0gc2ltcGxlX3N0YXRmcyxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTctXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTg6c3RhdGljIGludCBibV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2JpbmZtdF9taXNjLmMtMTU1OS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjMwLVxuZnMvYmluZm10X21pc2MuYzoxNjMxOnN0YXRpYyB2b2lkIGJtX2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYmluZm10X21pc2MuYy0xNjMyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2MzYtXG5mcy9iaW5mbXRfbWlzYy5jOjE2Mzc6c3RhdGljIGludCBibV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9iaW5mbXRfbWlzYy5jLTE2Mzgte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTY0MS1cbmZzL2JpbmZtdF9taXNjLmM6MTY0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBibV9jb250ZXh0X29wcyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTY0My1cdC5mcmVlXHRcdD0gYm1fZnJlZSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDYtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NDc6c3RhdGljIHZvaWQgYm1fa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xNjQ4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NTQtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NTU6c3RhdGljIGludCBibV9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYmluZm10X21pc2MuYy0xNjU2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjAtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NjE6c3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgbWlzY19mb3JtYXQgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE2NjItXHQubW9kdWxlID0gVEhJU19NT0RVTEUsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjY1LVxuZnMvYmluZm10X21pc2MuYzoxNjY2OnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBibV9mc190eXBlID0ge1xuZnMvYmluZm10X21pc2MuYy0xNjY3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxuZnMvYmluZm10X21pc2MuYz0xNjczPU1PRFVMRV9BTElBU19GUyhcJiMzNDtiaW5mbXRfbWlzY1wmIzM0Oyk7XG5mcy9iaW5mbXRfbWlzYy5jLTE2NzQtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NzU6c3RhdGljIGludCBfX2luaXQgaW5pdF9taXNjX2JpbmZtdCh2b2lkKVxuZnMvYmluZm10X21pc2MuYy0xNjc2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2ODItXG5mcy9iaW5mbXRfbWlzYy5jOjE2ODM6c3RhdGljIHZvaWQgX19leGl0IGV4aXRfbWlzY19iaW5mbXQodm9pZClcbmZzL2JpbmZtdF9taXNjLmMtMTY4NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjI0CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDg5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJpbkZtdCBNaXNjIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIHdvdWxkIG1ha2UgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB0aG9zZSBhcmUgdGhlIG1vc3Qgc3RhYmxlIGFuZCBlYXNpbHkgYWNjZXNzaWJsZSBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIEluaXRpYWxseSwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCBjYXVnaHQgbXkgZXllLCBidXQgaXQmIzM5O3Mgbm90IGEgdHJ1ZSBBUEkgZW50cnkgcG9pbnQuIFRoZW4gSSBub3RpY2VkIHRoYXQgYGxvYWRfbWlzY19iaW5hcnlgICppcyogc3RhdGljLCBidXQgaXMgYXNzaWduZWQgdG8gYG1pc2NfZm9ybWF0LmxvYWRfYmluYXJ5YC4gU2ltaWxhcmx5LCBJIHNhdyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFzc2lnbmVkIHRvIGBibV9yZWdpc3Rlcl9vcGVyYXRpb25zLndyaXRlYCwgYGJtX2VudHJ5X3dyaXRlYCBhc3NpZ25lZCB0byBgYm1fZW50cnlfb3BlcmF0aW9ucy53cml0ZWAsIGFuZCBgYm1fZXZpY3RfaW5vZGVgIGFzc2lnbmVkIHRvIGBibV9zdXBlcl9vcHMuZXZpY3RfaW5vZGVgLiBUaGVzZSBhc3NpZ25tZW50cywgc3BlY2lmaWNhbGx5IHRvIHRoZSBmdW5jdGlvbiBwb2ludGVycywgbWFkZSBtZSByZWFsaXplIHRoZXNlIGFyZSBpbmRlZWQgdGhlIHJpZ2h0IHBsYWNlcyB0byBmb2N1cy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgbW9yZSBjbG9zZWx5LCBpdCBzZWVtcyB0aGF0IGBsb2FkX21pc2NfYmluYXJ5YCBkb2VzbiYjMzk7dCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCwgbWVhbmluZyBpdCYjMzk7cyBsZXNzIHJlbGV2YW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBhbmQgYGVudHJ5X3B1dF9pbnRlcnByZXRlcnNgLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBpcyBjYWxsZWQgYnkgYGJtX2VudHJ5X2FkZF9pbnRlcnBgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCB3aGVyZSBgYm1fZW50cnlfYWRkX2ludGVycGAgaXMgY2FsbGVkIGJ5IGBibV9lbnRyeV93cml0ZWAuICBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgaXMgY2FsbGVkIGJ5IGBwdXRfYmluZm10X2hhbmRsZXJgLCB3aGljaCBpcyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnMsIGluY2x1ZGluZyBgYm1fZW50cnlfZnJlZV9yY3VgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBjcmVhdGVfZW50cnlgLCBgYm1fZXZpY3RfaW5vZGVgLCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYC4KCkFmdGVyIHRoaXMsIEkgcmUtZXZhbHVhdGVkIGFuZCBkZWNpZGVkIHRoYXQgYGJtX3JlZ2lzdGVyX3dyaXRlYCwgYGJtX2VudHJ5X3dyaXRlYCwgYW5kIGBibV9ldmljdF9pbm9kZWAgYXJlIHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMsIGhvd2V2ZXIsIHNpbmNlIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIGBibV9lbnRyeV93cml0ZWAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9udG8gdGhlIGNvbmZpZ3VyYXRpb25zLiAgSSBjaGVja2VkIGZvciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgaWRlbnRpZmllZCBgQ09ORklHX0JJTkZNVF9NSVNDYCBhbmQgYENPTkZJR19VU0VSX05TYC4gSG93ZXZlciwgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1VTRVJfTlNgIGFuZCBkaXNjb3ZlcmluZyBpdCBkZXBlbmRzIG9uIGBNVUxUSVVTRVJgIGFuZCBgTkFNRVNQQUNFU2AgYW5kIHNpbmNlIGBVU0VSX05TYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gc3l6a2FsbGVyLCBJIHdpbGwganVzdCBsaXN0IGBCSU5GTVRfTUlTQ2AgYW5kIGBVU0VSX05TYC4KCkRvdWJsZS1jaGVja2luZyBgZnMvS2NvbmZpZy5iaW5mbXRgIGZvciBgQklORk1UX01JU0NgIGNvbmZpcm1lZCBpdCBoYXMgbm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMuICBSZXZpZXdpbmcgYGtlcm5lbC91Y291bnQuY2AgZm9yIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCBzb2xpZGlmaWVzIHRoYXQgYEJJTkZNVF9NSVNDYCBpcyB0aGUgb25seSB0cnVseSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi4KCkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHk6IGl0JiMzOTtzIGFkZGluZyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCwgdXNpbmcgYGluY191Y291bnRgIGFuZCBgZGVjX3Vjb3VudGAgZm9yIHRoZSBjb3VudC4gVGhlIGxpbWl0IGl0c2VsZiBpcyBzZXQgdmlhIGAvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYC4gVGhlIHBhdGNoIHRvdWNoZXMgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgdG8gY2hhcmdlIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCB3b3J0aCBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6Ci0gYGJtX3JlZ2lzdGVyX3dyaXRlYAotIGBibV9lbnRyeV93cml0ZWAKLSBgYm1fZXZpY3RfaW5vZGVgCgpBbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOgotIGBCSU5GTVRfTUlTQ2AKLSBgVVNFUl9OU2AKClRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9ldmljdF9pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBsaW1pdCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBpbiBgYmluZm10X21pc2NgIHVzaW5nIGB1Y291bnRzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBhbmQgYGJpbmZtdF9taXNjYCBmaWxlc3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAoaW4gYSB1c2VyIG5hbWVzcGFjZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgb2YgYGJpbmZtdF9taXNjYCBlbnRyaWVzIHRvIHRlc3QgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIG9mIHRoZSBidWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9ldmljdF9pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBsaW1pdCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBpbiBgYmluZm10X21pc2NgIHVzaW5nIGB1Y291bnRzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBhbmQgYGJpbmZtdF9taXNjYCBmaWxlc3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAoaW4gYSB1c2VyIG5hbWVzcGFjZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgb2YgYGJpbmZtdF9taXNjYCBlbnRyaWVzIHRvIHRlc3QgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIG9mIHRoZSBidWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Njo0OS4yMDIyMDQ4MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzAwNjYzMzE2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICAgIFwiYm1fZW50cnlfd3JpdGVcIixcbiAgICBcImJtX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgbGltaXQgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCB1c2luZyBgdWNvdW50c2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgYW5kIGBiaW5mbXRfbWlzY2AgZmlsZXN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB1bnByaXZpbGVnZWQgdXNlcnMgKGluIGEgdXNlciBuYW1lc3BhY2UpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZW1vdmFsIG9mIGBiaW5mbXRfbWlzY2AgZW50cmllcyB0byB0ZXN0IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiB0aGUgYnVkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Njo0OS4yMDIyMTExMTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODUyNzU5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYmU4NTNlM2M5M2M4YzE5ZGUyYWUyMzc1ZmE3NjdlYjViZDM1NjY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTQ6NDY6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbmluZGV4IDYyMmI1ZDhjODk5NTcuLmQyNmI2M2EyN2MyNTkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbkBAIC0xMjgsNiArMTI4LDExIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcXG4gICAgbmFtZWQgYnkgYW4gYWJzb2x1dGUgcGF0aC4gSXQgaXMgb3BlbmVkIHdoZW4gdGhlIGJpbmFyeSBpcyBleGVjdXRlZCwgc29cXG4gICAgYSByZWxhdGl2ZSBvbmUgd291bGQgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2ZcXG4gICAgd2hvZXZlciBydW5zIHRoZSBiaW5hcnlcXG4rIC0gdGhlIGFtb3VudCBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBieSBgYEZgYCwgb3IgYm91bmQgdG8gYSBgYEJgYCBlbnRyeVxcbisgICBpcyBsaW1pdGVkIGJ5IHRoZSBgYC9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBzeXNjdGwuIEFcXG4rICAgcmVnaXN0cmF0aW9uIHBhc3QgdGhlIGxpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC4gVGhpcyBsaW1pdHMgYW5cXG4rICAgdW5wcml2aWxlZ2VkIG5hbWVzcGFjZSBwaW5uaW5nIGZpbGVzLiBBIG5lc3RlZCBuYW1lc3BhY2UgY2FuIHJhaXNlIG9ubHkgaXRzXFxuKyAgIG93biBsaW1pdCBhbmQgZXZlcnkgYW5jZXN0b3IgaXMgY2hhcmdlZCB0b29cXG4gXFxuIFxcbiBUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aFxcbkBAIC0yMTUsMTAgKzIyMCw5IEBAIHdpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXFxuIHByZS1vcGVucyBhIHN0YXRpYyBlbnRyeSdzIGludGVycHJldGVyOyB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS4gVGhlXFxuIHBhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZSwgc28gdGhlcmUgaXMgbm90aGluZyBpdCBjYW5ub3RcXG4gZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XFxuLWJpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVyczsgYSB3cml0ZSBwYXN0IHRoYXQgaXMgcmVmdXNlZCB3aXRoXFxuLWBgLUVOT1NQQ2BgLiBUbyBiaW5kIGEgZmlsZSB0aGF0IGhhcyBubyBwYXRoIG9mIGl0cyBvd24gLSBhbHJlYWR5XFxuLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxcbi1vcGVuIGl0IGFuZCB3cml0ZSBgYC9wcm9jL3NlbGYvZmQvTmBgLlxcbitiaW5kcyBhdCBtb3N0IDEwMCBpbnRlcnByZXRlcnMsIGFuZCBlYWNoIG9uZSBpcyBjaGFyZ2VkIGFnYWluc3RcXG4rYGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYGAgbGlrZSBhbnkgb3RoZXIgYmluZGluZy4gQSB3cml0ZSBwYXN0IGVpdGhlclxcbitsaW1pdCBpcyByZWZ1c2VkIHdpdGggYGAtRU5PU1BDYGAuXFxuIFxcbiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcXG4gYGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWBgIGtmdW5jLCBhbmQgZXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgdGhlXFxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXFxuaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDRcXG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXFxuKysrIGIvZnMvYmluZm10X21pc2MuY1xcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRlcnAsIHRtcCwgXFx1MDAyNmUtXFx1MDAzZWludGVycHMsIGxpc3QpIHtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmludGVycC1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdGNsb3NlX2ludGVycF9maWxlKGludGVycC1cXHUwMDNlZmlsZSk7XFxuK1xcdFxcdGRlY191Y291bnQoaW50ZXJwLVxcdTAwM2V1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcXG4gXFx0XFx0a2ZyZWUoaW50ZXJwKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTMwNyw3ICszMDgsOCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4gICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlXFxuICAqIGNhbm5vdCBiZSBtYXRjaGVkIHlldCwgYW5kIG93bnMgQGYgdW50aWwgdGhpcyBzdWNjZWVkcy5cXG4gICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGUgZW50cnkgaXMgZnVsbCBvciB0aGUgYmluZGVyIGlzIG91dCBvZlxcbisgKiAgICAgICAgIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYnVkZ2V0LCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcXG4gICovXFxuIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4gXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXFxuQEAgLTMxNSwyMiArMzE3LDMyIEBAIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4ge1xcbiBcXHRzaXplX3QgbmxlbiA9IHN0cmxlbihuYW1lKSwgcGxlbiA9IHN0cmxlbihwYXRoKTtcXG4gXFx0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xcbitcXHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcXG4gXFxuIFxcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcywgbmFtZSkpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRpZiAobGlzdF9jb3VudF9ub2RlcyhcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcykgXFx1MDAzZT0gQklORk1UX01JU0NfSU5URVJQX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbitcXHQvKiBUaGUgYmluZGluZyBrZWVwcyBhIGZpbGUgb3Blbiwgc28gY2hhcmdlIGl0IHRvIHdob2V2ZXIgYmluZHMgaXQuICovXFxuK1xcdHVjb3VudHMgPSBpbmNfdWNvdW50KGN1cnJlbnRfdXNlcl9ucygpLCBjdXJyZW50X2V1aWQoKSxcXG4rXFx0XFx0XFx0ICAgICBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcXG4rXFx0aWYgKCF1Y291bnRzKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFxuIFxcdC8qIE9uZSBhbGxvY2F0aW9uLCBib3RoIHN0cmluZ3MgaW4gaXQsIGxpa2UgdGhlIGVudHJ5J3Mgb3duIGJ1ZmZlci4gKi9cXG4gXFx0aW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gKyBwbGVuICsgMiksXFxuIFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi1cXHRpZiAoIWludGVycClcXG4rXFx0aWYgKCFpbnRlcnApIHtcXG4rXFx0XFx0ZGVjX3Vjb3VudCh1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdGludGVycC1cXHUwMDNlcGF0aCA9IGludGVycC1cXHUwMDNlbmFtZSArIG5sZW4gKyAxO1xcbiBcXHRzdHJzY3B5KGludGVycC1cXHUwMDNlbmFtZSwgbmFtZSwgbmxlbiArIDEpO1xcbiBcXHRzdHJzY3B5KGludGVycC1cXHUwMDNlbmFtZSArIG5sZW4gKyAxLCBwYXRoLCBwbGVuICsgMSk7XFxuIFxcdGludGVycC1cXHUwMDNlZmlsZSA9IGY7XFxuK1xcdGludGVycC1cXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XFxuIFxcdC8qIFB1Ymxpc2ggdGhlIG5vZGU6IGEgbG9ja2xlc3MgY2F0IG1heSBiZSB3YWxraW5nIHRoZSBsaXN0LiAqL1xcbiBcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2aW50ZXJwLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcyk7XFxuIFxcdHByX2RlYnVnKFxcXCJyZWdpc3RlcjogaW50ZXJwcmV0ZXI6ICVzIHslc31cXFxcblxcXCIsIG5hbWUsIHBhdGgpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5pbmRleCAwNzJlNGIzZGQ3OGQyLi44MDQ1YjEwZGQzZTVjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbkBAIC03LDYgKzcsNyBAQFxcbiBzdHJ1Y3QgYnBmX3Byb2c7XFxuIHN0cnVjdCBmaWxlO1xcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xcbitzdHJ1Y3QgdWNvdW50cztcXG4gc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbiBcXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcXG5AQCAtMjEsNiArMjIsNyBAQCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XFxuICAqIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgLSBhbiBpbnRlcnByZXRlciBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXFxuICAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSdzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxcbiAgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXFxuKyAqIEB1Y291bnRzOiB0aGUgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyBjaGFyZ2UgdGhlIGJpbmRpbmcgdG9va1xcbiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyXFxuICAqICAgICAgICBydW5zIHVuZGVyOyBzdG9yZWQgYWZ0ZXIgQG5hbWUgaW4gdGhlIHNhbWUgYWxsb2NhdGlvblxcbiAgKiBAbmFtZTogdGhlIG5hbWUgdGhlIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkXFxuQEAgLTMzLDYgKzM1LDcgQEAgc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIFxcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGU7XFxuK1xcdHN0cnVjdCB1Y291bnRzXFx0XFx0KnVjb3VudHM7XFxuIFxcdGNvbnN0IGNoYXJcXHRcXHQqcGF0aDtcXG4gXFx0Y2hhclxcdFxcdFxcdG5hbWVbXTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXFxuaW5kZXggOWMzYmUxNTczOTdlMC4uZTM4ZDllNjA1NjlmMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXG5AQCAtNTcsNiArNTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHtcXG4gI2lmZGVmIENPTkZJR19GQU5PVElGWVxcbiBcXHRVQ09VTlRfRkFOT1RJRllfR1JPVVBTLFxcbiBcXHRVQ09VTlRfRkFOT1RJRllfTUFSS1MsXFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpXFxuK1xcdFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsXFxuICNlbmRpZlxcbiBcXHRVQ09VTlRfQ09VTlRTLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvdWNvdW50LmMgYi9rZXJuZWwvdWNvdW50LmNcXG5pbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC91Y291bnQuY1xcbisrKyBiL2tlcm5lbC91Y291bnQuY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbkBAIC04OSw2ICs5MCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVzZXJfdGFibGVbXSA9IHtcXG4gXFx0VUNPVU5UX0VOVFJZKFxcXCJtYXhfZmFub3RpZnlfZ3JvdXBzXFxcIiksXFxuIFxcdFVDT1VOVF9FTlRSWShcXFwibWF4X2Zhbm90aWZ5X21hcmtzXFxcIiksXFxuICNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpXFxuK1xcdFVDT1VOVF9FTlRSWShcXFwibWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1xcXCIpLFxcbisjZW5kaWZcXG4gfTtcXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cXG4gXFxuQEAgLTIzMyw2ICsyMzcsNyBAQCBzdHJ1Y3QgdWNvdW50cyAqaW5jX3Vjb3VudChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBrdWlkX3QgdWlkLFxcbiBcXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhpbmNfdWNvdW50LCBcXFwiYmluZm10X21pc2NcXFwiKTtcXG4gXFxuIHZvaWQgZGVjX3Vjb3VudChzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSB1Y291bnRfdHlwZSB0eXBlKVxcbiB7XFxuQEAgLTI0Myw2ICsyNDgsNyBAQCB2b2lkIGRlY191Y291bnQoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gdWNvdW50X3R5cGUgdHlwZSlcXG4gXFx0fVxcbiBcXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGRlY191Y291bnQsIFxcXCJiaW5mbXRfbWlzY1xcXCIpO1xcbiBcXG4gbG9uZyBpbmNfcmxpbWl0X3Vjb3VudHMoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gcmxpbWl0X3R5cGUgdHlwZSwgbG9uZyB2KVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZVxcbmluZGV4IGZiYmIxNjAwZGRiOTQuLmU0MmVjZDRjOTA4ZDEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXFxuQEAgLTIwLDYgKzIwLDcgQEAgeHh4eHh4eHgqXFxuIHBpcGVcXG4gU19JKi50ZXN0XFxuIGJpbmZtdF9taXNjX2JwZlxcbitiaW5mbXRfbWlzY19pbnRlcnBsaW1pdFxcbiBiaW5mbXRfYnBmX2ludGVycFxcbiBiaW5mbXRfYnBmX2FwcFxcbiBiaW5mbXRfbWlzY190cmFuc3BhcmVudFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbmluZGV4IDQxMGM5MzYwNmEwYzMuLmI2NDBhZjhmMDJiNTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcXG5AQCAtMjUsNiArMjUsMTAgQEAgVEVTVF9HRU5fUFJPR1MgKz0gY2hlY2stZXhlY1xcbiAjIG9yIGFuICdGJyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19zZWxmcGluXFxuIFxcbisjIFRoZSBpbnRlcnByZXRlcnMgYW4gJ0YnIG9yICdCJyBlbnRyeSBwcmUtb3BlbnMgYXJlIGNoYXJnZWQgYWdhaW5zdFxcbisjIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxcbitURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19pbnRlcnBsaW1pdFxcbitcXG4gIyAnRCcgKHJlZ2lzdGVyIGRpc2FibGVkKSBiaW5mbXRfbWlzYyB0ZXN0OiBhbiBlbnRyeSB0aGF0IGV4aXN0cyBidXQgZG9lc1xcbiAjIG5vdCBkaXNwYXRjaCB1bnRpbCBpdCBpcyBlbmFibGVkLiBTdGF0aWMgbWFnaWMgZW50cnksIG5vIGJwZiB0b29sY2hhaW4uXFxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2Rpc2FibGVkXFxuQEAgLTEwNCw2ICsxMDgsOCBAQCAkKE9VVFBVVCkvc2NyaXB0LW5vZXhlYy5pbmM6ICQoQ0hFQ0tfRVhFQ19TQU1QTEVTKS9zY3JpcHQtbm9leGVjLmluY1xcbiAjIENGTEFHUyBmb3IgZXZlcnkgcHJvZ3JhbSBpbiB0aGlzIGRpcmVjdG9yeS5cXG4gJChPVVRQVVQpL2JpbmZtdF9taXNjX3NlbGZwaW46IENGTEFHUyArPSAkKFRPT0xTX0lOQ0xVREVTKVxcbiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogLi4vZmlsZXN5c3RlbXMvdXRpbHMuY1xcbiskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IENGTEFHUyArPSAkKFRPT0xTX0lOQ0xVREVTKVxcbiskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmNcXG4gXFxuICMgLS0tIGJpbmZtdF9taXNjIGJwZiAoJ0InKSBoYW5kbGVyIHRlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICMgVGhlIHN0cnVjdF9vcHMgYnBmIG9iamVjdHMgYXJlIGNvbXBpbGVkIGFnYWluc3QgdGhlIHJ1bm5pbmcga2VybmVsJ3MgQlRGLlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xcbmluZGV4IDJjN2I2MzA3NWYxZDkuLmIyYTQ1MTg5MDFiMGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcXG5AQCAtMzgsNiArMzgsNyBAQFxcbiAjZGVmaW5lIF9HTlVfU09VUkNFXFxuICNpbmNsdWRlIFxcdTAwM2NlbGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbkBAIC02NSw2ICs2Niw5IEBAXFxuICNkZWZpbmUgQklORF9SSVNDVl9QQVRIXFx0XFxcIi90bXAvYmluZm10X2JpbmRfcmlzY3ZcXFwiXFxuICNkZWZpbmUgQklORF9FWFBFQ1RcXHRcXFwiQklORF9SQU4gXFxcIlxcbiAjZGVmaW5lIEJJTkRfTUFYXFx0MTAwXFxuKyNkZWZpbmUgSU5URVJQX0xJTUlUXFx0XFxcIi9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNcXFwiXFxuKy8qIEV4aXQgc3RhdHVzIG9mIHRoZSBiaW5kaW5nIGNoaWxkIHdoZW4gaXQgY2Fubm90IHNldCB1cCBhIGJ1ZGdldCBvZiBpdHMgb3duLiAqL1xcbisjZGVmaW5lIEJJTkRfTk9fQlVER0VUXFx0MjAwXFxuIFxcbiAvKiBBIG1pbmltYWwgNjQtYml0IGxpdHRsZS1lbmRpYW4gRUxGIGhlYWRlciwgcGFkZGVkIHRvIHRoZSByZWFkIHNpemUuICovXFxuIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpXFxuQEAgLTM3OCw2ICszODIsNTcgQEAgc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxcbiBcXHRyZXR1cm4gZW50cnlfY29tbWFuZChlbnRyeSwgY21kKTtcXG4gfVxcbiBcXG4rLyogU2V0IHRoZSBpbnRlcnByZXRlciBidWRnZXQgb2YgdGhpcyBuYW1lc3BhY2UuICovXFxuK3N0YXRpYyBpbnQgd3JpdGVfaW50ZXJwX2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcXG4re1xcbitcXHRzc2l6ZV90IG47XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihJTlRFUlBfTElNSVQsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRuID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiBuIFxcdTAwM2MgMCA/IC0xIDogMDtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIGVycm5vIGEgYmluZCBpcyByZWZ1c2VkIHdpdGggd2hlbiB0aGUgd3JpdGVyIGlzIGEgY2hpbGQgdGhhdCBoYXMgc3BlbnRcXG4rICogdGhlIGJ1ZGdldCBvZiBhIHVzZXIgbmFtZXNwYWNlIG9mIGl0cyBvd24sIDAgaWYgaXQgc3VjY2VlZGVkIGFuZCAtMSBpZiB0aGVcXG4rICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGVcXG4rICogaW50ZXJwcmV0ZXIgaXMgc3RpbGwgb3BlbmVkIHdpdGggdGhpcyBwcm9jZXNzJ3MgY3JlZGVudGlhbHMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGJpbmRfb3V0X29mX2J1ZGdldChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRjaGFyIGNtZFtQQVRIX01BWF0sIGZpbGVbUEFUSF9NQVhdO1xcbitcXHRpbnQgZmQsIHN0YXR1cywgcmV0dmFsO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksIEJJTkZNVF9ESVIgXFxcIi8lc1xcXCIsIGVudHJ5KTtcXG4rXFx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXFxcIislcyAlc1xcXFxuXFxcIiwgbmFtZSwgcGF0aCk7XFxuK1xcbitcXHRmZCA9IG9wZW4oZmlsZSwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRcXHQvKiBBIG5hbWVzcGFjZSBvZiBpdHMgb3duLCB3aXRoIG5vdGhpbmcgbGVmdCBpbiBpdCB0byBzcGVuZC4gKi9cXG4rXFx0XFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikgfHwgd3JpdGVfaW50ZXJwX2xpbWl0KFxcXCIwXFxcIikpXFxuK1xcdFxcdFxcdF9leGl0KEJJTkRfTk9fQlVER0VUKTtcXG4rXFx0XFx0biA9IHdyaXRlKGZkLCBjbWQsIHN0cmxlbihjbWQpKTtcXG4rXFx0XFx0X2V4aXQobiBcXHUwMDNjIDAgPyBlcnJubyA6IDApO1xcbitcXHR9XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dmFsID0gV0VYSVRTVEFUVVMoc3RhdHVzKTtcXG4rXFx0cmV0dXJuIHJldHZhbCA9PSBCSU5EX05PX0JVREdFVCA/IC0xIDogcmV0dmFsO1xcbit9XFxuK1xcbiBGSVhUVVJFKGJvdW5kX2ludGVycCkge1xcbiBcXHRjaGFyIG9ialtQQVRIX01BWF07XFxuIFxcdHN0cnVjdCBicGZfY2FzZSBjO1xcbkBAIC01NjUsNCArNjIwLDE5IEBAIFRFU1RfRihib3VuZF9pbnRlcnAsIGNhcHBlZF9iaW5kaW5ncylcXG4gXFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLCBcXFwib3ZlclxcXCIsIEJJTkRfRklSU1QpLCAtRU5PU1BDKTtcXG4gfVxcbiBcXG4rLyogQSBiaW5kaW5nIHBpbnMgYSBmaWxlOiBpdCBpcyBjaGFyZ2VkLCBhbmQgcmVmdXNlZCBvbmNlIHRoZSBidWRnZXQgaXMgb3V0LiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBiaW5kaW5nc19hcmVfY2hhcmdlZClcXG4re1xcbitcXHRpbnQgZXJyID0gYmluZF9vdXRfb2ZfYnVkZ2V0KFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcInRoaXJkXFxcIiwgQklORF9GSVJTVCk7XFxuK1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyB1c2VyIG5hbWVzcGFjZXMgb3Igbm8gXFxcIiBJTlRFUlBfTElNSVQpO1xcbitcXG4rXFx0LyogVGhlIGNoYXJnZSBmb2xsb3dzIHRoZSB3cml0ZXIsIG5vdCB0aGUgZW50cnkgZmlsZSBpdCB3cml0ZXMgdG8uICovXFxuK1xcdEVYUEVDVF9FUShlcnIsIEVOT1NQQyk7XFxuK1xcbitcXHQvKiBUaGUgYnVkZ2V0IHdhcyB0aGUgb25seSB0aGluZyBpbiB0aGUgd2F5LiAqL1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsIFxcXCJ0aGlyZFxcXCIsIEJJTkRfRklSU1QpLCAwKTtcXG4rfVxcbitcXG4gVEVTVF9IQVJORVNTX01BSU5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iZjYxMWM1NTE3ODQyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuY1xcbkBAIC0wLDAgKzEsMjMyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIEEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciAtIHdoYXQgJ0YnIGdpdmVzIGEgc3RhdGljIGVudHJ5IGFuZCB3aGF0IGEgJ0InXFxuKyAqIGVudHJ5IGJpbmRzIC0ga2VlcHMgYSBmaWxlIG9wZW4gZm9yIGFzIGxvbmcgYXMgdGhlIGVudHJ5IGxpdmVzLCBzbyBpdCBwaW5zXFxuKyAqIHRoZSBtb3VudCBpdCBjYW1lIGZyb20uIEl0IGNvc3RzIG5vIGZpbGUgZGVzY3JpcHRvciwgYW5kIGJpbmZtdF9taXNjIGlzXFxuKyAqIEZTX1VTRVJOU19NT1VOVCwgc28gYW4gdW5wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlIGNhbiBjcmVhdGUgdGhlbSB3aXRob3V0XFxuKyAqIGJvdW5kLiBDaGVjayB0aGF0IFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYm91bmRzIGl0LCB0aGF0IGFuIGVudHJ5XFxuKyAqIHRoYXQgcHJlLW9wZW5zIG5vdGhpbmcgaXMgbm90IGNoYXJnZWQsIHRoYXQgcmVtb3ZpbmcgYW4gZW50cnkgZ2l2ZXMgdGhlXFxuKyAqIGNoYXJnZSBiYWNrLCBhbmQgdGhhdCBuZXN0aW5nIGEgdXNlciBuYW1lc3BhY2UgZG9lcyBub3QgZXZhZGUgaXQuXFxuKyAqXFxuKyAqIFJ1bnMgdW5wcml2aWxlZ2VkIGluIGEgdXNlciBuYW1lc3BhY2UuXFxuKyAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21vdW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vZmlsZXN5c3RlbXMvdXRpbHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjZGVmaW5lIE1OVFxcdFxcdFxcXCIvdG1wL2JpbmZtdF9pbnRlcnBsaW1pdFxcXCJcXG4rI2RlZmluZSBORVNURURfTU5UXFx0XFxcIi90bXAvYmluZm10X2ludGVycGxpbWl0X25lc3RlZFxcXCJcXG4rI2RlZmluZSBMSU1JVF9TWVNDVExcXHRcXFwiL3Byb2Mvc3lzL3VzZXIvbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1xcXCJcXG4rXFxuKyNkZWZpbmUgTUFHSUNcXHRcXHRcXFwiXFxcXFxcXFx4ZGVcXFxcXFxcXHhhZFxcXCJcXG4rLyogTm90IG9uIHRoZSBpbnN0YW5jZSwgYW5kIHVubGlrZSAvYmluL3RydWUgaXQgYWx3YXlzIGV4aXN0cy4gKi9cXG4rI2RlZmluZSBJTlRFUlBcXHRcXHRcXFwiL3Byb2Mvc2VsZi9leGVcXFwiXFxuK1xcbisvKiBTbWFsbCBlbm91Z2ggdG8gZmlsbCBieSBoYW5kLCBiaWcgZW5vdWdoIHRoYXQgYSByZWZ1bmQgaXMgdmlzaWJsZS4gKi9cXG4rI2RlZmluZSBMSU1JVFxcdFxcdDRcXG4rXFxuKy8qIFdoYXQgVUNPVU5UX0VOVFJZKCkgbGV0cyBhIG5hbWVzcGFjZSByYWlzZSBpdHMgb3duIGxpbWl0IHRvLiAqL1xcbisjZGVmaW5lIExJTUlUX01BWFxcdFxcXCIyMTQ3NDgzNjQ3XFxcIlxcbitcXG4rc3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpXFxuK3tcXG4rXFx0aWYgKG1rZGlyKHBhdGgsIDA3NTUpIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVFWElTVClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogV3JpdGUgQHZhbCB0byBAcGF0aCwgcHJlc2VydmluZyB3cml0ZSgyKSdzIGVycm5vIGZvciB0aGUgY2FsbGVyLiAqL1xcbitzdGF0aWMgaW50IHdyaXRlX2tlZXBfZXJybm8oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsKVxcbit7XFxuK1xcdGludCBmZCwgc2F2ZWQ7XFxuK1xcdHNzaXplX3QgbjtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0biA9IHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKTtcXG4rXFx0c2F2ZWQgPSBlcnJubztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRlcnJubyA9IHNhdmVkO1xcbitcXHRyZXR1cm4gbiBcXHUwMDNjIDAgPyAtMSA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2V0X2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcXG4re1xcbitcXHRyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhMSU1JVF9TWVNDVEwsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfYXQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpydWxlKVxcbit7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIlcy9yZWdpc3RlclxcXCIsIG1udCk7XFxuK1xcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpO1xcbit9XFxuK1xcbisvKiBBbiAnRicgZW50cnk6IG9uZSBpbnRlcnByZXRlciBwcmUtb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbiwgb25lIGNoYXJnZS4gKi9cXG4rc3RhdGljIGludCByZWdpc3Rlcl9maXhlZChjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2hhciBydWxlW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXFxcIjolczpNOjpcXFwiIE1BR0lDIFxcXCI6OlxcXCIgSU5URVJQIFxcXCI6RlxcXCIsIG5hbWUpO1xcbitcXHRyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTtcXG4rfVxcbitcXG4rLyogVGhlIHNhbWUgZW50cnkgd2l0aG91dCAnRic6IHRoZSBpbnRlcnByZXRlciBpcyBvcGVuZWQgcGVyIGV4ZWMgaW5zdGVhZC4gKi9cXG4rc3RhdGljIGludCByZWdpc3Rlcl9wbGFpbihjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2hhciBydWxlW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXFxcIjolczpNOjpcXFwiIE1BR0lDIFxcXCI6OlxcXCIgSU5URVJQIFxcXCI6XFxcIiwgbmFtZSk7XFxuK1xcdHJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJlbW92ZV9lbnRyeShjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzLyVzXFxcIiwgbW50LCBuYW1lKTtcXG4rXFx0cmV0dXJuIHdyaXRlX2tlZXBfZXJybm8ocGF0aCwgXFxcIi0xXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZW50cnlfZXhpc3RzKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvJXNcXFwiLCBtbnQsIG5hbWUpO1xcbitcXHRyZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spID09IDA7XFxuK31cXG4rXFxuKy8qIFJlZ2lzdGVyIEBuICdGJyBlbnRyaWVzLCBlYWNoIHdpdGggYSBuYW1lIG9mIGl0cyBvd24uICovXFxuK3N0YXRpYyBpbnQgZmlsbF9idWRnZXQoY29uc3QgY2hhciAqbW50LCB1bnNpZ25lZCBpbnQgbilcXG4re1xcbitcXHRjaGFyIG5hbWVbMzJdO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG4rXFx0XFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwiZml4ZWQldVxcXCIsIGkpO1xcbitcXHRcXHRpZiAocmVnaXN0ZXJfZml4ZWQobW50LCBuYW1lKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitGSVhUVVJFKGludGVycF9saW1pdCkge1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChpbnRlcnBfbGltaXQpXFxuK3tcXG4rXFx0Lyogc2V0dXBfdXNlcm5zKCkgZXhpdHMgcmF0aGVyIHRoYW4gcmV0dXJucyBpZiB0aGlzIGlzIG5vdCB0aGVyZS4gKi9cXG4rXFx0aWYgKGFjY2VzcyhcXFwiL3Byb2Mvc2VsZi9ucy91c2VyXFxcIiwgRl9PSykpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwia2VybmVsIHdpdGhvdXQgdXNlciBuYW1lc3BhY2VzXFxcIik7XFxuK1xcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XFxuK1xcbitcXHQvKiBDQVBfU1lTX1JFU09VUkNFIGluIHRoaXMgbmFtZXNwYWNlIGlzIHdoYXQgbWFrZXMgaXQgd3JpdGFibGUuICovXFxuK1xcdGlmIChzZXRfbGltaXQoTElNSVRfTUFYKSkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCB3aXRob3V0IFxcXCIgTElNSVRfU1lTQ1RMKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJjYW5ub3Qgc2V0IHRoZSBsaW1pdDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEoZW5zdXJlX2RpcihNTlQpLCAwKTtcXG4rXFx0aWYgKG1vdW50KFxcXCJiaW5mbXRfbWlzY1xcXCIsIE1OVCwgXFxcImJpbmZtdF9taXNjXFxcIiwgMCwgTlVMTCkpIHtcXG4rXFx0XFx0aW50IHNhdmVkID0gZXJybm87XFxuK1xcbitcXHRcXHQvKiBUZWFyZG93biBkb2Vzbid0IHJ1biB3aGVuIHNldHVwIHNraXBzLCBzbyBjbGVhbiB1cCBoZXJlLiAqL1xcbitcXHRcXHRybWRpcihNTlQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIGJpbmZtdF9taXNjOiAlc1xcXCIsIHN0cmVycm9yKHNhdmVkKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihpbnRlcnBfbGltaXQpXFxuK3tcXG4rXFx0LyogVGhlIG5hbWVzcGFjZXMgZ28gd2l0aCB0aGUgcHJvY2VzczsganVzdCBkb24ndCBsaXR0ZXIgL3RtcC4gKi9cXG4rXFx0dW1vdW50MihORVNURURfTU5ULCBNTlRfREVUQUNIKTtcXG4rXFx0dW1vdW50MihNTlQsIE1OVF9ERVRBQ0gpO1xcbitcXHRybWRpcihORVNURURfTU5UKTtcXG4rXFx0cm1kaXIoTU5UKTtcXG4rfVxcbitcXG4rLyogRXZlcnkgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBpcyBjaGFyZ2VkLCBhbmQgdGhlIGJ1ZGdldCBpcyBhIGhhcmQgc3RvcC4gKi9cXG4rVEVTVF9GKGludGVycF9saW1pdCwgZml4ZWRfaW50ZXJwcmV0ZXJzX2FyZV9jaGFyZ2VkKVxcbit7XFxuK1xcdGNoYXIgYnVmWzMyXTtcXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldVxcXCIsIExJTUlUKTtcXG4rXFx0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmaWxsX2J1ZGdldChNTlQsIExJTUlUKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCBcXFwib3ZlclxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xcbitcXG4rXFx0LyogQSByZWZ1c2VkIHJlZ2lzdHJhdGlvbiBsZWF2ZXMgbm90aGluZyBiZWhpbmQuICovXFxuK1xcdEVYUEVDVF9GQUxTRShlbnRyeV9leGlzdHMoTU5ULCBcXFwib3ZlclxcXCIpKTtcXG4rfVxcbitcXG4rLyogQW4gZW50cnkgdGhhdCBwcmUtb3BlbnMgbm90aGluZyBwaW5zIG5vdGhpbmcsIHNvIGl0IGlzIG5vdCBjaGFyZ2VkLiAqL1xcbitURVNUX0YoaW50ZXJwX2xpbWl0LCBwbGFpbl9lbnRyaWVzX2FyZV9ub3RfY2hhcmdlZClcXG4re1xcbitcXHRBU1NFUlRfRVEoc2V0X2xpbWl0KFxcXCIwXFxcIiksIDApO1xcbitcXG4rXFx0RVhQRUNUX0VRKHJlZ2lzdGVyX3BsYWluKE1OVCwgXFxcInBsYWluXFxcIiksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlbnRyeV9leGlzdHMoTU5ULCBcXFwicGxhaW5cXFwiKSk7XFxuK1xcbitcXHQvKiAuLi4gd2hpbGUgdGhlIHNhbWUgZW50cnkgd2l0aCAnRicgaGFzIG5vdGhpbmcgdG8gc3BlbmQuICovXFxuK1xcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFxcXCJmaXhlZFxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xcbit9XFxuK1xcbisvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqL1xcbitURVNUX0YoaW50ZXJwX2xpbWl0LCByZW1vdmFsX3JlZnVuZHNfdGhlX2NoYXJnZSlcXG4re1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJXVcXFwiLCBMSU1JVCk7XFxuK1xcdEFTU0VSVF9FUShzZXRfbGltaXQoYnVmKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoZmlsbF9idWRnZXQoTU5ULCBMSU1JVCksIDApO1xcbitcXHRBU1NFUlRfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCBcXFwib3ZlclxcXCIpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZW1vdmVfZW50cnkoTU5ULCBcXFwiZml4ZWQwXFxcIiksIDApO1xcbitcXHRFWFBFQ1RfRVEocmVnaXN0ZXJfZml4ZWQoTU5ULCBcXFwib3ZlclxcXCIpLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIGNoYXJnZSB3YWxrcyB0aGUgYW5jZXN0b3JzLCBzbyBhIG5hbWVzcGFjZSBjYW5ub3QgYnV5IGl0c2VsZiBidWRnZXQgYnlcXG4rICogbmVzdGluZzogaXQgbWF5IHJhaXNlIG9ubHkgaXRzIG93biBsaW1pdCwgYW5kIHRoZSBwYXJlbnQgaXQgd2FzIGNyZWF0ZWRcXG4rICogZnJvbSBpcyBjaGFyZ2VkIGZvciBldmVyeSBiaW5kaW5nIG1hZGUgYmVsb3cgaXQuXFxuKyAqL1xcbitURVNUX0YoaW50ZXJwX2xpbWl0LCBuZXN0aW5nX2RvZXNfbm90X2V2YWRlX2l0KVxcbit7XFxuK1xcdGNoYXIgYnVmWzMyXTtcXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldVxcXCIsIExJTUlUKTtcXG4rXFx0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzZXRfbGltaXQoTElNSVRfTUFYKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoZW5zdXJlX2RpcihORVNURURfTU5UKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShtb3VudChcXFwiYmluZm10X21pc2NcXFwiLCBORVNURURfTU5ULCBcXFwiYmluZm10X21pc2NcXFwiLCAwLCBOVUxMKSwgMCk7XFxuK1xcbitcXHQvKiBBIGZyZXNoIGluc3RhbmNlIHdpdGggYW4gdW5saW1pdGVkIGJ1ZGdldCBvZiBpdHMgb3duLCBhbmQgeWV0OiAqL1xcbitcXHRFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTkVTVEVEX01OVCwgXFxcIm5lc3RlZFxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xcbitcXG4rXFx0LyogVGhlIG5lc3RlZCBpbnN0YW5jZSB3b3JrcyBmb3IgYW55dGhpbmcgdGhhdCBwaW5zIG5vIGZpbGUuICovXFxuK1xcdEVYUEVDVF9FUShyZWdpc3Rlcl9wbGFpbihORVNURURfTU5ULCBcXFwibmVzdGVkX3BsYWluXFxcIiksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Njo1MC40ODgzNjY1MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjg3ODAxNTkwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICAgIFwiYm1fZW50cnlfd3JpdGVcIixcbiAgICBcImJtX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgbGltaXQgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCB1c2luZyBgdWNvdW50c2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgYW5kIGBiaW5mbXRfbWlzY2AgZmlsZXN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB1bnByaXZpbGVnZWQgdXNlcnMgKGluIGEgdXNlciBuYW1lc3BhY2UpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZW1vdmFsIG9mIGBiaW5mbXRfbWlzY2AgZW50cmllcyB0byB0ZXN0IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiB0aGUgYnVkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYmU4NTNlM2M5M2M4YzE5ZGUyYWUyMzc1ZmE3NjdlYjViZDM1NjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNDo0Njo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbmluZGV4IDYyMmI1ZDhjODk5NTcuLmQyNmI2M2EyN2MyNTkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbkBAIC0xMjgsNiArMTI4LDExIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcbiAgICBuYW1lZCBieSBhbiBhYnNvbHV0ZSBwYXRoLiBJdCBpcyBvcGVuZWQgd2hlbiB0aGUgYmluYXJ5IGlzIGV4ZWN1dGVkLCBzb1xuICAgIGEgcmVsYXRpdmUgb25lIHdvdWxkIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mXG4gICAgd2hvZXZlciBydW5zIHRoZSBiaW5hcnlcbisgLSB0aGUgYW1vdW50IG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGJ5IGBgRmBgLCBvciBib3VuZCB0byBhIGBgQmBgIGVudHJ5XG4rICAgaXMgbGltaXRlZCBieSB0aGUgYGAvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYGAgc3lzY3RsLiBBXG4rICAgcmVnaXN0cmF0aW9uIHBhc3QgdGhlIGxpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC4gVGhpcyBsaW1pdHMgYW5cbisgICB1bnByaXZpbGVnZWQgbmFtZXNwYWNlIHBpbm5pbmcgZmlsZXMuIEEgbmVzdGVkIG5hbWVzcGFjZSBjYW4gcmFpc2Ugb25seSBpdHNcbisgICBvd24gbGltaXQgYW5kIGV2ZXJ5IGFuY2VzdG9yIGlzIGNoYXJnZWQgdG9vXG4gXG4gXG4gVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGhcbkBAIC0yMTUsMTAgKzIyMCw5IEBAIHdpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXG4gcHJlLW9wZW5zIGEgc3RhdGljIGVudHJ5J3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbiBwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaXQgY2Fubm90XG4gZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XG4tYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbi1gYC1FTk9TUENgYC4gVG8gYmluZCBhIGZpbGUgdGhhdCBoYXMgbm8gcGF0aCBvZiBpdHMgb3duIC0gYWxyZWFkeVxuLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxuLW9wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4rYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzLCBhbmQgZWFjaCBvbmUgaXMgY2hhcmdlZCBhZ2FpbnN0XG4rYGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYGAgbGlrZSBhbnkgb3RoZXIgYmluZGluZy4gQSB3cml0ZSBwYXN0IGVpdGhlclxuK2xpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC5cbiBcbiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcbiBgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpYGAga2Z1bmMsIGFuZCBldmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiB0aGVcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDRcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcbisrKyBiL2ZzL2JpbmZtdF9taXNjLmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW50ZXJwLCB0bXAsIFx1MDAyNmUtXHUwMDNlaW50ZXJwcywgbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCk7XG4gXHRcdGNsb3NlX2ludGVycF9maWxlKGludGVycC1cdTAwM2VmaWxlKTtcbitcdFx0ZGVjX3Vjb3VudChpbnRlcnAtXHUwMDNldWNvdW50cywgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyk7XG4gXHRcdGtmcmVlKGludGVycCk7XG4gXHR9XG4gfVxuQEAgLTMwNyw3ICszMDgsOCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbiAgKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHZhbGlkYXRlZCBAbmFtZSBhbmQgQHBhdGgsIGVzdGFibGlzaGVkIHRoYXQgQGVcbiAgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuXG4gICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlIGVudHJ5IGlzIGZ1bGwgb3IgdGhlIGJpbmRlciBpcyBvdXQgb2ZcbisgKiAgICAgICAgIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYnVkZ2V0LCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbiAgKi9cbiBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4gXHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcbkBAIC0zMTUsMjIgKzMxNywzMiBAQCBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0c2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4rXHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiBcbiBcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcdTAwMjZlLVx1MDAzZWludGVycHMsIG5hbWUpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdGlmIChsaXN0X2NvdW50X25vZGVzKFx1MDAyNmUtXHUwMDNlaW50ZXJwcykgXHUwMDNlPSBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYKVxuIFx0XHRyZXR1cm4gLUVOT1NQQztcbiBcbitcdC8qIFRoZSBiaW5kaW5nIGtlZXBzIGEgZmlsZSBvcGVuLCBzbyBjaGFyZ2UgaXQgdG8gd2hvZXZlciBiaW5kcyBpdC4gKi9cbitcdHVjb3VudHMgPSBpbmNfdWNvdW50KGN1cnJlbnRfdXNlcl9ucygpLCBjdXJyZW50X2V1aWQoKSxcbitcdFx0XHQgICAgIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMpO1xuK1x0aWYgKCF1Y291bnRzKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcbiBcdC8qIE9uZSBhbGxvY2F0aW9uLCBib3RoIHN0cmluZ3MgaW4gaXQsIGxpa2UgdGhlIGVudHJ5J3Mgb3duIGJ1ZmZlci4gKi9cbiBcdGludGVycCA9IGttYWxsb2Moc3RydWN0X3NpemUoaW50ZXJwLCBuYW1lLCBubGVuICsgcGxlbiArIDIpLFxuIFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFpbnRlcnApXG4rXHRpZiAoIWludGVycCkge1xuK1x0XHRkZWNfdWNvdW50KHVjb3VudHMsIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbiBcbiBcdGludGVycC1cdTAwM2VwYXRoID0gaW50ZXJwLVx1MDAzZW5hbWUgKyBubGVuICsgMTtcbiBcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUsIG5hbWUsIG5sZW4gKyAxKTtcbiBcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUgKyBubGVuICsgMSwgcGF0aCwgcGxlbiArIDEpO1xuIFx0aW50ZXJwLVx1MDAzZWZpbGUgPSBmO1xuK1x0aW50ZXJwLVx1MDAzZXVjb3VudHMgPSB1Y291bnRzO1xuIFx0LyogUHVibGlzaCB0aGUgbm9kZTogYSBsb2NrbGVzcyBjYXQgbWF5IGJlIHdhbGtpbmcgdGhlIGxpc3QuICovXG4gXHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCwgXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKTtcbiBcdHByX2RlYnVnKFwicmVnaXN0ZXI6IGludGVycHJldGVyOiAlcyB7JXN9XFxuXCIsIG5hbWUsIHBhdGgpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaCBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxuaW5kZXggMDcyZTRiM2RkNzhkMi4uODA0NWIxMGRkM2U1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5AQCAtNyw2ICs3LDcgQEBcbiBzdHJ1Y3QgYnBmX3Byb2c7XG4gc3RydWN0IGZpbGU7XG4gc3RydWN0IGxpbnV4X2JpbnBybTtcbitzdHJ1Y3QgdWNvdW50cztcbiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4gXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcbkBAIC0yMSw2ICsyMiw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbiAgKiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIC0gYW4gaW50ZXJwcmV0ZXIgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aFxuICAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSdzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxuICAqIEBmaWxlOiB0aGUgZmlsZSwgb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbiBhbmQgbmV2ZXIgcmVzb2x2ZWQgYWdhaW5cbisgKiBAdWNvdW50czogdGhlIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgY2hhcmdlIHRoZSBiaW5kaW5nIHRvb2tcbiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyXG4gICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXG4gICogQG5hbWU6IHRoZSBuYW1lIHRoZSBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdCBieTsgZW1wdHkgZm9yIHRoZSBmaXhlZFxuQEAgLTMzLDYgKzM1LDcgQEAgc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xuIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiBcdHN0cnVjdCBmaWxlXHRcdCpmaWxlO1xuK1x0c3RydWN0IHVjb3VudHNcdFx0KnVjb3VudHM7XG4gXHRjb25zdCBjaGFyXHRcdCpwYXRoO1xuIFx0Y2hhclx0XHRcdG5hbWVbXTtcbiB9O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuaW5kZXggOWMzYmUxNTczOTdlMC4uZTM4ZDllNjA1NjlmMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG5AQCAtNTcsNiArNTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHtcbiAjaWZkZWYgQ09ORklHX0ZBTk9USUZZXG4gXHRVQ09VTlRfRkFOT1RJRllfR1JPVVBTLFxuIFx0VUNPVU5UX0ZBTk9USUZZX01BUktTLFxuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQylcbitcdFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsXG4gI2VuZGlmXG4gXHRVQ09VTlRfQ09VTlRTLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL3Vjb3VudC5jIGIva2VybmVsL3Vjb3VudC5jXG5pbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NFxuLS0tIGEva2VybmVsL3Vjb3VudC5jXG4rKysgYi9rZXJuZWwvdWNvdW50LmNcbkBAIC00LDYgKzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuQEAgLTg5LDYgKzkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdXNlcl90YWJsZVtdID0ge1xuIFx0VUNPVU5UX0VOVFJZKFwibWF4X2Zhbm90aWZ5X2dyb3Vwc1wiKSxcbiBcdFVDT1VOVF9FTlRSWShcIm1heF9mYW5vdGlmeV9tYXJrc1wiKSxcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpXG4rXHRVQ09VTlRfRU5UUlkoXCJtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzXCIpLFxuKyNlbmRpZlxuIH07XG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbkBAIC0yMzMsNiArMjM3LDcgQEAgc3RydWN0IHVjb3VudHMgKmluY191Y291bnQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywga3VpZF90IHVpZCxcbiBcdHB1dF91Y291bnRzKHVjb3VudHMpO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoaW5jX3Vjb3VudCwgXCJiaW5mbXRfbWlzY1wiKTtcbiBcbiB2b2lkIGRlY191Y291bnQoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gdWNvdW50X3R5cGUgdHlwZSlcbiB7XG5AQCAtMjQzLDYgKzI0OCw3IEBAIHZvaWQgZGVjX3Vjb3VudChzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSB1Y291bnRfdHlwZSB0eXBlKVxuIFx0fVxuIFx0cHV0X3Vjb3VudHModWNvdW50cyk7XG4gfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZGVjX3Vjb3VudCwgXCJiaW5mbXRfbWlzY1wiKTtcbiBcbiBsb25nIGluY19ybGltaXRfdWNvdW50cyhzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSBybGltaXRfdHlwZSB0eXBlLCBsb25nIHYpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZVxuaW5kZXggZmJiYjE2MDBkZGI5NC4uZTQyZWNkNGM5MDhkMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXG5AQCAtMjAsNiArMjAsNyBAQCB4eHh4eHh4eCpcbiBwaXBlXG4gU19JKi50ZXN0XG4gYmluZm10X21pc2NfYnBmXG4rYmluZm10X21pc2NfaW50ZXJwbGltaXRcbiBiaW5mbXRfYnBmX2ludGVycFxuIGJpbmZtdF9icGZfYXBwXG4gYmluZm10X21pc2NfdHJhbnNwYXJlbnRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuaW5kZXggNDEwYzkzNjA2YTBjMy4uYjY0MGFmOGYwMmI1MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbkBAIC0yNSw2ICsyNSwxMCBAQCBURVNUX0dFTl9QUk9HUyArPSBjaGVjay1leGVjXG4gIyBvciBhbiAnRicgZW50cnkgY2FuIHBpbiB0aGUgaW5zdGFuY2UgdGhhdCBvd25zIGl0LiBVbnByaXZpbGVnZWQsIG5vIGJwZi5cbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19zZWxmcGluXG4gXG4rIyBUaGUgaW50ZXJwcmV0ZXJzIGFuICdGJyBvciAnQicgZW50cnkgcHJlLW9wZW5zIGFyZSBjaGFyZ2VkIGFnYWluc3RcbisjIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuK1RFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2ludGVycGxpbWl0XG4rXG4gIyAnRCcgKHJlZ2lzdGVyIGRpc2FibGVkKSBiaW5mbXRfbWlzYyB0ZXN0OiBhbiBlbnRyeSB0aGF0IGV4aXN0cyBidXQgZG9lc1xuICMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi5cbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19kaXNhYmxlZFxuQEAgLTEwNCw2ICsxMDgsOCBAQCAkKE9VVFBVVCkvc2NyaXB0LW5vZXhlYy5pbmM6ICQoQ0hFQ0tfRVhFQ19TQU1QTEVTKS9zY3JpcHQtbm9leGVjLmluY1xuICMgQ0ZMQUdTIGZvciBldmVyeSBwcm9ncmFtIGluIHRoaXMgZGlyZWN0b3J5LlxuICQoT1VUUFVUKS9iaW5mbXRfbWlzY19zZWxmcGluOiBDRkxBR1MgKz0gJChUT09MU19JTkNMVURFUylcbiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogLi4vZmlsZXN5c3RlbXMvdXRpbHMuY1xuKyQoT1VUUFVUKS9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdDogQ0ZMQUdTICs9ICQoVE9PTFNfSU5DTFVERVMpXG4rJChPVVRQVVQpL2JpbmZtdF9taXNjX2ludGVycGxpbWl0OiAuLi9maWxlc3lzdGVtcy91dGlscy5jXG4gXG4gIyAtLS0gYmluZm10X21pc2MgYnBmICgnQicpIGhhbmRsZXIgdGVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAjIFRoZSBzdHJ1Y3Rfb3BzIGJwZiBvYmplY3RzIGFyZSBjb21waWxlZCBhZ2FpbnN0IHRoZSBydW5uaW5nIGtlcm5lbCdzIEJURi5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuaW5kZXggMmM3YjYzMDc1ZjFkOS4uYjJhNDUxODkwMWIwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbkBAIC0zOCw2ICszOCw3IEBAXG4gI2RlZmluZSBfR05VX1NPVVJDRVxuICNpbmNsdWRlIFx1MDAzY2VsZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC02NSw2ICs2Niw5IEBAXG4gI2RlZmluZSBCSU5EX1JJU0NWX1BBVEhcdFwiL3RtcC9iaW5mbXRfYmluZF9yaXNjdlwiXG4gI2RlZmluZSBCSU5EX0VYUEVDVFx0XCJCSU5EX1JBTiBcIlxuICNkZWZpbmUgQklORF9NQVhcdDEwMFxuKyNkZWZpbmUgSU5URVJQX0xJTUlUXHRcIi9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNcIlxuKy8qIEV4aXQgc3RhdHVzIG9mIHRoZSBiaW5kaW5nIGNoaWxkIHdoZW4gaXQgY2Fubm90IHNldCB1cCBhIGJ1ZGdldCBvZiBpdHMgb3duLiAqL1xuKyNkZWZpbmUgQklORF9OT19CVURHRVRcdDIwMFxuIFxuIC8qIEEgbWluaW1hbCA2NC1iaXQgbGl0dGxlLWVuZGlhbiBFTEYgaGVhZGVyLCBwYWRkZWQgdG8gdGhlIHJlYWQgc2l6ZS4gKi9cbiBzdGF0aWMgaW50IGNyZWF0ZV9mYWtlX2VsZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBzaG9ydCBtYWNoaW5lKVxuQEAgLTM3OCw2ICszODIsNTcgQEAgc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxuIFx0cmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7XG4gfVxuIFxuKy8qIFNldCB0aGUgaW50ZXJwcmV0ZXIgYnVkZ2V0IG9mIHRoaXMgbmFtZXNwYWNlLiAqL1xuK3N0YXRpYyBpbnQgd3JpdGVfaW50ZXJwX2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcbit7XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oSU5URVJQX0xJTUlULCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdG4gPSB3cml0ZShmZCwgdmFsLCBzdHJsZW4odmFsKSk7XG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gbiBcdTAwM2MgMCA/IC0xIDogMDtcbit9XG4rXG4rLypcbisgKiBUaGUgZXJybm8gYSBiaW5kIGlzIHJlZnVzZWQgd2l0aCB3aGVuIHRoZSB3cml0ZXIgaXMgYSBjaGlsZCB0aGF0IGhhcyBzcGVudFxuKyAqIHRoZSBidWRnZXQgb2YgYSB1c2VyIG5hbWVzcGFjZSBvZiBpdHMgb3duLCAwIGlmIGl0IHN1Y2NlZWRlZCBhbmQgLTEgaWYgdGhlXG4rICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGVcbisgKiBpbnRlcnByZXRlciBpcyBzdGlsbCBvcGVuZWQgd2l0aCB0aGlzIHByb2Nlc3MncyBjcmVkZW50aWFscy5cbisgKi9cbitzdGF0aWMgaW50IGJpbmRfb3V0X29mX2J1ZGdldChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHQgICAgICBjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdGNoYXIgY21kW1BBVEhfTUFYXSwgZmlsZVtQQVRIX01BWF07XG4rXHRpbnQgZmQsIHN0YXR1cywgcmV0dmFsO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0c25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCBCSU5GTVRfRElSIFwiLyVzXCIsIGVudHJ5KTtcbitcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFwiKyVzICVzXFxuXCIsIG5hbWUsIHBhdGgpO1xuK1xuK1x0ZmQgPSBvcGVuKGZpbGUsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdHNzaXplX3QgbjtcbitcbitcdFx0LyogQSBuYW1lc3BhY2Ugb2YgaXRzIG93biwgd2l0aCBub3RoaW5nIGxlZnQgaW4gaXQgdG8gc3BlbmQuICovXG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpIHx8IHdyaXRlX2ludGVycF9saW1pdChcIjBcIikpXG4rXHRcdFx0X2V4aXQoQklORF9OT19CVURHRVQpO1xuK1x0XHRuID0gd3JpdGUoZmQsIGNtZCwgc3RybGVuKGNtZCkpO1xuK1x0XHRfZXhpdChuIFx1MDAzYyAwID8gZXJybm8gOiAwKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcdGlmIChwaWQgXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dmFsID0gV0VYSVRTVEFUVVMoc3RhdHVzKTtcbitcdHJldHVybiByZXR2YWwgPT0gQklORF9OT19CVURHRVQgPyAtMSA6IHJldHZhbDtcbit9XG4rXG4gRklYVFVSRShib3VuZF9pbnRlcnApIHtcbiBcdGNoYXIgb2JqW1BBVEhfTUFYXTtcbiBcdHN0cnVjdCBicGZfY2FzZSBjO1xuQEAgLTU2NSw0ICs2MjAsMTkgQEAgVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxuIFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCJ0ZXN0X2ludGVycF9iaW5kXCIsIFwib3ZlclwiLCBCSU5EX0ZJUlNUKSwgLUVOT1NQQyk7XG4gfVxuIFxuKy8qIEEgYmluZGluZyBwaW5zIGEgZmlsZTogaXQgaXMgY2hhcmdlZCwgYW5kIHJlZnVzZWQgb25jZSB0aGUgYnVkZ2V0IGlzIG91dC4gKi9cbitURVNUX0YoYm91bmRfaW50ZXJwLCBiaW5kaW5nc19hcmVfY2hhcmdlZClcbit7XG4rXHRpbnQgZXJyID0gYmluZF9vdXRfb2ZfYnVkZ2V0KFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInRoaXJkXCIsIEJJTkRfRklSU1QpO1xuK1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gdXNlciBuYW1lc3BhY2VzIG9yIG5vIFwiIElOVEVSUF9MSU1JVCk7XG4rXG4rXHQvKiBUaGUgY2hhcmdlIGZvbGxvd3MgdGhlIHdyaXRlciwgbm90IHRoZSBlbnRyeSBmaWxlIGl0IHdyaXRlcyB0by4gKi9cbitcdEVYUEVDVF9FUShlcnIsIEVOT1NQQyk7XG4rXG4rXHQvKiBUaGUgYnVkZ2V0IHdhcyB0aGUgb25seSB0aGluZyBpbiB0aGUgd2F5LiAqL1xuK1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCJ0ZXN0X2ludGVycF9iaW5kXCIsIFwidGhpcmRcIiwgQklORF9GSVJTVCksIDApO1xuK31cbitcbiBURVNUX0hBUk5FU1NfTUFJTlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmNjExYzU1MTc4NDJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuY1xuQEAgLTAsMCArMSwyMzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogQSBwcmUtb3BlbmVkIGludGVycHJldGVyIC0gd2hhdCAnRicgZ2l2ZXMgYSBzdGF0aWMgZW50cnkgYW5kIHdoYXQgYSAnQidcbisgKiBlbnRyeSBiaW5kcyAtIGtlZXBzIGEgZmlsZSBvcGVuIGZvciBhcyBsb25nIGFzIHRoZSBlbnRyeSBsaXZlcywgc28gaXQgcGluc1xuKyAqIHRoZSBtb3VudCBpdCBjYW1lIGZyb20uIEl0IGNvc3RzIG5vIGZpbGUgZGVzY3JpcHRvciwgYW5kIGJpbmZtdF9taXNjIGlzXG4rICogRlNfVVNFUk5TX01PVU5ULCBzbyBhbiB1bnByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2UgY2FuIGNyZWF0ZSB0aGVtIHdpdGhvdXRcbisgKiBib3VuZC4gQ2hlY2sgdGhhdCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTIGJvdW5kcyBpdCwgdGhhdCBhbiBlbnRyeVxuKyAqIHRoYXQgcHJlLW9wZW5zIG5vdGhpbmcgaXMgbm90IGNoYXJnZWQsIHRoYXQgcmVtb3ZpbmcgYW4gZW50cnkgZ2l2ZXMgdGhlXG4rICogY2hhcmdlIGJhY2ssIGFuZCB0aGF0IG5lc3RpbmcgYSB1c2VyIG5hbWVzcGFjZSBkb2VzIG5vdCBldmFkZSBpdC5cbisgKlxuKyAqIFJ1bnMgdW5wcml2aWxlZ2VkIGluIGEgdXNlciBuYW1lc3BhY2UuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vZmlsZXN5c3RlbXMvdXRpbHMuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjZGVmaW5lIE1OVFx0XHRcIi90bXAvYmluZm10X2ludGVycGxpbWl0XCJcbisjZGVmaW5lIE5FU1RFRF9NTlRcdFwiL3RtcC9iaW5mbXRfaW50ZXJwbGltaXRfbmVzdGVkXCJcbisjZGVmaW5lIExJTUlUX1NZU0NUTFx0XCIvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzXCJcbitcbisjZGVmaW5lIE1BR0lDXHRcdFwiXFxcXHhkZVxcXFx4YWRcIlxuKy8qIE5vdCBvbiB0aGUgaW5zdGFuY2UsIGFuZCB1bmxpa2UgL2Jpbi90cnVlIGl0IGFsd2F5cyBleGlzdHMuICovXG4rI2RlZmluZSBJTlRFUlBcdFx0XCIvcHJvYy9zZWxmL2V4ZVwiXG4rXG4rLyogU21hbGwgZW5vdWdoIHRvIGZpbGwgYnkgaGFuZCwgYmlnIGVub3VnaCB0aGF0IGEgcmVmdW5kIGlzIHZpc2libGUuICovXG4rI2RlZmluZSBMSU1JVFx0XHQ0XG4rXG4rLyogV2hhdCBVQ09VTlRfRU5UUlkoKSBsZXRzIGEgbmFtZXNwYWNlIHJhaXNlIGl0cyBvd24gbGltaXQgdG8uICovXG4rI2RlZmluZSBMSU1JVF9NQVhcdFwiMjE0NzQ4MzY0N1wiXG4rXG4rc3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpXG4re1xuK1x0aWYgKG1rZGlyKHBhdGgsIDA3NTUpIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFRVhJU1QpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBXcml0ZSBAdmFsIHRvIEBwYXRoLCBwcmVzZXJ2aW5nIHdyaXRlKDIpJ3MgZXJybm8gZm9yIHRoZSBjYWxsZXIuICovXG4rc3RhdGljIGludCB3cml0ZV9rZWVwX2Vycm5vKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbClcbit7XG4rXHRpbnQgZmQsIHNhdmVkO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0biA9IHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKTtcbitcdHNhdmVkID0gZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXHRlcnJubyA9IHNhdmVkO1xuK1x0cmV0dXJuIG4gXHUwMDNjIDAgPyAtMSA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2V0X2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcbit7XG4rXHRyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhMSU1JVF9TWVNDVEwsIHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfYXQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpydWxlKVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcmVnaXN0ZXJcIiwgbW50KTtcbitcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpO1xuK31cbitcbisvKiBBbiAnRicgZW50cnk6IG9uZSBpbnRlcnByZXRlciBwcmUtb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbiwgb25lIGNoYXJnZS4gKi9cbitzdGF0aWMgaW50IHJlZ2lzdGVyX2ZpeGVkKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRjaGFyIHJ1bGVbUEFUSF9NQVhdO1xuK1xuK1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcIjolczpNOjpcIiBNQUdJQyBcIjo6XCIgSU5URVJQIFwiOkZcIiwgbmFtZSk7XG4rXHRyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTtcbit9XG4rXG4rLyogVGhlIHNhbWUgZW50cnkgd2l0aG91dCAnRic6IHRoZSBpbnRlcnByZXRlciBpcyBvcGVuZWQgcGVyIGV4ZWMgaW5zdGVhZC4gKi9cbitzdGF0aWMgaW50IHJlZ2lzdGVyX3BsYWluKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRjaGFyIHJ1bGVbUEFUSF9NQVhdO1xuK1xuK1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcIjolczpNOjpcIiBNQUdJQyBcIjo6XCIgSU5URVJQIFwiOlwiLCBuYW1lKTtcbitcdHJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpO1xuK31cbitcbitzdGF0aWMgaW50IHJlbW92ZV9lbnRyeShjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy8lc1wiLCBtbnQsIG5hbWUpO1xuK1x0cmV0dXJuIHdyaXRlX2tlZXBfZXJybm8ocGF0aCwgXCItMVxcblwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZW50cnlfZXhpc3RzKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzLyVzXCIsIG1udCwgbmFtZSk7XG4rXHRyZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spID09IDA7XG4rfVxuK1xuKy8qIFJlZ2lzdGVyIEBuICdGJyBlbnRyaWVzLCBlYWNoIHdpdGggYSBuYW1lIG9mIGl0cyBvd24uICovXG4rc3RhdGljIGludCBmaWxsX2J1ZGdldChjb25zdCBjaGFyICptbnQsIHVuc2lnbmVkIGludCBuKVxuK3tcbitcdGNoYXIgbmFtZVszMl07XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwiZml4ZWQldVwiLCBpKTtcbitcdFx0aWYgKHJlZ2lzdGVyX2ZpeGVkKG1udCwgbmFtZSkpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK0ZJWFRVUkUoaW50ZXJwX2xpbWl0KSB7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGludGVycF9saW1pdClcbit7XG4rXHQvKiBzZXR1cF91c2VybnMoKSBleGl0cyByYXRoZXIgdGhhbiByZXR1cm5zIGlmIHRoaXMgaXMgbm90IHRoZXJlLiAqL1xuK1x0aWYgKGFjY2VzcyhcIi9wcm9jL3NlbGYvbnMvdXNlclwiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIHdpdGhvdXQgdXNlciBuYW1lc3BhY2VzXCIpO1xuK1x0QVNTRVJUX0VRKHNldHVwX3VzZXJucygpLCAwKTtcbitcbitcdC8qIENBUF9TWVNfUkVTT1VSQ0UgaW4gdGhpcyBuYW1lc3BhY2UgaXMgd2hhdCBtYWtlcyBpdCB3cml0YWJsZS4gKi9cbitcdGlmIChzZXRfbGltaXQoTElNSVRfTUFYKSkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuK1x0XHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCB3aXRob3V0IFwiIExJTUlUX1NZU0NUTCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImNhbm5vdCBzZXQgdGhlIGxpbWl0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKGVuc3VyZV9kaXIoTU5UKSwgMCk7XG4rXHRpZiAobW91bnQoXCJiaW5mbXRfbWlzY1wiLCBNTlQsIFwiYmluZm10X21pc2NcIiwgMCwgTlVMTCkpIHtcbitcdFx0aW50IHNhdmVkID0gZXJybm87XG4rXG4rXHRcdC8qIFRlYXJkb3duIGRvZXNuJ3QgcnVuIHdoZW4gc2V0dXAgc2tpcHMsIHNvIGNsZWFuIHVwIGhlcmUuICovXG4rXHRcdHJtZGlyKE1OVCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIGJpbmZtdF9taXNjOiAlc1wiLCBzdHJlcnJvcihzYXZlZCkpO1xuK1x0fVxuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKGludGVycF9saW1pdClcbit7XG4rXHQvKiBUaGUgbmFtZXNwYWNlcyBnbyB3aXRoIHRoZSBwcm9jZXNzOyBqdXN0IGRvbid0IGxpdHRlciAvdG1wLiAqL1xuK1x0dW1vdW50MihORVNURURfTU5ULCBNTlRfREVUQUNIKTtcbitcdHVtb3VudDIoTU5ULCBNTlRfREVUQUNIKTtcbitcdHJtZGlyKE5FU1RFRF9NTlQpO1xuK1x0cm1kaXIoTU5UKTtcbit9XG4rXG4rLyogRXZlcnkgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBpcyBjaGFyZ2VkLCBhbmQgdGhlIGJ1ZGdldCBpcyBhIGhhcmQgc3RvcC4gKi9cbitURVNUX0YoaW50ZXJwX2xpbWl0LCBmaXhlZF9pbnRlcnByZXRlcnNfYXJlX2NoYXJnZWQpXG4re1xuK1x0Y2hhciBidWZbMzJdO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBMSU1JVCk7XG4rXHRBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbitcbitcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwib3ZlclwiKSwgMCk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1NQQyk7XG4rXG4rXHQvKiBBIHJlZnVzZWQgcmVnaXN0cmF0aW9uIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gKi9cbitcdEVYUEVDVF9GQUxTRShlbnRyeV9leGlzdHMoTU5ULCBcIm92ZXJcIikpO1xuK31cbitcbisvKiBBbiBlbnRyeSB0aGF0IHByZS1vcGVucyBub3RoaW5nIHBpbnMgbm90aGluZywgc28gaXQgaXMgbm90IGNoYXJnZWQuICovXG4rVEVTVF9GKGludGVycF9saW1pdCwgcGxhaW5fZW50cmllc19hcmVfbm90X2NoYXJnZWQpXG4re1xuK1x0QVNTRVJUX0VRKHNldF9saW1pdChcIjBcIiksIDApO1xuK1xuK1x0RVhQRUNUX0VRKHJlZ2lzdGVyX3BsYWluKE1OVCwgXCJwbGFpblwiKSwgMCk7XG4rXHRFWFBFQ1RfVFJVRShlbnRyeV9leGlzdHMoTU5ULCBcInBsYWluXCIpKTtcbitcbitcdC8qIC4uLiB3aGlsZSB0aGUgc2FtZSBlbnRyeSB3aXRoICdGJyBoYXMgbm90aGluZyB0byBzcGVuZC4gKi9cbitcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwiZml4ZWRcIiksIDApO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xuK31cbitcbisvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqL1xuK1RFU1RfRihpbnRlcnBfbGltaXQsIHJlbW92YWxfcmVmdW5kc190aGVfY2hhcmdlKVxuK3tcbitcdGNoYXIgYnVmWzMyXTtcbitcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJXVcIiwgTElNSVQpO1xuK1x0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcbitcbitcdEFTU0VSVF9FUShmaWxsX2J1ZGdldChNTlQsIExJTUlUKSwgMCk7XG4rXHRBU1NFUlRfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCBcIm92ZXJcIiksIDApO1xuK1xuK1x0QVNTRVJUX0VRKHJlbW92ZV9lbnRyeShNTlQsIFwiZml4ZWQwXCIpLCAwKTtcbitcdEVYUEVDVF9FUShyZWdpc3Rlcl9maXhlZChNTlQsIFwib3ZlclwiKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogVGhlIGNoYXJnZSB3YWxrcyB0aGUgYW5jZXN0b3JzLCBzbyBhIG5hbWVzcGFjZSBjYW5ub3QgYnV5IGl0c2VsZiBidWRnZXQgYnlcbisgKiBuZXN0aW5nOiBpdCBtYXkgcmFpc2Ugb25seSBpdHMgb3duIGxpbWl0LCBhbmQgdGhlIHBhcmVudCBpdCB3YXMgY3JlYXRlZFxuKyAqIGZyb20gaXMgY2hhcmdlZCBmb3IgZXZlcnkgYmluZGluZyBtYWRlIGJlbG93IGl0LlxuKyAqL1xuK1RFU1RfRihpbnRlcnBfbGltaXQsIG5lc3RpbmdfZG9lc19ub3RfZXZhZGVfaXQpXG4re1xuK1x0Y2hhciBidWZbMzJdO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBMSU1JVCk7XG4rXHRBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApO1xuK1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XG4rXHRBU1NFUlRfRVEoc2V0X2xpbWl0KExJTUlUX01BWCksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGVuc3VyZV9kaXIoTkVTVEVEX01OVCksIDApO1xuK1x0QVNTRVJUX0VRKG1vdW50KFwiYmluZm10X21pc2NcIiwgTkVTVEVEX01OVCwgXCJiaW5mbXRfbWlzY1wiLCAwLCBOVUxMKSwgMCk7XG4rXG4rXHQvKiBBIGZyZXNoIGluc3RhbmNlIHdpdGggYW4gdW5saW1pdGVkIGJ1ZGdldCBvZiBpdHMgb3duLCBhbmQgeWV0OiAqL1xuK1x0RVhQRUNUX05FKHJlZ2lzdGVyX2ZpeGVkKE5FU1RFRF9NTlQsIFwibmVzdGVkXCIpLCAwKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PU1BDKTtcbitcbitcdC8qIFRoZSBuZXN0ZWQgaW5zdGFuY2Ugd29ya3MgZm9yIGFueXRoaW5nIHRoYXQgcGlucyBubyBmaWxlLiAqL1xuK1x0RVhQRUNUX0VRKHJlZ2lzdGVyX3BsYWluKE5FU1RFRF9NTlQsIFwibmVzdGVkX3BsYWluXCIpLCAwKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ2OjUwLjQ4ODM2Nzc3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTkyMTY2MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQmluZm10X21pc2MgSW50ZXJwcmV0ZXIgTGltaXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIEl0J3MgdG91Y2hpbmcgYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBhZGRpbmcgYSBuZXcgc3lzY3RsLCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AsIHdoaWNoIGlzIGludHJpZ3VpbmcuIExpbWl0aW5nIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgd2l0aGluIGBiaW5mbXRfbWlzY2AgaXMgYSBnb29kIGlkZWEgaW4gdGVybXMgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGhhcmRlbmluZy4gTG9va3MgbGlrZSB0aGV5J3JlIHVzaW5nIGBpbmNfdWNvdW50YCBhbmQgYGRlY191Y291bnRgIHdpdGggYFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlNgIHRvIG1hbmFnZSB0aGUgYWNjb3VudGluZywgd2hpY2ggaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciByZXNvdXJjZSBsaW1pdGluZy4gVGhlIGNoYW5nZXMgZm9jdXMgb24gbW9kaWZ5aW5nIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIHRvIGFwcGx5IHRoZSBjaGFyZ2UsIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UuIFRoZXkndmUgYWxzbyBhZGRlZCBhIHRlc3QsIGBiaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jYCwgYW5kIHRvdWNoZWQgYGJpbmZtdF9taXNjX2JwZi5jYC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBmcy9iaW5mbXRfbWlzYy5jYCBhbmQgYGtlcm5lbC91Y291bnQuY2AgdG8gc2VlIGhvdyB0aGUgbGltaXQgaXMgaW1wbGVtZW50ZWQuIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGhlcmUgZm9yIGZ1enppbmcuIGBiaW5mbXRfbWlzY2AgaXMsIGFmdGVyIGFsbCwgdXNlci1yZWFjaGFibGUgdGhyb3VnaCBtb3VudGluZyBhbmQgd3JpdGluZyB0byB0aGUgZmlsZSBzeXN0ZW0uIFRoYXQgbWVhbnMgYW55IGZsYXcgaW4gdGhlIGxvZ2ljIGlzIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZSBsb29rLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb3JlIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBzb3VuZHMgbGlrZSB0aGUgY3JpdGljYWwgcG9pbnQuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0NzoyNC40ODA1Mzg1MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3MTM4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW50cnlfYXR0YWNoX2ludGVycHJldGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz0yODU9c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTI5Ny0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjI5ODogKiBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIgLSBiaW5kIGFuIG9wZW5lZCBpbnRlcnByZXRlciB0byBAZVxcbmZzL2JpbmZtdF9taXNjLmMtMjk5LSAqIEBlOiBlbnRyeSBiZWluZyBjb25maWd1cmVkXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTMxMy0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjMxNDpzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy0zMTUtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEzMDE9c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEzNTEtXFx0ZWxzZVxcbmZzL2JpbmZtdF9taXNjLmM6MTM1MjpcXHRcXHRyZXR2YWwgPSBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoZSwgbmFtZSwgcGF0aCwgZik7XFxuZnMvYmluZm10X21pc2MuYy0xMzUzLVxcdGlub2RlX3VubG9jayhyb290KTtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQ2Mj1zdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ4Ni1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmKTtcXG5mcy9iaW5mbXRfbWlzYy5jOjE0ODc6XFx0XFx0ZXJyID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIFxcXCJcXFwiLCBlLVxcdTAwM2VpbnRlcnByZXRlciwgZik7XFxuZnMvYmluZm10X21pc2MuYy0xNDg4LVxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDc6MjQuNTI0MjYwMDU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNTM2NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBJbnRlcnByZXRlciBBdHRhY2htZW50KipcblxuUmlnaHQsIGxldCdzIHNlZS4gSSdtIGxvb2tpbmcgYXQgaG93IGludGVycHJldGVycyBhcmUgYmVpbmcgbGlua2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGUgY29kZSdzIGNhbGxpbmcgYGJtX2VudHJ5X2FkZF9pbnRlcnBgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBhbmQgYm90aCBvZiB0aG9zZSB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHNjb3Bpbmcg4oCTIHNwZWNpZmljYWxseSwgYXJlIHRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgZG9pbmcgdGhlIGF0dGFjaGluZywgZGVjbGFyZWQgYXMgc3RhdGljPyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIHRoZXkgKmFyZSogc3RhdGljLCBpdCByZWFsbHkgbGltaXRzIHRoZSBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIG1hbmlwdWxhdGlvbiBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZWlyIHZpc2liaWxpdHkgaXMgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBvciBpZiB0aGV5IGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLiBUaGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyaXR5LCBtYWludGFpbmFiaWxpdHksIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZGVjbGFyYXRpb25zIHF1aWNrbHkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleHBvc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjMxLjIyOTYzMDU0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE3MTk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm1fZW50cnlfYWRkX2ludGVycFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9MTI2ND1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyODUtLyoqXFxuZnMvYmluZm10X21pc2MuYzoxMjg2OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyODctICogQGU6IHRoZSBlbnRyeVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzAwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTMwMTpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDItXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMzYyPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzc5LVxcdGlmIChidWZbMF0gPT0gJysnKVxcbmZzL2JpbmZtdF9taXNjLmM6MTM4MDpcXHRcXHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcXG5mcy9iaW5mbXRfbWlzYy5jLTEzODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjMxLjU1MTM1Nzg3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MDgzODI4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXcml0ZSBPcGVyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBibV9lbnRyeV93cml0ZWAuIFRoYXQgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCB0aGUgZmlsZSBvcGVyYXRpb24gd3JpdGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJsb2NrIE1hbmFnZXIuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gY29uZmlybWluZyBob3cgd3JpdGVzIGFyZSByZWdpc3RlcmVkLiBMZXQncyBkaWcgaW50byBgYm1fcmVnaXN0ZXJfd3JpdGVgIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkIGludGVybmFsbHkuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcmVnaXN0ZXJpbmcgYSB3cml0ZSBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjM4LjA1OTc0MzEyM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUyNzIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9MTQzMT1zdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjEtXFxuZnMvYmluZm10X21pc2MuYzoxNDYyOnN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbmZzL2JpbmZtdF9taXNjLmMtMTQ2My1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE1MDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jOjE1MDQ6XFx0LndyaXRlXFx0XFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE1MDUtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjM4LjEwNjI3NDk4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxMjMzNDc1MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEVudHJ5IFBvaW50cyoqXG5cbkFscmlnaHQsIGxldCdzIHpvb20gaW4gb24gdGhpcyBjb2RlLiBJdCBsb29rcyBsaWtlIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIGBibV9lbnRyeV93cml0ZWAgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3Igd2hhdGV2ZXIgdGhpcyBzeXN0ZW0gaXMgZG9pbmcuIEdpdmVuIHRoZWlyIG5hbWVzLCBJJ20gZ3Vlc3Npbmcgb25lIGhhbmRsZXMgcmVnaXN0ZXItbGV2ZWwgd3JpdGVzIGFuZCB0aGUgb3RoZXIgbWFuYWdlcyBkYXRhIGVudHJpZXMuIFNlZW1zIGxvZ2ljYWwsIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJhbCBicmVha2Rvd24sIGFuZCBsaWtlbHkgZm9sbG93cyBhIGNvbW1vbiBzb2Z0d2FyZSBkZXNpZ24gcGF0dGVybi4gVG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LCBteSBpbW1lZGlhdGUgZm9jdXMgaGFzIHRvIGJlIG9uIGBibV9lbnRyeV93cml0ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBvcGVyYXRlcywgdGhhdCB3aWxsIGxpa2VseSBpbGx1bWluYXRlIHRoZSB3aG9sZSBvcGVyYXRpb24uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Nzo1OS4zMzk3NTI0MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg0NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJtX2VudHJ5X3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz0xMjY0PXN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTI3MS1cXG5mcy9iaW5mbXRfbWlzYy5jOjEyNzI6XFx0Lyogc2VxX29wZW4oKSBjbGVhcnMgRk1PREVfUFdSSVRFLCBibV9lbnRyeV93cml0ZSgpIHRha2VzIGFueSBvZmZzZXQgKi9cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzMtXFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1dSSVRFKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMzAxPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzYxLVxcbmZzL2JpbmZtdF9taXNjLmM6MTM2MjpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjMtXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE0MjA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fZW50cnlfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQyMi1cXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuZnMvYmluZm10X21pc2MuYzoxNDIzOlxcdC53cml0ZVxcdFxcdD0gYm1fZW50cnlfd3JpdGUsXFxuZnMvYmluZm10X21pc2MuYy0xNDI0LVxcdC5sbHNlZWtcXHRcXHQ9IHNlcV9sc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDc6NTkuMzg1NDQ2ODIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODYzMjA3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIENvbXBsZXRlIEZpbGUgT3BlcmF0aW9uIENvdmVyYWdlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBcIkhhdmUgd2UgdHJ1bHkgYWNjb3VudGVkIGZvciAqYWxsKiB0aGUgZmlsZSBvcGVyYXRpb25zIGhlcmU/XCIgSXQncyBhIGNyaXRpY2FsIHF1ZXN0aW9uIHRvIGFzaywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb21wbGV4IGRhdGEgbWFuaXB1bGF0aW9uLiBNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBxdWlja2x5IGFuZCBjb21wcmVoZW5zaXZlbHkgc2NhbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgdG8gc2VlIGlmIHdlJ3ZlIG1pc3NlZCBhbnl0aGluZy4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBhcmVhcyB3aGVyZSB3ZSBwdXQgaW5mb3JtYXRpb24gaW50byBhIHN5c3RlbSwgd2hpY2ggc2hvdWxkIGNvdmVyIHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3RzLiBcIkxldCdzIGNoZWNrIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYFwiLiBJJ2xsIHVzZSB0aGF0IGFzIGEganVtcGluZy1vZmYgcG9pbnQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNhcHR1cmVkIHRoZSBjb3JlIGFjdGlvbnMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDg6MzAuMjQ4NjU2OTMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0MDQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW50cnlfcHV0X2ludGVycHJldGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9MjczPXN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjg0LS8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6Mjg1OnN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtMjg2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MzcxPXN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTM3Ni1cXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZlLVxcdTAwM2V1c2VycykpIHtcXG5mcy9iaW5mbXRfbWlzYy5jOjM3NzpcXHRcXHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xcbmZzL2JpbmZtdF9taXNjLmMtMzc4LVxcdFxcdC8qIFdhbGtlcnMgbWF5IHN0aWxsIGRlcmVmZXJlbmNlIHRoaXMgZW50cnksIGV2ZW4gc2xlZXBpbmcuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ4OjMwLjQ3NDA3Mjg5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA0MTI5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBiaW5mbXRfaGFuZGxlciBSZW1vdmFsKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBgcHV0X2JpbmZtdF9oYW5kbGVyYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSAqcmVtb3ZhbCogb2YgYSBiaW5mbXQgaGFuZGxlci4gVGhhdCBtYWtlcyBpbW1lZGlhdGUgc2Vuc2U7IHdlIG5lZWQgYSBtZWNoYW5pc20gdG8gZ3JhY2VmdWxseSBjbGVhbiB1cCBhZnRlciBhIGhhbmRsZXIgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4gTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgZXhhY3RseS4gV2hhdCBjbGVhbnVwIHRhc2tzIGFyZSBpbml0aWF0ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSBmcmVlZD8gSSBleHBlY3QgYSB3ZWxsLWRlc2lnbmVkIGhhbmRsZXIgd2lsbCBoYXZlIGFsbG9jYXRlZCBzb21lIGtlcm5lbCBzdHJ1Y3R1cmVzIGFuZCBwZXJoYXBzIGZpbGUgZGVzY3JpcHRvcnMsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgaXMgZnJlZWQgYW5kIGlmIHdlIGFyZSBjYWxsaW5nIGFwcHJvcHJpYXRlIGRlc3RydWN0aW9uIGZ1bmN0aW9ucyBmb3IgdGhhdCBkYXRhLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN0YWJpbGl0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLiBMZXQncyBkaWcgaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBwdXRfYmluZm10X2hhbmRsZXJgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ4OjM4LjQ3ODIwNTQ5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MjQ1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHV0X2JpbmZtdF9oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz0zNTI9c3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTM2Mi0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjM2MzogKiBwdXRfYmluZm10X2hhbmRsZXIgLSBwdXQgYmluYXJ5IGhhbmRsZXIgZW50cnlcXG5mcy9iaW5mbXRfbWlzYy5jLTM2NC0gKiBAZTogZW50cnkgdG8gcHV0XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTM3MC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjM3MTpzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtMzcyLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzgyLVxcbmZzL2JpbmZtdF9taXNjLmM6MzgzOkRFRklORV9GUkVFKHB1dF9iaW5mbXRfaGFuZGxlciwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICosIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXFxuZnMvYmluZm10X21pc2MuYy0zODQtXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTYyMT1zdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9iaW5mbXRfbWlzYy5jLTYyMi17XFxuZnMvYmluZm10X21pc2MuYzo2MjM6XFx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpmbXQgX19mcmVlKHB1dF9iaW5mbXRfaGFuZGxlcikgPSBOVUxMO1xcbmZzL2JpbmZtdF9taXNjLmMtNjI0LVxcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz04NDg9c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTk5NC1cXG5mcy9iaW5mbXRfbWlzYy5jOjk5NTpcXHQvKiBCb3JuIGhvbGRpbmcgb25lIHJlZmVyZW5jZTsgcHV0X2JpbmZtdF9oYW5kbGVyKCkgaXMgdGhlIHRlYXJkb3duLiAqL1xcbmZzL2JpbmZtdF9taXNjLmMtOTk2LVxcdHJlZmNvdW50X3NldChcXHUwMDI2ZS1cXHUwMDNldXNlcnMsIDEpO1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMTQ5PXN0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExNjItXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuZnMvYmluZm10X21pc2MuYzoxMTYzOlxcdFxcdHB1dF9iaW5mbXRfaGFuZGxlcihlKTtcXG5mcy9iaW5mbXRfbWlzYy5jLTExNjQtXFx0fVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNDYyPXN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDY0LXtcXG5mcy9iaW5mbXRfbWlzYy5jOjE0NjU6XFx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplIF9fZnJlZShwdXRfYmluZm10X2hhbmRsZXIpID0gTlVMTDtcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjYtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ4OjM4LjUyNjEzNTE4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA3NTI3NjM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJpbmZtdF9taXNjIEludGVycHJldGVyIExpbWl0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGJtX3JlZ2lzdGVyX3dyaXRlYCwgYGJtX2VudHJ5X3dyaXRlYCwgYGJtX2V2aWN0X2lub2RlYCwgYW5kIGBsb2FkX21pc2NfYmluYXJ5YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYGJpbmZtdF9taXNjYCwgc3BlY2lmaWNhbGx5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMuIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgYXBwcm9hY2ggdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLlxuXG5JIHNlZSB0aGF0IGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCBoYXMgYmVlbiBpbnRyb2R1Y2VkLCBhbG9uZyB3aXRoIHJlbGF0ZWQgZGVmaW5pdGlvbnMgaW4gYHVjb3VudC5jYCBhbmQgYHVzZXJfbmFtZXNwYWNlLmhgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgY29udHJvbCBsaWtlbHkgcmVzaWRlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoYXQgY291bnRlciBpcyBpbXBsZW1lbnRlZCBhbmQgdXNlZC5cblxuQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX0JJTkZNVF9NSVNDYCBhbmQgYENPTkZJR19VU0VSX05TYC4gTWFrZXMgc2Vuc2U7IGBDT05GSUdfVVNFUl9OU2AgaXMgY3J1Y2lhbCBmb3IgbmFtZXNwYWNlLWF3YXJlIGxpbWl0cy4gVGltZSB0byBkaXZlIGludG8gYGZzL0tjb25maWcuYmluZm10YCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFyb3VuZCBgQklORk1UX01JU0NgLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gY29uZmlnIG9wdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgaG93IHRvIG1hbmFnZSB0aGlzIGludGVycHJldGVyIGxpbWl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0OToxMy42MDE0MTU2MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjYwMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCSU5GTVRfTUlTQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnLmJpbmZtdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxcbmZzL0tjb25maWcuYmluZm10OjE0NTpjb25maWcgQklORk1UX01JU0NcXG5mcy9LY29uZmlnLmJpbmZtdC0xNDYtXFx0dHJpc3RhdGUgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBNSVNDIGJpbmFyaWVzXFxcIlxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxcbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQklORk1UX01JU0NfQlBGXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVxcdGJvb2wgXFxcIkJQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ5OjEzLjY1MzA4MjA0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjc1MDc1MTQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBrZXJuZWw6XG5cbioqRGVsdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlczogRXhhbWluaW5nIGBrZXJuZWwvdWNvdW50LmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgcGVyaGFwcyBjb25maXJtIGEgaHVuY2gsIGFib3V0IGhvdyB1c2VyIG5hbWVzcGFjZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGtlcm5lbC91Y291bnQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBhbnkgY29kZSByZWxhdGVkIHRvIGBVU0VSX05TYC4gSXQncyBhIGtleSBzdHJ1Y3R1cmUgYW5kIG1lY2hhbmlzbSwgYW5kIHRoYXQgZmlsZSBpcyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbG9naWMgZm9yIG1hbmFnaW5nIHVzZXIgbmFtZXNwYWNlIHJlc291cmNlIGFjY291bnRpbmcsIHBlcmhhcHMgdXNlciBJRCBtYXBwaW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBzeXN0ZW0gY2FsbHMuIFRoZSBjb2RlIGluIGB1Y291bnQuY2Agc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBrZXJuZWwgdHJhY2tzIGFuZCBsaW1pdHMgcmVzb3VyY2UgY29uc3VtcHRpb24gd2l0aGluIHRoZXNlIGlzb2xhdGVkIHVzZXIgZW52aXJvbm1lbnRzLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIGhvdyB1c2VyIG5hbWVzcGFjZXMgb3BlcmF0ZS4gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyBkZXRhaWwgZm9yIGxhdGVyIGluIHRoaXMgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0OTozMC40MDM4MzU4NDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTc0NDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUl9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0Mjk9Y29uZmlnIElQQ19OU1xcbi0tXFxuaW5pdC9LY29uZmlnLTE0MzYtXFxuaW5pdC9LY29uZmlnOjE0Mzc6Y29uZmlnIFVTRVJfTlNcXG5pbml0L0tjb25maWctMTQzOC1cXHRib29sIFxcXCJVc2VyIG5hbWVzcGFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDk6MzAuNjIzNTg3MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMDIyOTE2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJJTkZNVF9NSVNDIGFuZCBVU0VSX05TIGZvciBSZWxldmFudCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEJJTkZNVF9NSVNDYCBhbmQgYFVTRVJfTlNgIGFzIG15IGNvbmZpZyBjb250ZXh0LiBUaGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBgYm1fZW50cnlfd3JpdGVgLCBgYm1fZXZpY3RfaW5vZGVgLCBhbmQgYGxvYWRfbWlzY19iaW5hcnlgLiBSaWdodCBub3csIGl0IGxvb2tzIGxpa2UgYGJtX2VudHJ5X3dyaXRlYCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhcmUgdGhlIGNydWNpYWwgb25lcyBiZWNhdXNlICp0aGV5KiBhcmUgd2hhdCBjYWxsIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgLCBhbmQgdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGBpbmNfdWNvdW50YC4gT24gdGhlIGZsaXAgc2lkZSwgYGJtX2V2aWN0X2lub2RlYCBpcyBsaW5rZWQgdG8gYHB1dF9iaW5mbXRfaGFuZGxlcmAsIHdoaWNoIGNhbGxzIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCwgdGhhdCB0aGVuIGRvZXMgdGhlIGBkZWNfdWNvdW50YCBvcGVyYXRpb24uXG5cbkxldCdzIGRyaWxsIGRvd24uIGBibV9yZWdpc3Rlcl93cml0ZWAgbG9va3Mgc29saWQ7IGl0IGhhbmRsZXMgd3JpdGVzIHRvIGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgLiAgYGJtX2VudHJ5X3dyaXRlYCBpcyBzaW1pbGFybHkgZm9jdXNlZCBvbiB3cml0ZXMgdG8gYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9cdTAwM2NlbnRyeVx1MDAzZWAuICBgYm1fZXZpY3RfaW5vZGVgIGlzIHRyaWdnZXJlZCB3aGVuIGEgYmluZm10IGVudHJ5IGZpbGUgZ2V0cyByZW1vdmVkLiBBbmQgYGxvYWRfbWlzY19iaW5hcnlgIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBhIGJpbmFyeSBpcyBleGVjdXRlZC4gU28sIGNvbnNpZGVyaW5nIHRoYXQsIEknbSBkZWZpbml0ZWx5IGluY2x1ZGluZyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBgYm1fZW50cnlfd3JpdGVgIGluIG15IGFuYWx5c2lzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIHN0YXRpYyBpc3N1ZS4gYGJtX3JlZ2lzdGVyX3dyaXRlYCAqaXMqIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgb2ZmIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBIb3dldmVyLCB0aGVzZSBgYm1fKmAgZnVuY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3RzLiBUaGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGFuZCB0aGV5ICphcmVuJ3QqIGlubGluZWQuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBvcHRpb24/XG5cbmBpbmNfdWNvdW50YCBhbmQgYGRlY191Y291bnRgIGFyZSBleHBvcnRlZCwgYnV0IHRob3NlIGFyZSBqdXN0IGdlbmVyaWMgdXRpbGl0aWVzLiBMZXQgbWUgY2hlY2sgaWYgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgaXMgaW5saW5lZC4gSXQncyBzdGF0aWMsIGJ1dCB0aGF0IGRvZXNuJ3QgKmF1dG9tYXRpY2FsbHkqIG1lYW4gaXQncyBpbmxpbmVkLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGZzL2JpbmZtdF9taXNjLmNgIGZvciBzb21lIG1vcmUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDEsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDk6NDEuNjI1ODgyOTc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM3MTI0NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ5OjQxLjY3NzI2NDI0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5Mzk5ODU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipGaW5kaW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSBpbiBgZnMvYmluZm10X21pc2MuY2AqKlxuXG5SaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBmcy9iaW5mbXRfbWlzYy5jYC4gV2h5PyBXZWxsLCBwcm9iYWJseSBiZWNhdXNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGR5bmFtaWNhbGx5IGhhbmRsZXMgZXhlY3V0YWJsZSBmb3JtYXRzLCBvciBwZXJoYXBzIEknbSBsb29raW5nIHRvIGV4dGVuZCBpdHMgY2FwYWJpbGl0aWVzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsaW1pdGVkIGluIHNjb3BlLCBhbmQgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHNvIHRvIHNwZWFrLCBvZiB0aGF0IGZpbGUuIFRoZXkncmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzLCB0aGUgdGhpbmdzIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIHVzZXItc3BhY2UgbWlnaHQgY2FsbCBpbnRvLiBUaGVyZWZvcmUsIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIG9uZXMgaXMgdGhlIGJlc3QgZmlyc3Qgc3RlcC4gTGV0J3Mgc2VlIHdoYXQncyBjYWxsYWJsZSBieSBvdGhlciBtb2R1bGVzIG9yIHRoZSBrZXJuZWwgYXMgYSB3aG9sZS4gSSBleHBlY3QgdGhlc2Ugd2lsbCBiZSB0aGUgZnVuY3Rpb25zIG1hbmFnaW5nIHRoZSByZWdpc3RyYXRpb24sIGxvYWRpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZm9ybWF0cyBhcmUgaGFuZGxlZCBhbmQgd2hhdCBob29rcyBhcmUgYXZhaWxhYmxlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAxLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MTQuNjcxMjY3NzE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1NzU3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MTQuNzIxMjMzNzE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Mzc4MTAxMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBUeXBlIFF1YWxpZmllcnMgZm9yIFNpemUtUmVsYXRlZCBWYXJpYWJsZXMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBkZXNpZ24gcHJvYmxlbSwgYW5kIEknbSBhdCB0aGUgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHNldHRsZSBvbiBhIHR5cGUgcXVhbGlmaWVyIGZvciBhIHZhcmlhYmxlIGxpa2VseSB0byBob2xkIHNpemUgaW5mb3JtYXRpb24uIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJMZXQncyBzZWUsIHdoYXQgYXJlIHRoZSBiZXN0IG9wdGlvbnMgaGVyZT9cIiBNeSBpbml0aWFsIGluc3RpbmN0IGxlYW5zIHRvd2FyZHMgdHJ5aW5nIGBedm9pZGAgb3IgYF5zc2l6ZV90YC4gSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byBhc3Nlc3MgdGhlIHRyYWRlb2Zmcy4gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiBIb3cgZG9lcyB0aGlzIGltcGFjdCBwb3J0YWJpbGl0eT8gSXMgYF52b2lkYCBvdmVybHkgZ2VuZXJpYywgb3IgZG9lcyBpdCBvZmZlciBzb21lIHBvdGVudGlhbCBmb3IgZnV0dXJlIGZsZXhpYmlsaXR5PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgXnNzaXplX3RgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoOiBXaGF0J3MgdGhlIHRhcmdldCBwbGF0Zm9ybSwgYW5kIHdpbGwgaXQgYmUgdGhlIGJlc3Qgb3B0aW9uIGhlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTI3LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MzAuMDk5MzM3ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzk2Njc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8c3NpemVfdHxpbnQpIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo1MDozMC4xNDkxNDIzNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxMDkwNzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQSBGb2N1c2VkIEFwcHJvYWNoKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBpbW1lZGlhdGVseSBlbmdhZ2Ugd2l0aCB0aGUgY29yZSBlbGVtZW50OiB0aGUgZmlsZSBpdHNlbGYuIFRoZXJlJ3Mgbm8gbmVlZCB0byBvdmVydGhpbmsgdGhlIHNpdHVhdGlvbiBvciBnZXQgYm9nZ2VkIGRvd24gaW4gYW5jaWxsYXJ5IGNvbmNlcm5zLiBMZXQncyBjdXQgdGhyb3VnaCB0aGUgbm9pc2UgYW5kIGRpcmVjdGx5IGFzc2VzcyB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24uIEp1bXBpbmcgc3RyYWlnaHQgaW50byB0aGUgZmlsZSBpcyB0aGUgbW9zdCBlZmZpY2llbnQgYW5kIHByYWN0aWNhbCBzdGFydGluZyBwb2ludC4gVGhhdCBpbml0aWFsIHNjYW4gYW5kIHBhcnNlIHdpbGwgaW5mb3JtIG15IHN1YnNlcXVlbnQgZXZhbHVhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjUwOjM2Ljg2MDA1MzM0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYmluZm10X21pc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogYmluZm10X21pc2MuY1xcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEfDvG50aGVyXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogYmluZm10X21pc2MgZGV0ZWN0cyBiaW5hcmllcyB2aWEgYSBtYWdpYyBvciBmaWxlbmFtZSBleHRlbnNpb24gYW5kIGludm9rZXNcXG4gICA4OlxcdCAqIGEgc3BlY2lmaWVkIHdyYXBwZXIuIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FycmF5X3NpemUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpbmZtdHMuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jdHlwZS5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3N0cnRveC5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWdpYy5oXFx1MDAzZVxcbiAgMzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMzE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbiAgMzI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gIDMzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICAzNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMzY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NyY3UuaFxcdTAwM2VcXG4gIDM3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDM4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfaGVscGVycy5oXFx1MDAzZVxcbiAgMzk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gIDQwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbiAgNDE6XFx0XFxuICA0MjpcXHQjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0LyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqL1xcbiAgNDU6XFx0ZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHtcXG4gIDQ2OlxcdFxcdE1JU0NfRk1UX0VOQUJMRURfQklUXFx0PSAwLFxcbiAgNDc6XFx0XFx0TUlTQ19GTVRfTUFHSUNfQklUXFx0PSAxLFxcbiAgNDg6XFx0XFx0TUlTQ19GTVRfQlBGX0JJVFxcdD0gMixcXG4gIDQ5OlxcdH07XFxuICA1MDpcXHRcXG4gIDUxOlxcdC8qIEVudHJ5IGJlaGF2aW9yIGZsYWdzLCBmaXhlZCBhdCByZWdpc3RyYXRpb24gdGltZS4gKi9cXG4gIDUyOlxcdGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xcbiAgNTM6XFx0XFx0TUlTQ19GTVRfUFJFU0VSVkVfQVJHVjBcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAzMSksXFxuICA1NDpcXHRcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWVxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDMwKSxcXG4gIDU1OlxcdFxcdE1JU0NfRk1UX0NSRURFTlRJQUxTXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjkpLFxcbiAgNTY6XFx0XFx0TUlTQ19GTVRfT1BFTl9GSUxFXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjgpLFxcbiAgNTc6XFx0XFx0TUlTQ19GTVRfVFJBTlNQQVJFTlRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyNyksXFxuICA1ODpcXHRcXHRNSVNDX0ZNVF9MT0FERVJcXHRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyNiksXFxuICA1OTpcXHRcXHRNSVNDX0ZNVF9ESVNBQkxFRFxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDI1KSxcXG4gIDYwOlxcdH07XFxuICA2MTpcXHRcXG4gIDYyOlxcdC8qIFRoZSBmbGFncyB0aGF0IHNoYXBlIHRoZSBpbnZvY2F0aW9uOyBhICdCJyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqL1xcbiAgNjM6XFx0I2RlZmluZSBNSVNDX0ZNVF9JTlZPQ0FUSU9OX0ZMQUdTIChNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCB8XFx0XFxcXFxcbiAgNjQ6XFx0XFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFxcdFxcXFxcXG4gIDY1OlxcdFxcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX0NSRURFTlRJQUxTIHxcXHRcXFxcXFxuICA2NjpcXHRcXHRcXHRcXHRcXHQgICBNSVNDX0ZNVF9PUEVOX0ZJTEUgfFxcdFxcdFxcXFxcXG4gIDY3OlxcdFxcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX1RSQU5TUEFSRU5UIHxcXHRcXFxcXFxuICA2ODpcXHRcXHRcXHRcXHRcXHQgICBNSVNDX0ZNVF9MT0FERVIpXFxuICA2OTpcXHRcXG4gIDcwOlxcdC8qKlxcbiAgNzE6XFx0ICogc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgLSBhIGZsYWcgY2hhcmFjdGVyIG9mIHRoZSByZWdpc3RlciBzdHJpbmdcXG4gIDcyOlxcdCAqIEBjOiB0aGUgY2hhcmFjdGVyIHVzZXJzcGFjZSB3cml0ZXMgYW5kIHJlYWRzIGJhY2tcXG4gIDczOlxcdCAqIEBmbGFnOiB0aGUgZW50cnkgZmxhZyBpdCBzZXRzXFxuICA3NDpcXHQgKiBAaW1wbGllczogZW50cnkgZmxhZ3MgaXQgdHVybnMgb24gaW4gYWRkaXRpb25cXG4gIDc1OlxcdCAqIEBkZXNjOiB3aGF0IGl0IGRvZXMsIGZvciB0aGUgcmVnaXN0cmF0aW9uIGRlYnVnIG91dHB1dFxcbiAgNzY6XFx0ICovXFxuICA3NzpcXHRzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XFxuICA3ODpcXHRcXHRjaGFyXFx0XFx0YztcXG4gIDc5OlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRmbGFnO1xcbiAgODA6XFx0XFx0dW5zaWduZWQgbG9uZ1xcdGltcGxpZXM7XFxuICA4MTpcXHRcXHRjb25zdCBjaGFyXFx0KmRlc2M7XFxuICA4MjpcXHR9O1xcbiAgODM6XFx0XFxuICA4NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgbWlzY19mbGFnc1tdID0ge1xcbiAgODU6XFx0XFx0eyAnUCcsIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwLFxcdDAsXFx0XFx0XFx0XFxcInByZXNlcnZlIGFyZ3YwXFxcIlxcdFxcdH0sXFxuICA4NjpcXHRcXHR7ICdPJywgTUlTQ19GTVRfT1BFTl9CSU5BUlksXFx0MCxcXHRcXHRcXHRcXFwib3BlbiBiaW5hcnlcXFwiXFx0XFx0XFx0fSxcXG4gIDg3OlxcdFxcdHsgJ0MnLCBNSVNDX0ZNVF9DUkVERU5USUFMUyxcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWSxcXHRcXFwiY3JlZGVudGlhbHMgZnJvbSB0aGUgYmluYXJ5XFxcIlxcdH0sXFxuICA4ODpcXHRcXHR7ICdGJywgTUlTQ19GTVRfT1BFTl9GSUxFLFxcdDAsXFx0XFx0XFx0XFxcIm9wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcXFwiXFx0fSxcXG4gIDg5OlxcdFxcdHsgJ1QnLCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWSxcXHRcXFwidHJhbnNwYXJlbnRcXFwiXFx0XFx0XFx0fSxcXG4gIDkwOlxcdFxcdHsgJ0wnLCBNSVNDX0ZNVF9MT0FERVIsXFx0XFx0MCxcXHRcXHRcXHRcXFwibG9hZGVyIHN1YnN0aXR1dGlvblxcXCJcXHRcXHR9LFxcbiAgOTE6XFx0XFx0eyAnRCcsIE1JU0NfRk1UX0RJU0FCTEVELFxcdDAsXFx0XFx0XFx0XFxcInJlZ2lzdGVyIGRpc2FibGVkXFxcIlxcdFxcdH0sXFxuICA5MjpcXHR9O1xcbiAgOTM6XFx0XFxuICA5NDpcXHQvKiBMb29rIHVwIGEgZmxhZyBjaGFyYWN0ZXIsIE5VTEwgaWYgQGMgaXMgbm90IG9uZS4gKi9cXG4gIDk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1pc2NfZmxhZ3MpOyBpKyspXFxuICA5ODpcXHRcXHRcXHRpZiAobWlzY19mbGFnc1tpXS5jID09IGMpXFxuICA5OTpcXHRcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNm1pc2NfZmxhZ3NbaV07XFxuIDEwMDpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MzYuODYwMjA2NzMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTgzODMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRvIHRoaXMuIEhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRGlnaXRhbCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJJ20gYXQgYSBwb2ludCBpbiB0aGlzIHByb2Nlc3Mgd2hlcmUgSSd2ZSBhbmFseXplZCBhIHNwZWNpZmljIHBhcnQsIGFuZCBpdCdzIHRpbWUgdG8gYnJvYWRlbiBteSBwZXJzcGVjdGl2ZS4gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgZWxlbWVudCwgYnV0IHRvIGJlIHRydWx5IHRob3JvdWdoLCBJIG5lZWQgdG8gem9vbSBvdXQuIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZVwiLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJJ20gbWVudGFsbHkgYnVpbGRpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBzbmlwcGV0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgb3ZlcmFsbCBkYXRhIHN0cnVjdHVyZSwgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgd2lkZXIgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRoZXJlIGNvdWxkIGJlIGNyaXRpY2FsIGNvbm5lY3Rpb25zIGFuZCBpbXBsaWNpdCBhc3N1bXB0aW9ucywgYWxsIG9mIHdoaWNoIG1pZ2h0IGJlIHJldmVhbGVkIHRocm91Z2ggYnJvYWRlciBjb250ZXh0LiBTbywgSSdsbCBiZSBnb2luZyB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRvIHNlZSBob3cgdGhpcyBhcmVhIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6NDEuOTE4NTkzOTcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzNDIzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9Nzc9c3RydWN0IGJpbmZtdF9taXNjX2ZsYWcge1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy04My1cXG5mcy9iaW5mbXRfbWlzYy5jOjg0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7XFxuZnMvYmluZm10X21pc2MuYy04NS1cXHR7ICdQJywgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAsXFx0MCxcXHRcXHRcXHRcXFwicHJlc2VydmUgYXJndjBcXFwiXFx0XFx0fSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtOTQtLyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXFxuZnMvYmluZm10X21pc2MuYzo5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgKm1pc2NfZmxhZ19ieV9jaGFyKGNvbnN0IGNoYXIgYylcXG5mcy9iaW5mbXRfbWlzYy5jLTk2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQwPURFRklORV9TVEFUSUNfU1JDVV9GQVNUKGJtX2VudHJpZXNfc3JjdSk7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0Mi0vKiBDaGVjayBpZiBAZSdzIG1hZ2ljIG1hdGNoZXMgQGJwcm0ncyBidWZmZXIsIGFwcGx5aW5nIHRoZSBtYXNrIGlmIHNldC4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjE0MzpzdGF0aWMgYm9vbCBlbnRyeV9tYXRjaGVzX21hZ2ljKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTgtLyogQ2hlY2sgaWYgQGUncyByZWdpc3RlcmVkIGV4dGVuc2lvbiBtYXRjaGVzIEBleHQsIE5VTEwgaWYgdGhlcmUgaXMgbm9uZS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjE1OTpzdGF0aWMgYm9vbCBlbnRyeV9tYXRjaGVzX2V4dGVuc2lvbihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy0xNjAtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmV4dClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTgxLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTgyOnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKlxcbmZzL2JpbmZtdF9taXNjLmMtMTgzLXNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTIzMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjIzMTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpnZXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMjMyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0yNDY9YmluZm10X21pc2NfZmluZF9pbnRlcnAoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaW50ZXJwcywgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjU2LS8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjI1NzpzdGF0aWMgdm9pZCBjbG9zZV9pbnRlcnBfZmlsZShzdHJ1Y3QgZmlsZSAqZilcXG5mcy9iaW5mbXRfbWlzYy5jLTI1OC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTI2NT1ERUZJTkVfRlJFRShjbG9zZV9pbnRlcnBfZmlsZSwgc3RydWN0IGZpbGUgKiwgY2xvc2VfaW50ZXJwX2ZpbGUoX1QpKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0yNzItICovXFxuZnMvYmluZm10X21pc2MuYzoyNzM6c3RhdGljIHN0cnVjdCBmaWxlICpvcGVuX2ludGVycF9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBjaGFyICpwYXRoKVxcbmZzL2JpbmZtdF9taXNjLmMtMjc0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjg0LS8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6Mjg1OnN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtMjg2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzEzLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MzE0OnN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTMxNS1cXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzUxLVxcbmZzL2JpbmZtdF9taXNjLmM6MzUyOnN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmZzL2JpbmZtdF9taXNjLmMtMzUzLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzcwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MzcxOnN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuZnMvYmluZm10X21pc2MuYy0zNzIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0zODM9REVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzg1LS8qIERyb3AgZXZlcnl0aGluZyBhIGxvYWQgcHJvZ3JhbSBzdGFnZWQgZm9yIHRoaXMgZXhlYy4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjM4NjpzdGF0aWMgdm9pZCBkcm9wX3N0YWdlZF9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9iaW5mbXRfbWlzYy5jLTM4Ny17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQxMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjQxMTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXFxuZnMvYmluZm10X21pc2MuYy00MTIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy00MzctICovXFxuZnMvYmluZm10X21pc2MuYzo0Mzg6c3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy00MzktXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQ4OC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjQ4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTQ5MC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNTI3LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NTI4OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy01MjktXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNTcwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NTcxOnN0YXRpYyBpbnQgYnVpbGRfaW50ZXJwX2FyZ3Yoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqaW50ZXJwcmV0ZXIsXFxuZnMvYmluZm10X21pc2MuYy01NzItXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy02MjAtICovXFxuZnMvYmluZm10X21pc2MuYzo2MjE6c3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuZnMvYmluZm10X21pc2MuYy02MjIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy03MDItICovXFxuZnMvYmluZm10X21pc2MuYzo3MDM6c3RhdGljIGNoYXIgKnNjYW5hcmcoY2hhciAqcywgY2hhciBkZWwpXFxuZnMvYmluZm10X21pc2MuYy03MDQte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy03MjAtLyogUGFyc2UgdGhlICdmbGFncycgZmllbGQsIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBpcyBub3Qgb25lLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NzIxOnN0YXRpYyBjaGFyICpjaGVja19zcGVjaWFsX2ZsYWdzKGNoYXIgKnAsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTcyMi17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTczMy0vKiBQYXJzZSB0aGUgJ29mZnNldCcsICdtYWdpYycgYW5kICdtYXNrJyBmaWVsZHMgb2YgYW4gJ00nIGVudHJ5LiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NzM0OnN0YXRpYyBjaGFyICpwYXJzZV9tYWdpY19maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcXG5mcy9iaW5mbXRfbWlzYy5jLTczNS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTc5NC0vKiBQYXJzZSB0aGUgJ21hZ2ljJyBmaWVsZCBvZiBhbiAnRScgZW50cnk6IHRoZSBmaWxlbmFtZSBleHRlbnNpb24uICovXFxuZnMvYmluZm10X21pc2MuYzo3OTU6c3RhdGljIGNoYXIgKnBhcnNlX2V4dGVuc2lvbl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLFxcbmZzL2JpbmZtdF9taXNjLmMtNzk2LVxcdFxcdFxcdFxcdCAgICBjaGFyIGRlbClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtODI1LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6ODI2OnN0YXRpYyBjaGFyICpwYXJzZV9icGZfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXFxuZnMvYmluZm10X21pc2MuYy04Mjcte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy04NDctICovXFxuZnMvYmluZm10X21pc2MuYzo4NDg6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy04NDktXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMDAxPWVudW0gYm1fY29tbWFuZCB7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEwMTQtICovXFxuZnMvYmluZm10X21pc2MuYzoxMDE1OnN0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpXFxuZnMvYmluZm10X21pc2MuYy0xMDE2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTAzMi0vKiBDb3B5IGluIGEgY29tbWFuZCBmcm9tIGEgZmlsZSB0aGF0IHRha2VzIG5vdGhpbmcgZWxzZSwgYW5kIHBhcnNlIGl0LiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTAzMzpzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXFxuZnMvYmluZm10X21pc2MuYy0xMDM0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTA0Ni0vKiBUaGUgcm9vdCBkaXJlY3RvcnkncyBpbm9kZTsgaXRzIGxvY2sgc2VyaWFsaXplcyBjb25maWd1cmluZyBhbiBpbnN0YW5jZS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEwNDc6c3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2JpbmZtdF9taXNjLmMtMTA0OC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTEtXFxuZnMvYmluZm10X21pc2MuYzoxMDUyOnN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpXFxuZnMvYmluZm10X21pc2MuYy0xMDUzLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTA1Ny1cXG5mcy9iaW5mbXRfbWlzYy5jOjEwNTg6c3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKVxcbmZzL2JpbmZtdF9taXNjLmMtMTA1OS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExMDctXFxuZnMvYmluZm10X21pc2MuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bW9kZV90IG1vZGUpXFxuZnMvYmluZm10X21pc2MuYy0xMTA5LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTEzMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExMzE6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqaV9iaW5mbXRfbWlzYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2JpbmZtdF9taXNjLmMtMTEzMi17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExNDgtKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExNDk6c3RhdGljIHZvaWQgYm1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTExNTAte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTc4LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTE3OTpzdGF0aWMgdm9pZCB1bmxpbmtfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMTE4MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTE5NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExOTU6c3RhdGljIHZvaWQgcmVtb3ZlX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG5mcy9iaW5mbXRfbWlzYy5jLTExOTYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyMDItLyogUmVtb3ZlIEBlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTIwMzpzdGF0aWMgdm9pZCBibV9yZW1vdmVfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2JpbmZtdF9taXNjLmMtMTIwNC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyMTQtLyogUmVtb3ZlIGFsbCBlbnRyaWVzIG9mIHRoZSBiaW5mbXRfbWlzYyBpbnN0YW5jZSBAbWlzYyBiZWxvbmdpbmcgdG8gQHNiLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTIxNTpzdGF0aWMgdm9pZCBibV9yZW1vdmVfYWxsX2VudHJpZXMoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMTIxNi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNDUtICovXFxuZnMvYmluZm10X21pc2MuYzoxMjQ2OnN0YXRpYyBpbnQgYm1fdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvYmluZm10X21pc2MuYy0xMjQ3LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTI1Ni1cXG5mcy9iaW5mbXRfbWlzYy5jOjEyNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJtX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTI1OC1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjYzLVxcbmZzL2JpbmZtdF9taXNjLmM6MTI2NDpzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvYmluZm10X21pc2MuYy0xMjY1LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTMwMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEzMDE6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy0xMzAyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTM2MS1cXG5mcy9iaW5mbXRfbWlzYy5jOjEzNjI6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xMzYzLVxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDE5LVxcbmZzL2JpbmZtdF9taXNjLmM6MTQyMDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9lbnRyeV9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTQyMS1cXHQub3BlblxcdFxcdD0gYm1fZW50cnlfb3BlbixcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQzMC0vKiBhZGQgdG8gZmlsZXN5c3RlbSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTQzMTpzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmluZm10X21pc2MuYy0xNDMyLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ2MS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE0NjI6c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xNDYzLVxcdFxcdFxcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTUwMi1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1MDM6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE1MDQtXFx0LndyaXRlXFx0XFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTUwOS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1MTA6c3RhdGljIHNzaXplX3RcXG5mcy9iaW5mbXRfbWlzYy5jLTE1MTEtYm1fc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTUyMC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1MjE6c3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbmZzL2JpbmZtdF9taXNjLmMtMTUyMi1cXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTU0NC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fc3RhdHVzX29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNTQ2LVxcdC5yZWFkXFx0XFx0PSBibV9zdGF0dXNfcmVhZCxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTU1Mi1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJtX3N1cGVyX29wcyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTQtXFx0LnN0YXRmc1xcdFxcdD0gc2ltcGxlX3N0YXRmcyxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTU1Ny1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTg6c3RhdGljIGludCBibV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTkte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjMwLVxcbmZzL2JpbmZtdF9taXNjLmM6MTYzMTpzdGF0aWMgdm9pZCBibV9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE2MzIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjM2LVxcbmZzL2JpbmZtdF9taXNjLmM6MTYzNzpzdGF0aWMgaW50IGJtX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE2Mzgte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjQxLVxcbmZzL2JpbmZtdF9taXNjLmM6MTY0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBibV9jb250ZXh0X29wcyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDMtXFx0LmZyZWVcXHRcXHQ9IGJtX2ZyZWUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDYtXFxuZnMvYmluZm10X21pc2MuYzoxNjQ3OnN0YXRpYyB2b2lkIGJtX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDgte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjU0LVxcbmZzL2JpbmZtdF9taXNjLmM6MTY1NTpzdGF0aWMgaW50IGJtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvYmluZm10X21pc2MuYy0xNjU2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY2MC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NjE6c3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgbWlzY19mb3JtYXQgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNjYyLVxcdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY2NS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NjY6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGJtX2ZzX3R5cGUgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNjY3LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE2NzM9TU9EVUxFX0FMSUFTX0ZTKFxcXCJiaW5mbXRfbWlzY1xcXCIpO1xcbmZzL2JpbmZtdF9taXNjLmMtMTY3NC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NzU6c3RhdGljIGludCBfX2luaXQgaW5pdF9taXNjX2JpbmZtdCh2b2lkKVxcbmZzL2JpbmZtdF9taXNjLmMtMTY3Ni17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2ODItXFxuZnMvYmluZm10X21pc2MuYzoxNjgzOnN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X21pc2NfYmluZm10KHZvaWQpXFxuZnMvYmluZm10X21pc2MuYy0xNjg0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6NDEuOTY2NDMzODY3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjE3MzQ0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmluRm10IE1pc2MgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIFwiZm9jdXMgc3ltYm9sc1wiIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIHdvdWxkIG1ha2UgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB0aG9zZSBhcmUgdGhlIG1vc3Qgc3RhYmxlIGFuZCBlYXNpbHkgYWNjZXNzaWJsZSBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIEluaXRpYWxseSwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCBjYXVnaHQgbXkgZXllLCBidXQgaXQncyBub3QgYSB0cnVlIEFQSSBlbnRyeSBwb2ludC4gVGhlbiBJIG5vdGljZWQgdGhhdCBgbG9hZF9taXNjX2JpbmFyeWAgKmlzKiBzdGF0aWMsIGJ1dCBpcyBhc3NpZ25lZCB0byBgbWlzY19mb3JtYXQubG9hZF9iaW5hcnlgLiBTaW1pbGFybHksIEkgc2F3IGBibV9yZWdpc3Rlcl93cml0ZWAgYXNzaWduZWQgdG8gYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMud3JpdGVgLCBgYm1fZW50cnlfd3JpdGVgIGFzc2lnbmVkIHRvIGBibV9lbnRyeV9vcGVyYXRpb25zLndyaXRlYCwgYW5kIGBibV9ldmljdF9pbm9kZWAgYXNzaWduZWQgdG8gYGJtX3N1cGVyX29wcy5ldmljdF9pbm9kZWAuIFRoZXNlIGFzc2lnbm1lbnRzLCBzcGVjaWZpY2FsbHkgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCBtYWRlIG1lIHJlYWxpemUgdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgcGxhY2VzIHRvIGZvY3VzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIG1vcmUgY2xvc2VseSwgaXQgc2VlbXMgdGhhdCBgbG9hZF9taXNjX2JpbmFyeWAgZG9lc24ndCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCwgbWVhbmluZyBpdCdzIGxlc3MgcmVsZXZhbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIGlzIGNhbGxlZCBieSBgYm1fZW50cnlfYWRkX2ludGVycGAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAsIHdoZXJlIGBibV9lbnRyeV9hZGRfaW50ZXJwYCBpcyBjYWxsZWQgYnkgYGJtX2VudHJ5X3dyaXRlYC4gIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCBpcyBjYWxsZWQgYnkgYHB1dF9iaW5mbXRfaGFuZGxlcmAsIHdoaWNoIGlzIGNhbGxlZCBieSBzZXZlcmFsIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBibV9lbnRyeV9mcmVlX3JjdWAsIGBsb2FkX21pc2NfYmluYXJ5YCwgYGNyZWF0ZV9lbnRyeWAsIGBibV9ldmljdF9pbm9kZWAsIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLlxuXG5BZnRlciB0aGlzLCBJIHJlLWV2YWx1YXRlZCBhbmQgZGVjaWRlZCB0aGF0IGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV93cml0ZWAsIGFuZCBgYm1fZXZpY3RfaW5vZGVgIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLCBob3dldmVyLCBzaW5jZSBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBgYm1fZW50cnlfd3JpdGVgIGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0dXJlLCB0aGV5IHdvbid0IGJlIGlubGluZWQuXG5cbk5vdywgbGV0J3MgbW92ZSBvbnRvIHRoZSBjb25maWd1cmF0aW9ucy4gIEkgY2hlY2tlZCBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGlkZW50aWZpZWQgYENPTkZJR19CSU5GTVRfTUlTQ2AgYW5kIGBDT05GSUdfVVNFUl9OU2AuIEhvd2V2ZXIsIGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19VU0VSX05TYCBhbmQgZGlzY292ZXJpbmcgaXQgZGVwZW5kcyBvbiBgTVVMVElVU0VSYCBhbmQgYE5BTUVTUEFDRVNgIGFuZCBzaW5jZSBgVVNFUl9OU2AgaXMgdXN1YWxseSBlbmFibGVkIGluIHN5emthbGxlciwgSSB3aWxsIGp1c3QgbGlzdCBgQklORk1UX01JU0NgIGFuZCBgVVNFUl9OU2AuXG5cbkRvdWJsZS1jaGVja2luZyBgZnMvS2NvbmZpZy5iaW5mbXRgIGZvciBgQklORk1UX01JU0NgIGNvbmZpcm1lZCBpdCBoYXMgbm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMuICBSZXZpZXdpbmcgYGtlcm5lbC91Y291bnQuY2AgZm9yIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCBzb2xpZGlmaWVzIHRoYXQgYEJJTkZNVF9NSVNDYCBpcyB0aGUgb25seSB0cnVseSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cblxuRmluYWxseSwgYSBxdWljayByZXZpZXcgb2YgdGhlIHBhdGNoJ3MgY29yZSBmdW5jdGlvbmFsaXR5OiBpdCdzIGFkZGluZyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCwgdXNpbmcgYGluY191Y291bnRgIGFuZCBgZGVjX3Vjb3VudGAgZm9yIHRoZSBjb3VudC4gVGhlIGxpbWl0IGl0c2VsZiBpcyBzZXQgdmlhIGAvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYC4gVGhlIHBhdGNoIHRvdWNoZXMgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgdG8gY2hhcmdlIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHdvcnRoIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuLSBgYm1fcmVnaXN0ZXJfd3JpdGVgXG4tIGBibV9lbnRyeV93cml0ZWBcbi0gYGJtX2V2aWN0X2lub2RlYFxuXG5BbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOlxuLSBgQklORk1UX01JU0NgXG4tIGBVU0VSX05TYFxuXG5UaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjI0LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo1MToxOS4xODM3ODA5ODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDc0MDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICAgIFwiYm1fZW50cnlfd3JpdGVcIixcbiAgICBcImJtX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgbGltaXQgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCB1c2luZyBgdWNvdW50c2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgYW5kIGBiaW5mbXRfbWlzY2AgZmlsZXN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB1bnByaXZpbGVnZWQgdXNlcnMgKGluIGEgdXNlciBuYW1lc3BhY2UpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZW1vdmFsIG9mIGBiaW5mbXRfbWlzY2AgZW50cmllcyB0byB0ZXN0IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiB0aGUgYnVkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCIsXG4gICAgXCJVU0VSX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIixcbiAgICBcImJtX2VudHJ5X3dyaXRlXCIsXG4gICAgXCJibV9ldmljdF9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIGxpbWl0IGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGluIGBiaW5mbXRfbWlzY2AgdXNpbmcgYHVjb3VudHNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGFuZCBgYmluZm10X21pc2NgIGZpbGVzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgdW5wcml2aWxlZ2VkIHVzZXJzIChpbiBhIHVzZXIgbmFtZXNwYWNlKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBvZiBgYmluZm10X21pc2NgIGVudHJpZXMgdG8gdGVzdCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb2YgdGhlIGJ1ZGdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 14:06:07 +0000 UTC FinishedAt: 2026-08-03 14:51:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8996fed3e53f53216f36183f6b6539846bc15a67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "USER_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8996fed3e53f53216f36183f6b6539846bc15a67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "USER_NS" ], "series_id": "75b41f5f-4701-4c21-8d3e-498ebcabe79f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bm_register_write", "bm_entry_write", "bm_evict_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9ldmljdF9pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBsaW1pdCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBpbiBgYmluZm10X21pc2NgIHVzaW5nIGB1Y291bnRzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBhbmQgYGJpbmZtdF9taXNjYCBmaWxlc3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAoaW4gYSB1c2VyIG5hbWVzcGFjZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgb2YgYGJpbmZtdF9taXNjYCBlbnRyaWVzIHRvIHRlc3QgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIG9mIHRoZSBidWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYmU4NTNlM2M5M2M4YzE5ZGUyYWUyMzc1ZmE3NjdlYjViZDM1NjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNDo0Njo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCA2MjJiNWQ4Yzg5OTU3Li5kMjZiNjNhMjdjMjU5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTI4LDYgJiM0MzsxMjgsMTEgQEAgVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zOlxuICAgIG5hbWVkIGJ5IGFuIGFic29sdXRlIHBhdGguIEl0IGlzIG9wZW5lZCB3aGVuIHRoZSBiaW5hcnkgaXMgZXhlY3V0ZWQsIHNvXG4gICAgYSByZWxhdGl2ZSBvbmUgd291bGQgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2ZcbiAgICB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeVxuJiM0MzsgLSB0aGUgYW1vdW50IG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGJ5IGBgRmBgLCBvciBib3VuZCB0byBhIGBgQmBgIGVudHJ5XG4mIzQzOyAgIGlzIGxpbWl0ZWQgYnkgdGhlIGBgL3Byb2Mvc3lzL3VzZXIvbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2BgIHN5c2N0bC4gQVxuJiM0MzsgICByZWdpc3RyYXRpb24gcGFzdCB0aGUgbGltaXQgaXMgcmVmdXNlZCB3aXRoIGBgLUVOT1NQQ2BgLiBUaGlzIGxpbWl0cyBhblxuJiM0MzsgICB1bnByaXZpbGVnZWQgbmFtZXNwYWNlIHBpbm5pbmcgZmlsZXMuIEEgbmVzdGVkIG5hbWVzcGFjZSBjYW4gcmFpc2Ugb25seSBpdHNcbiYjNDM7ICAgb3duIGxpbWl0IGFuZCBldmVyeSBhbmNlc3RvciBpcyBjaGFyZ2VkIHRvb1xuIFxuIFxuIFRvIHVzZSBiaW5mbXRfbWlzYyB5b3UgaGF2ZSB0byBtb3VudCBpdCBmaXJzdC4gWW91IGNhbiBtb3VudCBpdCB3aXRoXG5AQCAtMjE1LDEwICYjNDM7MjIwLDkgQEAgd2l0aCB0aGUgY3JlZGVudGlhbHMgdGhlIGVudHJ5IGZpbGUgd2FzIG9wZW5lZCB3aXRoLCBleGFjdGx5IHRoZSB3YXkgYGBGYGBcbiBwcmUtb3BlbnMgYSBzdGF0aWMgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbiBwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaXQgY2Fubm90XG4gZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XG4tYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbi1gYC1FTk9TUENgYC4gVG8gYmluZCBhIGZpbGUgdGhhdCBoYXMgbm8gcGF0aCBvZiBpdHMgb3duIC0gYWxyZWFkeVxuLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxuLW9wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4mIzQzO2JpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVycywgYW5kIGVhY2ggb25lIGlzIGNoYXJnZWQgYWdhaW5zdFxuJiM0MztgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBsaWtlIGFueSBvdGhlciBiaW5kaW5nLiBBIHdyaXRlIHBhc3QgZWl0aGVyXG4mIzQzO2xpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC5cbiBcbiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcbiBgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpYGAga2Z1bmMsIGFuZCBldmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiB0aGVcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDRcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjLmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVycCwgdG1wLCBcdTAwMjZlLVx1MDAzZWludGVycHMsIGxpc3QpIHtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2aW50ZXJwLVx1MDAzZWxpc3QpO1xuIFx0XHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXHUwMDNlZmlsZSk7XG4mIzQzO1x0XHRkZWNfdWNvdW50KGludGVycC1cdTAwM2V1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcbiBcdFx0a2ZyZWUoaW50ZXJwKTtcbiBcdH1cbiB9XG5AQCAtMzA3LDcgJiM0MzszMDgsOCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbiAgKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHZhbGlkYXRlZCBAbmFtZSBhbmQgQHBhdGgsIGVzdGFibGlzaGVkIHRoYXQgQGVcbiAgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuXG4gICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZSBlbnRyeSBpcyBmdWxsIG9yIHRoZSBiaW5kZXIgaXMgb3V0IG9mXG4mIzQzOyAqICAgICAgICAgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyBidWRnZXQsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxuQEAgLTMxNSwyMiAmIzQzOzMxNywzMiBAQCBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0c2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4mIzQzO1x0c3RydWN0IHVjb3VudHMgKnVjb3VudHM7XG4gXG4gXHRpZiAoYmluZm10X21pc2NfZmluZF9pbnRlcnAoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzLCBuYW1lKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAobGlzdF9jb3VudF9ub2RlcyhcdTAwMjZlLVx1MDAzZWludGVycHMpIFx1MDAzZT0gQklORk1UX01JU0NfSU5URVJQX01BWClcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXG4mIzQzO1x0LyogVGhlIGJpbmRpbmcga2VlcHMgYSBmaWxlIG9wZW4sIHNvIGNoYXJnZSBpdCB0byB3aG9ldmVyIGJpbmRzIGl0LiAqL1xuJiM0MztcdHVjb3VudHMgPSBpbmNfdWNvdW50KGN1cnJlbnRfdXNlcl9ucygpLCBjdXJyZW50X2V1aWQoKSxcbiYjNDM7XHRcdFx0ICAgICBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcbiYjNDM7XHRpZiAoIXVjb3VudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4gXHQvKiBPbmUgYWxsb2NhdGlvbiwgYm90aCBzdHJpbmdzIGluIGl0LCBsaWtlIHRoZSBlbnRyeSYjMzk7cyBvd24gYnVmZmVyLiAqL1xuIFx0aW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gJiM0MzsgcGxlbiAmIzQzOyAyKSxcbiBcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi1cdGlmICghaW50ZXJwKVxuJiM0MztcdGlmICghaW50ZXJwKSB7XG4mIzQzO1x0XHRkZWNfdWNvdW50KHVjb3VudHMsIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4gXG4gXHRpbnRlcnAtXHUwMDNlcGF0aCA9IGludGVycC1cdTAwM2VuYW1lICYjNDM7IG5sZW4gJiM0MzsgMTtcbiBcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUsIG5hbWUsIG5sZW4gJiM0MzsgMSk7XG4gXHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lICYjNDM7IG5sZW4gJiM0MzsgMSwgcGF0aCwgcGxlbiAmIzQzOyAxKTtcbiBcdGludGVycC1cdTAwM2VmaWxlID0gZjtcbiYjNDM7XHRpbnRlcnAtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gXHQvKiBQdWJsaXNoIHRoZSBub2RlOiBhIGxvY2tsZXNzIGNhdCBtYXkgYmUgd2Fsa2luZyB0aGUgbGlzdC4gKi9cbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmludGVycC1cdTAwM2VsaXN0LCBcdTAwMjZlLVx1MDAzZWludGVycHMpO1xuIFx0cHJfZGVidWcoXCYjMzQ7cmVnaXN0ZXI6IGludGVycHJldGVyOiAlcyB7JXN9XFxuXCYjMzQ7LCBuYW1lLCBwYXRoKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbmluZGV4IDA3MmU0YjNkZDc4ZDIuLjgwNDViMTBkZDNlNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxuQEAgLTcsNiAmIzQzOzcsNyBAQFxuIHN0cnVjdCBicGZfcHJvZztcbiBzdHJ1Y3QgZmlsZTtcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xuJiM0MztzdHJ1Y3QgdWNvdW50cztcbiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4gXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcbkBAIC0yMSw2ICYjNDM7MjIsNyBAQCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4gICogc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAtIGFuIGludGVycHJldGVyIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbiAgKiBAbGlzdDogbGluayBpbiB0aGUgZW50cnkmIzM5O3MgbGlzdCwgaW4gcmVnaXN0cmF0aW9uIG9yZGVyXG4gICogQGZpbGU6IHRoZSBmaWxlLCBvcGVuZWQgYXQgcmVnaXN0cmF0aW9uIGFuZCBuZXZlciByZXNvbHZlZCBhZ2FpblxuJiM0MzsgKiBAdWNvdW50czogdGhlIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgY2hhcmdlIHRoZSBiaW5kaW5nIHRvb2tcbiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyXG4gICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXG4gICogQG5hbWU6IHRoZSBuYW1lIHRoZSBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdCBieTsgZW1wdHkgZm9yIHRoZSBmaXhlZFxuQEAgLTMzLDYgJiM0MzszNSw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZTtcbiYjNDM7XHRzdHJ1Y3QgdWNvdW50c1x0XHQqdWNvdW50cztcbiBcdGNvbnN0IGNoYXJcdFx0KnBhdGg7XG4gXHRjaGFyXHRcdFx0bmFtZVtdO1xuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG5pbmRleCA5YzNiZTE1NzM5N2UwLi5lMzhkOWU2MDU2OWYwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcbkBAIC01Nyw2ICYjNDM7NTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHtcbiAjaWZkZWYgQ09ORklHX0ZBTk9USUZZXG4gXHRVQ09VTlRfRkFOT1RJRllfR1JPVVBTLFxuIFx0VUNPVU5UX0ZBTk9USUZZX01BUktTLFxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDKVxuJiM0MztcdFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsXG4gI2VuZGlmXG4gXHRVQ09VTlRfQ09VTlRTLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL3Vjb3VudC5jIGIva2VybmVsL3Vjb3VudC5jXG5pbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NFxuLS0tIGEva2VybmVsL3Vjb3VudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdWNvdW50LmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtODksNiAmIzQzOzkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdXNlcl90YWJsZVtdID0ge1xuIFx0VUNPVU5UX0VOVFJZKFwmIzM0O21heF9mYW5vdGlmeV9ncm91cHNcJiMzNDspLFxuIFx0VUNPVU5UX0VOVFJZKFwmIzM0O21heF9mYW5vdGlmeV9tYXJrc1wmIzM0OyksXG4gI2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQylcbiYjNDM7XHRVQ09VTlRfRU5UUlkoXCYjMzQ7bWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1wmIzM0OyksXG4mIzQzOyNlbmRpZlxuIH07XG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbkBAIC0yMzMsNiAmIzQzOzIzNyw3IEBAIHN0cnVjdCB1Y291bnRzICppbmNfdWNvdW50KHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGt1aWRfdCB1aWQsXG4gXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhpbmNfdWNvdW50LCBcJiMzNDtiaW5mbXRfbWlzY1wmIzM0Oyk7XG4gXG4gdm9pZCBkZWNfdWNvdW50KHN0cnVjdCB1Y291bnRzICp1Y291bnRzLCBlbnVtIHVjb3VudF90eXBlIHR5cGUpXG4ge1xuQEAgLTI0Myw2ICYjNDM7MjQ4LDcgQEAgdm9pZCBkZWNfdWNvdW50KHN0cnVjdCB1Y291bnRzICp1Y291bnRzLCBlbnVtIHVjb3VudF90eXBlIHR5cGUpXG4gXHR9XG4gXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZGVjX3Vjb3VudCwgXCYjMzQ7YmluZm10X21pc2NcJiMzNDspO1xuIFxuIGxvbmcgaW5jX3JsaW1pdF91Y291bnRzKHN0cnVjdCB1Y291bnRzICp1Y291bnRzLCBlbnVtIHJsaW1pdF90eXBlIHR5cGUsIGxvbmcgdilcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXG5pbmRleCBmYmJiMTYwMGRkYjk0Li5lNDJlY2Q0YzkwOGQxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjLy5naXRpZ25vcmVcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQCB4eHh4eHh4eCpcbiBwaXBlXG4gU19JKi50ZXN0XG4gYmluZm10X21pc2NfYnBmXG4mIzQzO2JpbmZtdF9taXNjX2ludGVycGxpbWl0XG4gYmluZm10X2JwZl9pbnRlcnBcbiBiaW5mbXRfYnBmX2FwcFxuIGJpbmZtdF9taXNjX3RyYW5zcGFyZW50XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbmluZGV4IDQxMGM5MzYwNmEwYzMuLmI2NDBhZjhmMDJiNTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5AQCAtMjUsNiAmIzQzOzI1LDEwIEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSBjaGVjay1leGVjXG4gIyBvciBhbiAmIzM5O0YmIzM5OyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19zZWxmcGluXG4gXG4mIzQzOyMgVGhlIGludGVycHJldGVycyBhbiAmIzM5O0YmIzM5OyBvciAmIzM5O0ImIzM5OyBlbnRyeSBwcmUtb3BlbnMgYXJlIGNoYXJnZWQgYWdhaW5zdFxuJiM0MzsjIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfaW50ZXJwbGltaXRcbiYjNDM7XG4gIyAmIzM5O0QmIzM5OyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXG4gIyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gU3RhdGljIG1hZ2ljIGVudHJ5LCBubyBicGYgdG9vbGNoYWluLlxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kaXNhYmxlZFxuQEAgLTEwNCw2ICYjNDM7MTA4LDggQEAgJChPVVRQVVQpL3NjcmlwdC1ub2V4ZWMuaW5jOiAkKENIRUNLX0VYRUNfU0FNUExFUykvc2NyaXB0LW5vZXhlYy5pbmNcbiAjIENGTEFHUyBmb3IgZXZlcnkgcHJvZ3JhbSBpbiB0aGlzIGRpcmVjdG9yeS5cbiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogQ0ZMQUdTICYjNDM7PSAkKFRPT0xTX0lOQ0xVREVTKVxuICQoT1VUUFVUKS9iaW5mbXRfbWlzY19zZWxmcGluOiAuLi9maWxlc3lzdGVtcy91dGlscy5jXG4mIzQzOyQoT1VUUFVUKS9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdDogQ0ZMQUdTICYjNDM7PSAkKFRPT0xTX0lOQ0xVREVTKVxuJiM0MzskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmNcbiBcbiAjIC0tLSBiaW5mbXRfbWlzYyBicGYgKCYjMzk7QiYjMzk7KSBoYW5kbGVyIHRlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIyBUaGUgc3RydWN0X29wcyBicGYgb2JqZWN0cyBhcmUgY29tcGlsZWQgYWdhaW5zdCB0aGUgcnVubmluZyBrZXJuZWwmIzM5O3MgQlRGLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXG5pbmRleCAyYzdiNjMwNzVmMWQ5Li5iMmE0NTE4OTAxYjBmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuQEAgLTM4LDYgJiM0MzszOCw3IEBAXG4gI2RlZmluZSBfR05VX1NPVVJDRVxuICNpbmNsdWRlIFx1MDAzY2VsZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG5AQCAtNjUsNiAmIzQzOzY2LDkgQEBcbiAjZGVmaW5lIEJJTkRfUklTQ1ZfUEFUSFx0XCYjMzQ7L3RtcC9iaW5mbXRfYmluZF9yaXNjdlwmIzM0O1xuICNkZWZpbmUgQklORF9FWFBFQ1RcdFwmIzM0O0JJTkRfUkFOIFwmIzM0O1xuICNkZWZpbmUgQklORF9NQVhcdDEwMFxuJiM0MzsjZGVmaW5lIElOVEVSUF9MSU1JVFx0XCYjMzQ7L3Byb2Mvc3lzL3VzZXIvbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1wmIzM0O1xuJiM0MzsvKiBFeGl0IHN0YXR1cyBvZiB0aGUgYmluZGluZyBjaGlsZCB3aGVuIGl0IGNhbm5vdCBzZXQgdXAgYSBidWRnZXQgb2YgaXRzIG93bi4gKi9cbiYjNDM7I2RlZmluZSBCSU5EX05PX0JVREdFVFx0MjAwXG4gXG4gLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqL1xuIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpXG5AQCAtMzc4LDYgJiM0MzszODIsNTcgQEAgc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxuIFx0cmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7XG4gfVxuIFxuJiM0MzsvKiBTZXQgdGhlIGludGVycHJldGVyIGJ1ZGdldCBvZiB0aGlzIG5hbWVzcGFjZS4gKi9cbiYjNDM7c3RhdGljIGludCB3cml0ZV9pbnRlcnBfbGltaXQoY29uc3QgY2hhciAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKElOVEVSUF9MSU1JVCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRuID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gbiBcdTAwM2MgMCA/IC0xIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGVycm5vIGEgYmluZCBpcyByZWZ1c2VkIHdpdGggd2hlbiB0aGUgd3JpdGVyIGlzIGEgY2hpbGQgdGhhdCBoYXMgc3BlbnRcbiYjNDM7ICogdGhlIGJ1ZGdldCBvZiBhIHVzZXIgbmFtZXNwYWNlIG9mIGl0cyBvd24sIDAgaWYgaXQgc3VjY2VlZGVkIGFuZCAtMSBpZiB0aGVcbiYjNDM7ICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGVcbiYjNDM7ICogaW50ZXJwcmV0ZXIgaXMgc3RpbGwgb3BlbmVkIHdpdGggdGhpcyBwcm9jZXNzJiMzOTtzIGNyZWRlbnRpYWxzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBiaW5kX291dF9vZl9idWRnZXQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNtZFtQQVRIX01BWF0sIGZpbGVbUEFUSF9NQVhdO1xuJiM0MztcdGludCBmZCwgc3RhdHVzLCByZXR2YWw7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksIEJJTkZNVF9ESVIgXCYjMzQ7LyVzXCYjMzQ7LCBlbnRyeSk7XG4mIzQzO1x0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXCYjMzQ7JiM0MzslcyAlc1xcblwmIzM0OywgbmFtZSwgcGF0aCk7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihmaWxlLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRzc2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdFx0LyogQSBuYW1lc3BhY2Ugb2YgaXRzIG93biwgd2l0aCBub3RoaW5nIGxlZnQgaW4gaXQgdG8gc3BlbmQuICovXG4mIzQzO1x0XHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSB8fCB3cml0ZV9pbnRlcnBfbGltaXQoXCYjMzQ7MFwmIzM0OykpXG4mIzQzO1x0XHRcdF9leGl0KEJJTkRfTk9fQlVER0VUKTtcbiYjNDM7XHRcdG4gPSB3cml0ZShmZCwgY21kLCBzdHJsZW4oY21kKSk7XG4mIzQzO1x0XHRfZXhpdChuIFx1MDAzYyAwID8gZXJybm8gOiAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGlmIChwaWQgXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR2YWwgPSBXRVhJVFNUQVRVUyhzdGF0dXMpO1xuJiM0MztcdHJldHVybiByZXR2YWwgPT0gQklORF9OT19CVURHRVQgPyAtMSA6IHJldHZhbDtcbiYjNDM7fVxuJiM0MztcbiBGSVhUVVJFKGJvdW5kX2ludGVycCkge1xuIFx0Y2hhciBvYmpbUEFUSF9NQVhdO1xuIFx0c3RydWN0IGJwZl9jYXNlIGM7XG5AQCAtNTY1LDQgJiM0Mzs2MjAsMTkgQEAgVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxuIFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7b3ZlclwmIzM0OywgQklORF9GSVJTVCksIC1FTk9TUEMpO1xuIH1cbiBcbiYjNDM7LyogQSBiaW5kaW5nIHBpbnMgYSBmaWxlOiBpdCBpcyBjaGFyZ2VkLCBhbmQgcmVmdXNlZCBvbmNlIHRoZSBidWRnZXQgaXMgb3V0LiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBiaW5kaW5nc19hcmVfY2hhcmdlZClcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSBiaW5kX291dF9vZl9idWRnZXQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7dGhpcmRcJiMzNDssIEJJTkRfRklSU1QpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIHVzZXIgbmFtZXNwYWNlcyBvciBubyBcJiMzNDsgSU5URVJQX0xJTUlUKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoYXJnZSBmb2xsb3dzIHRoZSB3cml0ZXIsIG5vdCB0aGUgZW50cnkgZmlsZSBpdCB3cml0ZXMgdG8uICovXG4mIzQzO1x0RVhQRUNUX0VRKGVyciwgRU5PU1BDKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGJ1ZGdldCB3YXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHdheS4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEoZW50cnlfYmluZChcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LCBcJiMzNDt0aGlyZFwmIzM0OywgQklORF9GSVJTVCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmY2MTFjNTUxNzg0MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jXG5AQCAtMCwwICYjNDM7MSwyMzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogQSBwcmUtb3BlbmVkIGludGVycHJldGVyIC0gd2hhdCAmIzM5O0YmIzM5OyBnaXZlcyBhIHN0YXRpYyBlbnRyeSBhbmQgd2hhdCBhICYjMzk7QiYjMzk7XG4mIzQzOyAqIGVudHJ5IGJpbmRzIC0ga2VlcHMgYSBmaWxlIG9wZW4gZm9yIGFzIGxvbmcgYXMgdGhlIGVudHJ5IGxpdmVzLCBzbyBpdCBwaW5zXG4mIzQzOyAqIHRoZSBtb3VudCBpdCBjYW1lIGZyb20uIEl0IGNvc3RzIG5vIGZpbGUgZGVzY3JpcHRvciwgYW5kIGJpbmZtdF9taXNjIGlzXG4mIzQzOyAqIEZTX1VTRVJOU19NT1VOVCwgc28gYW4gdW5wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlIGNhbiBjcmVhdGUgdGhlbSB3aXRob3V0XG4mIzQzOyAqIGJvdW5kLiBDaGVjayB0aGF0IFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYm91bmRzIGl0LCB0aGF0IGFuIGVudHJ5XG4mIzQzOyAqIHRoYXQgcHJlLW9wZW5zIG5vdGhpbmcgaXMgbm90IGNoYXJnZWQsIHRoYXQgcmVtb3ZpbmcgYW4gZW50cnkgZ2l2ZXMgdGhlXG4mIzQzOyAqIGNoYXJnZSBiYWNrLCBhbmQgdGhhdCBuZXN0aW5nIGEgdXNlciBuYW1lc3BhY2UgZG9lcyBub3QgZXZhZGUgaXQuXG4mIzQzOyAqXG4mIzQzOyAqIFJ1bnMgdW5wcml2aWxlZ2VkIGluIGEgdXNlciBuYW1lc3BhY2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNTlRcdFx0XCYjMzQ7L3RtcC9iaW5mbXRfaW50ZXJwbGltaXRcJiMzNDtcbiYjNDM7I2RlZmluZSBORVNURURfTU5UXHRcJiMzNDsvdG1wL2JpbmZtdF9pbnRlcnBsaW1pdF9uZXN0ZWRcJiMzNDtcbiYjNDM7I2RlZmluZSBMSU1JVF9TWVNDVExcdFwmIzM0Oy9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFHSUNcdFx0XCYjMzQ7XFxcXHhkZVxcXFx4YWRcJiMzNDtcbiYjNDM7LyogTm90IG9uIHRoZSBpbnN0YW5jZSwgYW5kIHVubGlrZSAvYmluL3RydWUgaXQgYWx3YXlzIGV4aXN0cy4gKi9cbiYjNDM7I2RlZmluZSBJTlRFUlBcdFx0XCYjMzQ7L3Byb2Mvc2VsZi9leGVcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFNtYWxsIGVub3VnaCB0byBmaWxsIGJ5IGhhbmQsIGJpZyBlbm91Z2ggdGhhdCBhIHJlZnVuZCBpcyB2aXNpYmxlLiAqL1xuJiM0MzsjZGVmaW5lIExJTUlUXHRcdDRcbiYjNDM7XG4mIzQzOy8qIFdoYXQgVUNPVU5UX0VOVFJZKCkgbGV0cyBhIG5hbWVzcGFjZSByYWlzZSBpdHMgb3duIGxpbWl0IHRvLiAqL1xuJiM0MzsjZGVmaW5lIExJTUlUX01BWFx0XCYjMzQ7MjE0NzQ4MzY0N1wmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRpZiAobWtkaXIocGF0aCwgMDc1NSkgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVFWElTVClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV3JpdGUgQHZhbCB0byBAcGF0aCwgcHJlc2VydmluZyB3cml0ZSgyKSYjMzk7cyBlcnJubyBmb3IgdGhlIGNhbGxlci4gKi9cbiYjNDM7c3RhdGljIGludCB3cml0ZV9rZWVwX2Vycm5vKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgc2F2ZWQ7XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRuID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpO1xuJiM0MztcdHNhdmVkID0gZXJybm87XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGVycm5vID0gc2F2ZWQ7XG4mIzQzO1x0cmV0dXJuIG4gXHUwMDNjIDAgPyAtMSA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2V0X2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKExJTUlUX1NZU0NUTCwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9hdChjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKnJ1bGUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzL3JlZ2lzdGVyXCYjMzQ7LCBtbnQpO1xuJiM0MztcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbiAmIzM5O0YmIzM5OyBlbnRyeTogb25lIGludGVycHJldGVyIHByZS1vcGVuZWQgYXQgcmVnaXN0cmF0aW9uLCBvbmUgY2hhcmdlLiAqL1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX2ZpeGVkKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgcnVsZVtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCYjMzQ7OiVzOk06OlwmIzM0OyBNQUdJQyBcJiMzNDs6OlwmIzM0OyBJTlRFUlAgXCYjMzQ7OkZcJiMzNDssIG5hbWUpO1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc2FtZSBlbnRyeSB3aXRob3V0ICYjMzk7RiYjMzk7OiB0aGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHBlciBleGVjIGluc3RlYWQuICovXG4mIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGxhaW4oY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBydWxlW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcJiMzNDs6JXM6TTo6XCYjMzQ7IE1BR0lDIFwmIzM0Ozo6XCYjMzQ7IElOVEVSUCBcJiMzNDs6XCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZW1vdmVfZW50cnkoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy8lc1wmIzM0OywgbW50LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhwYXRoLCBcJiMzNDstMVxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGVudHJ5X2V4aXN0cyhjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzLyVzXCYjMzQ7LCBtbnQsIG5hbWUpO1xuJiM0MztcdHJldHVybiBhY2Nlc3MocGF0aCwgRl9PSykgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVnaXN0ZXIgQG4gJiMzOTtGJiMzOTsgZW50cmllcywgZWFjaCB3aXRoIGEgbmFtZSBvZiBpdHMgb3duLiAqL1xuJiM0MztzdGF0aWMgaW50IGZpbGxfYnVkZ2V0KGNvbnN0IGNoYXIgKm1udCwgdW5zaWduZWQgaW50IG4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5hbWVbMzJdO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDtmaXhlZCV1XCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGlmIChyZWdpc3Rlcl9maXhlZChtbnQsIG5hbWUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKGludGVycF9saW1pdCkge1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChpbnRlcnBfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHQvKiBzZXR1cF91c2VybnMoKSBleGl0cyByYXRoZXIgdGhhbiByZXR1cm5zIGlmIHRoaXMgaXMgbm90IHRoZXJlLiAqL1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L3Byb2Mvc2VsZi9ucy91c2VyXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgd2l0aG91dCB1c2VyIG5hbWVzcGFjZXNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIENBUF9TWVNfUkVTT1VSQ0UgaW4gdGhpcyBuYW1lc3BhY2UgaXMgd2hhdCBtYWtlcyBpdCB3cml0YWJsZS4gKi9cbiYjNDM7XHRpZiAoc2V0X2xpbWl0KExJTUlUX01BWCkpIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgd2l0aG91dCBcJiMzNDsgTElNSVRfU1lTQ1RMKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtjYW5ub3Qgc2V0IHRoZSBsaW1pdDogJXNcJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZW5zdXJlX2RpcihNTlQpLCAwKTtcbiYjNDM7XHRpZiAobW91bnQoXCYjMzQ7YmluZm10X21pc2NcJiMzNDssIE1OVCwgXCYjMzQ7YmluZm10X21pc2NcJiMzNDssIDAsIE5VTEwpKSB7XG4mIzQzO1x0XHRpbnQgc2F2ZWQgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHQvKiBUZWFyZG93biBkb2VzbiYjMzk7dCBydW4gd2hlbiBzZXR1cCBza2lwcywgc28gY2xlYW4gdXAgaGVyZS4gKi9cbiYjNDM7XHRcdHJtZGlyKE1OVCk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gYmluZm10X21pc2M6ICVzXCYjMzQ7LCBzdHJlcnJvcihzYXZlZCkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihpbnRlcnBfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgbmFtZXNwYWNlcyBnbyB3aXRoIHRoZSBwcm9jZXNzOyBqdXN0IGRvbiYjMzk7dCBsaXR0ZXIgL3RtcC4gKi9cbiYjNDM7XHR1bW91bnQyKE5FU1RFRF9NTlQsIE1OVF9ERVRBQ0gpO1xuJiM0MztcdHVtb3VudDIoTU5ULCBNTlRfREVUQUNIKTtcbiYjNDM7XHRybWRpcihORVNURURfTU5UKTtcbiYjNDM7XHRybWRpcihNTlQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBFdmVyeSBwcmUtb3BlbmVkIGludGVycHJldGVyIGlzIGNoYXJnZWQsIGFuZCB0aGUgYnVkZ2V0IGlzIGEgaGFyZCBzdG9wLiAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBmaXhlZF9pbnRlcnByZXRlcnNfYXJlX2NoYXJnZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlszMl07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyV1XCYjMzQ7LCBMSU1JVCk7XG4mIzQzO1x0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX05FKHJlZ2lzdGVyX2ZpeGVkKE1OVCwgXCYjMzQ7b3ZlclwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PU1BDKTtcbiYjNDM7XG4mIzQzO1x0LyogQSByZWZ1c2VkIHJlZ2lzdHJhdGlvbiBsZWF2ZXMgbm90aGluZyBiZWhpbmQuICovXG4mIzQzO1x0RVhQRUNUX0ZBTFNFKGVudHJ5X2V4aXN0cyhNTlQsIFwmIzM0O292ZXJcJiMzNDspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gZW50cnkgdGhhdCBwcmUtb3BlbnMgbm90aGluZyBwaW5zIG5vdGhpbmcsIHNvIGl0IGlzIG5vdCBjaGFyZ2VkLiAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBwbGFpbl9lbnRyaWVzX2FyZV9ub3RfY2hhcmdlZClcbiYjNDM7e1xuJiM0MztcdEFTU0VSVF9FUShzZXRfbGltaXQoXCYjMzQ7MFwmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEocmVnaXN0ZXJfcGxhaW4oTU5ULCBcJiMzNDtwbGFpblwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X2V4aXN0cyhNTlQsIFwmIzM0O3BsYWluXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdC8qIC4uLiB3aGlsZSB0aGUgc2FtZSBlbnRyeSB3aXRoICYjMzk7RiYjMzk7IGhhcyBub3RoaW5nIHRvIHNwZW5kLiAqL1xuJiM0MztcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwmIzM0O2ZpeGVkXCYjMzQ7KSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCByZW1vdmFsX3JlZnVuZHNfdGhlX2NoYXJnZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzMyXTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7JXVcJiMzNDssIExJTUlUKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZmlsbF9idWRnZXQoTU5ULCBMSU1JVCksIDApO1xuJiM0MztcdEFTU0VSVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwmIzM0O292ZXJcJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHJlbW92ZV9lbnRyeShNTlQsIFwmIzM0O2ZpeGVkMFwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShyZWdpc3Rlcl9maXhlZChNTlQsIFwmIzM0O292ZXJcJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGNoYXJnZSB3YWxrcyB0aGUgYW5jZXN0b3JzLCBzbyBhIG5hbWVzcGFjZSBjYW5ub3QgYnV5IGl0c2VsZiBidWRnZXQgYnlcbiYjNDM7ICogbmVzdGluZzogaXQgbWF5IHJhaXNlIG9ubHkgaXRzIG93biBsaW1pdCwgYW5kIHRoZSBwYXJlbnQgaXQgd2FzIGNyZWF0ZWRcbiYjNDM7ICogZnJvbSBpcyBjaGFyZ2VkIGZvciBldmVyeSBiaW5kaW5nIG1hZGUgYmVsb3cgaXQuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBuZXN0aW5nX2RvZXNfbm90X2V2YWRlX2l0KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldVwmIzM0OywgTElNSVQpO1xuJiM0MztcdEFTU0VSVF9FUShzZXRfbGltaXQoYnVmKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNldHVwX3VzZXJucygpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2V0X2xpbWl0KExJTUlUX01BWCksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZW5zdXJlX2RpcihORVNURURfTU5UKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1vdW50KFwmIzM0O2JpbmZtdF9taXNjXCYjMzQ7LCBORVNURURfTU5ULCBcJiMzNDtiaW5mbXRfbWlzY1wmIzM0OywgMCwgTlVMTCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBBIGZyZXNoIGluc3RhbmNlIHdpdGggYW4gdW5saW1pdGVkIGJ1ZGdldCBvZiBpdHMgb3duLCBhbmQgeWV0OiAqL1xuJiM0MztcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChORVNURURfTU5ULCBcJiMzNDtuZXN0ZWRcJiMzNDspLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1NQQyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBuZXN0ZWQgaW5zdGFuY2Ugd29ya3MgZm9yIGFueXRoaW5nIHRoYXQgcGlucyBubyBmaWxlLiAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWdpc3Rlcl9wbGFpbihORVNURURfTU5ULCBcJiMzNDtuZXN0ZWRfcGxhaW5cJiMzNDspLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX2V2aWN0X2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIGxpbWl0IGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGluIGBiaW5mbXRfbWlzY2AgdXNpbmcgYHVjb3VudHNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGFuZCBgYmluZm10X21pc2NgIGZpbGVzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgdW5wcml2aWxlZ2VkIHVzZXJzIChpbiBhIHVzZXIgbmFtZXNwYWNlKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBvZiBgYmluZm10X21pc2NgIGVudHJpZXMgdG8gdGVzdCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb2YgdGhlIGJ1ZGdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFiZTg1M2UzYzkzYzhjMTlkZTJhZTIzNzVmYTc2N2ViNWJkMzU2NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE0OjQ2OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAppbmRleCA2MjJiNWQ4Yzg5OTU3Li5kMjZiNjNhMjdjMjU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdApAQCAtMTI4LDYgJiM0MzsxMjgsMTEgQEAgVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zOgogICAgbmFtZWQgYnkgYW4gYWJzb2x1dGUgcGF0aC4gSXQgaXMgb3BlbmVkIHdoZW4gdGhlIGJpbmFyeSBpcyBleGVjdXRlZCwgc28KICAgIGEgcmVsYXRpdmUgb25lIHdvdWxkIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mCiAgICB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeQomIzQzOyAtIHRoZSBhbW91bnQgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgYnkgYGBGYGAsIG9yIGJvdW5kIHRvIGEgYGBCYGAgZW50cnkKJiM0MzsgICBpcyBsaW1pdGVkIGJ5IHRoZSBgYC9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBzeXNjdGwuIEEKJiM0MzsgICByZWdpc3RyYXRpb24gcGFzdCB0aGUgbGltaXQgaXMgcmVmdXNlZCB3aXRoIGBgLUVOT1NQQ2BgLiBUaGlzIGxpbWl0cyBhbgomIzQzOyAgIHVucHJpdmlsZWdlZCBuYW1lc3BhY2UgcGlubmluZyBmaWxlcy4gQSBuZXN0ZWQgbmFtZXNwYWNlIGNhbiByYWlzZSBvbmx5IGl0cwomIzQzOyAgIG93biBsaW1pdCBhbmQgZXZlcnkgYW5jZXN0b3IgaXMgY2hhcmdlZCB0b28KIAogCiBUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aApAQCAtMjE1LDEwICYjNDM7MjIwLDkgQEAgd2l0aCB0aGUgY3JlZGVudGlhbHMgdGhlIGVudHJ5IGZpbGUgd2FzIG9wZW5lZCB3aXRoLCBleGFjdGx5IHRoZSB3YXkgYGBGYGAKIHByZS1vcGVucyBhIHN0YXRpYyBlbnRyeSYjMzk7cyBpbnRlcnByZXRlcjsgdGhlIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUuIFRoZQogcGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGl0IGNhbm5vdAogZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5Ci1iaW5kcyBhdCBtb3N0IDEwMCBpbnRlcnByZXRlcnM7IGEgd3JpdGUgcGFzdCB0aGF0IGlzIHJlZnVzZWQgd2l0aAotYGAtRU5PU1BDYGAuIFRvIGJpbmQgYSBmaWxlIHRoYXQgaGFzIG5vIHBhdGggb2YgaXRzIG93biAtIGFscmVhZHkKLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLQotb3BlbiBpdCBhbmQgd3JpdGUgYGAvcHJvYy9zZWxmL2ZkL05gYC4KJiM0MztiaW5kcyBhdCBtb3N0IDEwMCBpbnRlcnByZXRlcnMsIGFuZCBlYWNoIG9uZSBpcyBjaGFyZ2VkIGFnYWluc3QKJiM0MztgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBsaWtlIGFueSBvdGhlciBiaW5kaW5nLiBBIHdyaXRlIHBhc3QgZWl0aGVyCiYjNDM7bGltaXQgaXMgcmVmdXNlZCB3aXRoIGBgLUVOT1NQQ2BgLgogCiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGUKIGBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmMKaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X21pc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jCkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRlcnAsIHRtcCwgJmFtcDtlLSZndDtpbnRlcnBzLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZhbXA7aW50ZXJwLSZndDtsaXN0KTsKIAkJY2xvc2VfaW50ZXJwX2ZpbGUoaW50ZXJwLSZndDtmaWxlKTsKJiM0MzsJCWRlY191Y291bnQoaW50ZXJwLSZndDt1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTsKIAkJa2ZyZWUoaW50ZXJwKTsKIAl9CiB9CkBAIC0zMDcsNyAmIzQzOzMwOCw4IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKQogICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlCiAgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuCiAgKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZSBlbnRyeSBpcyBmdWxsIG9yIHRoZSBiaW5kZXIgaXMgb3V0IG9mCiYjNDM7ICogICAgICAgICBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTIGJ1ZGdldCwgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwKIAkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKQEAgLTMxNSwyMiAmIzQzOzMxNywzMiBAQCBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsCiB7CiAJc2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7CiAJc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwOwomIzQzOwlzdHJ1Y3QgdWNvdW50cyAqdWNvdW50czsKIAogCWlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycCgmYW1wO2UtJmd0O2ludGVycHMsIG5hbWUpKQogCQlyZXR1cm4gLUVFWElTVDsKIAlpZiAobGlzdF9jb3VudF9ub2RlcygmYW1wO2UtJmd0O2ludGVycHMpICZndDs9IEJJTkZNVF9NSVNDX0lOVEVSUF9NQVgpCiAJCXJldHVybiAtRU5PU1BDOwogCiYjNDM7CS8qIFRoZSBiaW5kaW5nIGtlZXBzIGEgZmlsZSBvcGVuLCBzbyBjaGFyZ2UgaXQgdG8gd2hvZXZlciBiaW5kcyBpdC4gKi8KJiM0MzsJdWNvdW50cyA9IGluY191Y291bnQoY3VycmVudF91c2VyX25zKCksIGN1cnJlbnRfZXVpZCgpLAomIzQzOwkJCSAgICAgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyk7CiYjNDM7CWlmICghdWNvdW50cykKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwogCS8qIE9uZSBhbGxvY2F0aW9uLCBib3RoIHN0cmluZ3MgaW4gaXQsIGxpa2UgdGhlIGVudHJ5JiMzOTtzIG93biBidWZmZXIuICovCiAJaW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gJiM0MzsgcGxlbiAmIzQzOyAyKSwKIAkJCSBHRlBfS0VSTkVMX0FDQ09VTlQpOwotCWlmICghaW50ZXJwKQomIzQzOwlpZiAoIWludGVycCkgewomIzQzOwkJZGVjX3Vjb3VudCh1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTsKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KIAogCWludGVycC0mZ3Q7cGF0aCA9IGludGVycC0mZ3Q7bmFtZSAmIzQzOyBubGVuICYjNDM7IDE7CiAJc3Ryc2NweShpbnRlcnAtJmd0O25hbWUsIG5hbWUsIG5sZW4gJiM0MzsgMSk7CiAJc3Ryc2NweShpbnRlcnAtJmd0O25hbWUgJiM0MzsgbmxlbiAmIzQzOyAxLCBwYXRoLCBwbGVuICYjNDM7IDEpOwogCWludGVycC0mZ3Q7ZmlsZSA9IGY7CiYjNDM7CWludGVycC0mZ3Q7dWNvdW50cyA9IHVjb3VudHM7CiAJLyogUHVibGlzaCB0aGUgbm9kZTogYSBsb2NrbGVzcyBjYXQgbWF5IGJlIHdhbGtpbmcgdGhlIGxpc3QuICovCiAJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtpbnRlcnAtJmd0O2xpc3QsICZhbXA7ZS0mZ3Q7aW50ZXJwcyk7CiAJcHJfZGVidWcoJiMzNDtyZWdpc3RlcjogaW50ZXJwcmV0ZXI6ICVzIHslc31cbiYjMzQ7LCBuYW1lLCBwYXRoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaCBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaAppbmRleCAwNzJlNGIzZGQ3OGQyLi44MDQ1YjEwZGQzZTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oCkBAIC03LDYgJiM0Mzs3LDcgQEAKIHN0cnVjdCBicGZfcHJvZzsKIHN0cnVjdCBmaWxlOwogc3RydWN0IGxpbnV4X2JpbnBybTsKJiM0MztzdHJ1Y3QgdWNvdW50czsKIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKIAogI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTYKQEAgLTIxLDYgJiM0MzsyMiw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKICAqIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgLSBhbiBpbnRlcnByZXRlciBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoCiAgKiBAbGlzdDogbGluayBpbiB0aGUgZW50cnkmIzM5O3MgbGlzdCwgaW4gcmVnaXN0cmF0aW9uIG9yZGVyCiAgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluCiYjNDM7ICogQHVjb3VudHM6IHRoZSBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTIGNoYXJnZSB0aGUgYmluZGluZyB0b29rCiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyCiAgKiAgICAgICAgcnVucyB1bmRlcjsgc3RvcmVkIGFmdGVyIEBuYW1lIGluIHRoZSBzYW1lIGFsbG9jYXRpb24KICAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWQKQEAgLTMzLDYgJiM0MzszNSw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGU7CiYjNDM7CXN0cnVjdCB1Y291bnRzCQkqdWNvdW50czsKIAljb25zdCBjaGFyCQkqcGF0aDsKIAljaGFyCQkJbmFtZVtdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCA5YzNiZTE1NzM5N2UwLi5lMzhkOWU2MDU2OWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC01Nyw2ICYjNDM7NTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHsKICNpZmRlZiBDT05GSUdfRkFOT1RJRlkKIAlVQ09VTlRfRkFOT1RJRllfR1JPVVBTLAogCVVDT1VOVF9GQU5PVElGWV9NQVJLUywKJiM0MzsjZW5kaWYKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpCiYjNDM7CVVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsCiAjZW5kaWYKIAlVQ09VTlRfQ09VTlRTLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC91Y291bnQuYyBiL2tlcm5lbC91Y291bnQuYwppbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NAotLS0gYS9rZXJuZWwvdWNvdW50LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Vjb3VudC5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva21lbWxlYWsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyX25hbWVzcGFjZS5oJmd0OwpAQCAtODksNiAmIzQzOzkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdXNlcl90YWJsZVtdID0gewogCVVDT1VOVF9FTlRSWSgmIzM0O21heF9mYW5vdGlmeV9ncm91cHMmIzM0OyksCiAJVUNPVU5UX0VOVFJZKCYjMzQ7bWF4X2Zhbm90aWZ5X21hcmtzJiMzNDspLAogI2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDKQomIzQzOwlVQ09VTlRfRU5UUlkoJiMzNDttYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzJiMzNDspLAomIzQzOyNlbmRpZgogfTsKICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKQEAgLTIzMyw2ICYjNDM7MjM3LDcgQEAgc3RydWN0IHVjb3VudHMgKmluY191Y291bnQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywga3VpZF90IHVpZCwKIAlwdXRfdWNvdW50cyh1Y291bnRzKTsKIAlyZXR1cm4gTlVMTDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGluY191Y291bnQsICYjMzQ7YmluZm10X21pc2MmIzM0Oyk7CiAKIHZvaWQgZGVjX3Vjb3VudChzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSB1Y291bnRfdHlwZSB0eXBlKQogewpAQCAtMjQzLDYgJiM0MzsyNDgsNyBAQCB2b2lkIGRlY191Y291bnQoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gdWNvdW50X3R5cGUgdHlwZSkKIAl9CiAJcHV0X3Vjb3VudHModWNvdW50cyk7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhkZWNfdWNvdW50LCAmIzM0O2JpbmZtdF9taXNjJiMzNDspOwogCiBsb25nIGluY19ybGltaXRfdWNvdW50cyhzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSBybGltaXRfdHlwZSB0eXBlLCBsb25nIHYpCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjLy5naXRpZ25vcmUKaW5kZXggZmJiYjE2MDBkZGI5NC4uZTQyZWNkNGM5MDhkMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZQpAQCAtMjAsNiAmIzQzOzIwLDcgQEAgeHh4eHh4eHgqCiBwaXBlCiBTX0kqLnRlc3QKIGJpbmZtdF9taXNjX2JwZgomIzQzO2JpbmZtdF9taXNjX2ludGVycGxpbWl0CiBiaW5mbXRfYnBmX2ludGVycAogYmluZm10X2JwZl9hcHAKIGJpbmZtdF9taXNjX3RyYW5zcGFyZW50CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQppbmRleCA0MTBjOTM2MDZhMGMzLi5iNjQwYWY4ZjAyYjUxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKQEAgLTI1LDYgJiM0MzsyNSwxMCBAQCBURVNUX0dFTl9QUk9HUyAmIzQzOz0gY2hlY2stZXhlYwogIyBvciBhbiAmIzM5O0YmIzM5OyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLgogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3NlbGZwaW4KIAomIzQzOyMgVGhlIGludGVycHJldGVycyBhbiAmIzM5O0YmIzM5OyBvciAmIzM5O0ImIzM5OyBlbnRyeSBwcmUtb3BlbnMgYXJlIGNoYXJnZWQgYWdhaW5zdAomIzQzOyMgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUy4gVW5wcml2aWxlZ2VkLCBubyBicGYuCiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2ludGVycGxpbWl0CiYjNDM7CiAjICYjMzk7RCYjMzk7IChyZWdpc3RlciBkaXNhYmxlZCkgYmluZm10X21pc2MgdGVzdDogYW4gZW50cnkgdGhhdCBleGlzdHMgYnV0IGRvZXMKICMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi4KIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kaXNhYmxlZApAQCAtMTA0LDYgJiM0MzsxMDgsOCBAQCAkKE9VVFBVVCkvc2NyaXB0LW5vZXhlYy5pbmM6ICQoQ0hFQ0tfRVhFQ19TQU1QTEVTKS9zY3JpcHQtbm9leGVjLmluYwogIyBDRkxBR1MgZm9yIGV2ZXJ5IHByb2dyYW0gaW4gdGhpcyBkaXJlY3RvcnkuCiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogQ0ZMQUdTICYjNDM7PSAkKFRPT0xTX0lOQ0xVREVTKQogJChPVVRQVVQpL2JpbmZtdF9taXNjX3NlbGZwaW46IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmMKJiM0MzskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IENGTEFHUyAmIzQzOz0gJChUT09MU19JTkNMVURFUykKJiM0MzskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmMKIAogIyAtLS0gYmluZm10X21pc2MgYnBmICgmIzM5O0ImIzM5OykgaGFuZGxlciB0ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgc3RydWN0X29wcyBicGYgb2JqZWN0cyBhcmUgY29tcGlsZWQgYWdhaW5zdCB0aGUgcnVubmluZyBrZXJuZWwmIzM5O3MgQlRGLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmMKaW5kZXggMmM3YjYzMDc1ZjFkOS4uYjJhNDUxODkwMWIwZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jCkBAIC0zOCw2ICYjNDM7MzgsNyBAQAogI2RlZmluZSBfR05VX1NPVVJDRQogI2luY2x1ZGUgJmx0O2VsZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CkBAIC02NSw2ICYjNDM7NjYsOSBAQAogI2RlZmluZSBCSU5EX1JJU0NWX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9iaW5kX3Jpc2N2JiMzNDsKICNkZWZpbmUgQklORF9FWFBFQ1QJJiMzNDtCSU5EX1JBTiAmIzM0OwogI2RlZmluZSBCSU5EX01BWAkxMDAKJiM0MzsjZGVmaW5lIElOVEVSUF9MSU1JVAkmIzM0Oy9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnMmIzM0OwomIzQzOy8qIEV4aXQgc3RhdHVzIG9mIHRoZSBiaW5kaW5nIGNoaWxkIHdoZW4gaXQgY2Fubm90IHNldCB1cCBhIGJ1ZGdldCBvZiBpdHMgb3duLiAqLwomIzQzOyNkZWZpbmUgQklORF9OT19CVURHRVQJMjAwCiAKIC8qIEEgbWluaW1hbCA2NC1iaXQgbGl0dGxlLWVuZGlhbiBFTEYgaGVhZGVyLCBwYWRkZWQgdG8gdGhlIHJlYWQgc2l6ZS4gKi8KIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpCkBAIC0zNzgsNiAmIzQzOzM4Miw1NyBAQCBzdGF0aWMgaW50IGVudHJ5X2JpbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpCiAJcmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7CiB9CiAKJiM0MzsvKiBTZXQgdGhlIGludGVycHJldGVyIGJ1ZGdldCBvZiB0aGlzIG5hbWVzcGFjZS4gKi8KJiM0MztzdGF0aWMgaW50IHdyaXRlX2ludGVycF9saW1pdChjb25zdCBjaGFyICp2YWwpCiYjNDM7ewomIzQzOwlzc2l6ZV90IG47CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKElOVEVSUF9MSU1JVCwgT19XUk9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwluID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBuICZsdDsgMCA/IC0xIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZXJybm8gYSBiaW5kIGlzIHJlZnVzZWQgd2l0aCB3aGVuIHRoZSB3cml0ZXIgaXMgYSBjaGlsZCB0aGF0IGhhcyBzcGVudAomIzQzOyAqIHRoZSBidWRnZXQgb2YgYSB1c2VyIG5hbWVzcGFjZSBvZiBpdHMgb3duLCAwIGlmIGl0IHN1Y2NlZWRlZCBhbmQgLTEgaWYgdGhlCiYjNDM7ICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGUKJiM0MzsgKiBpbnRlcnByZXRlciBpcyBzdGlsbCBvcGVuZWQgd2l0aCB0aGlzIHByb2Nlc3MmIzM5O3MgY3JlZGVudGlhbHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaW5kX291dF9vZl9idWRnZXQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJICAgICAgY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CWNoYXIgY21kW1BBVEhfTUFYXSwgZmlsZVtQQVRIX01BWF07CiYjNDM7CWludCBmZCwgc3RhdHVzLCByZXR2YWw7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsKJiM0MzsJc25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCBCSU5GTVRfRElSICYjMzQ7LyVzJiMzNDssIGVudHJ5KTsKJiM0MzsJc25wcmludGYoY21kLCBzaXplb2YoY21kKSwgJiMzNDsmIzQzOyVzICVzXG4mIzM0OywgbmFtZSwgcGF0aCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzc2l6ZV90IG47CiYjNDM7CiYjNDM7CQkvKiBBIG5hbWVzcGFjZSBvZiBpdHMgb3duLCB3aXRoIG5vdGhpbmcgbGVmdCBpbiBpdCB0byBzcGVuZC4gKi8KJiM0MzsJCWlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpIHx8IHdyaXRlX2ludGVycF9saW1pdCgmIzM0OzAmIzM0OykpCiYjNDM7CQkJX2V4aXQoQklORF9OT19CVURHRVQpOwomIzQzOwkJbiA9IHdyaXRlKGZkLCBjbWQsIHN0cmxlbihjbWQpKTsKJiM0MzsJCV9leGl0KG4gJmx0OyAwID8gZXJybm8gOiAwKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChwaWQgJmx0OyAwIHx8IHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dmFsID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKJiM0MzsJcmV0dXJuIHJldHZhbCA9PSBCSU5EX05PX0JVREdFVCA/IC0xIDogcmV0dmFsOwomIzQzO30KJiM0MzsKIEZJWFRVUkUoYm91bmRfaW50ZXJwKSB7CiAJY2hhciBvYmpbUEFUSF9NQVhdOwogCXN0cnVjdCBicGZfY2FzZSBjOwpAQCAtNTY1LDQgJiM0Mzs2MjAsMTkgQEAgVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKQogCUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O292ZXImIzM0OywgQklORF9GSVJTVCksIC1FTk9TUEMpOwogfQogCiYjNDM7LyogQSBiaW5kaW5nIHBpbnMgYSBmaWxlOiBpdCBpcyBjaGFyZ2VkLCBhbmQgcmVmdXNlZCBvbmNlIHRoZSBidWRnZXQgaXMgb3V0LiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGJpbmRpbmdzX2FyZV9jaGFyZ2VkKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IGJpbmRfb3V0X29mX2J1ZGdldCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDt0aGlyZCYjMzQ7LCBCSU5EX0ZJUlNUKTsKJiM0MzsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyB1c2VyIG5hbWVzcGFjZXMgb3Igbm8gJiMzNDsgSU5URVJQX0xJTUlUKTsKJiM0MzsKJiM0MzsJLyogVGhlIGNoYXJnZSBmb2xsb3dzIHRoZSB3cml0ZXIsIG5vdCB0aGUgZW50cnkgZmlsZSBpdCB3cml0ZXMgdG8uICovCiYjNDM7CUVYUEVDVF9FUShlcnIsIEVOT1NQQyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBidWRnZXQgd2FzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSB3YXkuICovCiYjNDM7CUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O3RoaXJkJiMzNDssIEJJTkRfRklSU1QpLCAwKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmNjExYzU1MTc4NDIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2ludGVycGxpbWl0LmMKQEAgLTAsMCAmIzQzOzEsMjMyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIEEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciAtIHdoYXQgJiMzOTtGJiMzOTsgZ2l2ZXMgYSBzdGF0aWMgZW50cnkgYW5kIHdoYXQgYSAmIzM5O0ImIzM5OwomIzQzOyAqIGVudHJ5IGJpbmRzIC0ga2VlcHMgYSBmaWxlIG9wZW4gZm9yIGFzIGxvbmcgYXMgdGhlIGVudHJ5IGxpdmVzLCBzbyBpdCBwaW5zCiYjNDM7ICogdGhlIG1vdW50IGl0IGNhbWUgZnJvbS4gSXQgY29zdHMgbm8gZmlsZSBkZXNjcmlwdG9yLCBhbmQgYmluZm10X21pc2MgaXMKJiM0MzsgKiBGU19VU0VSTlNfTU9VTlQsIHNvIGFuIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZSBjYW4gY3JlYXRlIHRoZW0gd2l0aG91dAomIzQzOyAqIGJvdW5kLiBDaGVjayB0aGF0IFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYm91bmRzIGl0LCB0aGF0IGFuIGVudHJ5CiYjNDM7ICogdGhhdCBwcmUtb3BlbnMgbm90aGluZyBpcyBub3QgY2hhcmdlZCwgdGhhdCByZW1vdmluZyBhbiBlbnRyeSBnaXZlcyB0aGUKJiM0MzsgKiBjaGFyZ2UgYmFjaywgYW5kIHRoYXQgbmVzdGluZyBhIHVzZXIgbmFtZXNwYWNlIGRvZXMgbm90IGV2YWRlIGl0LgomIzQzOyAqCiYjNDM7ICogUnVucyB1bnByaXZpbGVnZWQgaW4gYSB1c2VyIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21vdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vZmlsZXN5c3RlbXMvdXRpbHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1OVAkJJiMzNDsvdG1wL2JpbmZtdF9pbnRlcnBsaW1pdCYjMzQ7CiYjNDM7I2RlZmluZSBORVNURURfTU5UCSYjMzQ7L3RtcC9iaW5mbXRfaW50ZXJwbGltaXRfbmVzdGVkJiMzNDsKJiM0MzsjZGVmaW5lIExJTUlUX1NZU0NUTAkmIzM0Oy9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnMmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUFHSUMJCSYjMzQ7XFx4ZGVcXHhhZCYjMzQ7CiYjNDM7LyogTm90IG9uIHRoZSBpbnN0YW5jZSwgYW5kIHVubGlrZSAvYmluL3RydWUgaXQgYWx3YXlzIGV4aXN0cy4gKi8KJiM0MzsjZGVmaW5lIElOVEVSUAkJJiMzNDsvcHJvYy9zZWxmL2V4ZSYjMzQ7CiYjNDM7CiYjNDM7LyogU21hbGwgZW5vdWdoIHRvIGZpbGwgYnkgaGFuZCwgYmlnIGVub3VnaCB0aGF0IGEgcmVmdW5kIGlzIHZpc2libGUuICovCiYjNDM7I2RlZmluZSBMSU1JVAkJNAomIzQzOwomIzQzOy8qIFdoYXQgVUNPVU5UX0VOVFJZKCkgbGV0cyBhIG5hbWVzcGFjZSByYWlzZSBpdHMgb3duIGxpbWl0IHRvLiAqLwomIzQzOyNkZWZpbmUgTElNSVRfTUFYCSYjMzQ7MjE0NzQ4MzY0NyYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlpZiAobWtkaXIocGF0aCwgMDc1NSkgJmFtcDsmYW1wOyBlcnJubyAhPSBFRVhJU1QpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXcml0ZSBAdmFsIHRvIEBwYXRoLCBwcmVzZXJ2aW5nIHdyaXRlKDIpJiMzOTtzIGVycm5vIGZvciB0aGUgY2FsbGVyLiAqLwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfa2VlcF9lcnJubyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWwpCiYjNDM7ewomIzQzOwlpbnQgZmQsIHNhdmVkOwomIzQzOwlzc2l6ZV90IG47CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CW4gPSB3cml0ZShmZCwgdmFsLCBzdHJsZW4odmFsKSk7CiYjNDM7CXNhdmVkID0gZXJybm87CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZXJybm8gPSBzYXZlZDsKJiM0MzsJcmV0dXJuIG4gJmx0OyAwID8gLTEgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNldF9saW1pdChjb25zdCBjaGFyICp2YWwpCiYjNDM7ewomIzQzOwlyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhMSU1JVF9TWVNDVEwsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfYXQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpydWxlKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3JlZ2lzdGVyJiMzNDssIG1udCk7CiYjNDM7CXJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiAmIzM5O0YmIzM5OyBlbnRyeTogb25lIGludGVycHJldGVyIHByZS1vcGVuZWQgYXQgcmVnaXN0cmF0aW9uLCBvbmUgY2hhcmdlLiAqLwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfZml4ZWQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJY2hhciBydWxlW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJc25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCAmIzM0OzolczpNOjomIzM0OyBNQUdJQyAmIzM0Ozo6JiMzNDsgSU5URVJQICYjMzQ7OkYmIzM0OywgbmFtZSk7CiYjNDM7CXJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgc2FtZSBlbnRyeSB3aXRob3V0ICYjMzk7RiYjMzk7OiB0aGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHBlciBleGVjIGluc3RlYWQuICovCiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9wbGFpbihjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwljaGFyIHJ1bGVbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7OiVzOk06OiYjMzQ7IE1BR0lDICYjMzQ7OjomIzM0OyBJTlRFUlAgJiMzNDs6JiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZW1vdmVfZW50cnkoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzLyVzJiMzNDssIG1udCwgbmFtZSk7CiYjNDM7CXJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsICYjMzQ7LTFcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZW50cnlfZXhpc3RzKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy8lcyYjMzQ7LCBtbnQsIG5hbWUpOwomIzQzOwlyZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spID09IDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlZ2lzdGVyIEBuICYjMzk7RiYjMzk7IGVudHJpZXMsIGVhY2ggd2l0aCBhIG5hbWUgb2YgaXRzIG93bi4gKi8KJiM0MztzdGF0aWMgaW50IGZpbGxfYnVkZ2V0KGNvbnN0IGNoYXIgKm1udCwgdW5zaWduZWQgaW50IG4pCiYjNDM7ewomIzQzOwljaGFyIG5hbWVbMzJdOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7Zml4ZWQldSYjMzQ7LCBpKTsKJiM0MzsJCWlmIChyZWdpc3Rlcl9maXhlZChtbnQsIG5hbWUpKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRShpbnRlcnBfbGltaXQpIHsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoaW50ZXJwX2xpbWl0KQomIzQzO3sKJiM0MzsJLyogc2V0dXBfdXNlcm5zKCkgZXhpdHMgcmF0aGVyIHRoYW4gcmV0dXJucyBpZiB0aGlzIGlzIG5vdCB0aGVyZS4gKi8KJiM0MzsJaWYgKGFjY2VzcygmIzM0Oy9wcm9jL3NlbGYvbnMvdXNlciYjMzQ7LCBGX09LKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCB3aXRob3V0IHVzZXIgbmFtZXNwYWNlcyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNldHVwX3VzZXJucygpLCAwKTsKJiM0MzsKJiM0MzsJLyogQ0FQX1NZU19SRVNPVVJDRSBpbiB0aGlzIG5hbWVzcGFjZSBpcyB3aGF0IG1ha2VzIGl0IHdyaXRhYmxlLiAqLwomIzQzOwlpZiAoc2V0X2xpbWl0KExJTUlUX01BWCkpIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFTk9FTlQpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgJiMzNDsgTElNSVRfU1lTQ1RMKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2Nhbm5vdCBzZXQgdGhlIGxpbWl0OiAlcyYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlbnN1cmVfZGlyKE1OVCksIDApOwomIzQzOwlpZiAobW91bnQoJiMzNDtiaW5mbXRfbWlzYyYjMzQ7LCBNTlQsICYjMzQ7YmluZm10X21pc2MmIzM0OywgMCwgTlVMTCkpIHsKJiM0MzsJCWludCBzYXZlZCA9IGVycm5vOwomIzQzOwomIzQzOwkJLyogVGVhcmRvd24gZG9lc24mIzM5O3QgcnVuIHdoZW4gc2V0dXAgc2tpcHMsIHNvIGNsZWFuIHVwIGhlcmUuICovCiYjNDM7CQlybWRpcihNTlQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gYmluZm10X21pc2M6ICVzJiMzNDssIHN0cmVycm9yKHNhdmVkKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihpbnRlcnBfbGltaXQpCiYjNDM7ewomIzQzOwkvKiBUaGUgbmFtZXNwYWNlcyBnbyB3aXRoIHRoZSBwcm9jZXNzOyBqdXN0IGRvbiYjMzk7dCBsaXR0ZXIgL3RtcC4gKi8KJiM0MzsJdW1vdW50MihORVNURURfTU5ULCBNTlRfREVUQUNIKTsKJiM0MzsJdW1vdW50MihNTlQsIE1OVF9ERVRBQ0gpOwomIzQzOwlybWRpcihORVNURURfTU5UKTsKJiM0MzsJcm1kaXIoTU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRXZlcnkgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBpcyBjaGFyZ2VkLCBhbmQgdGhlIGJ1ZGdldCBpcyBhIGhhcmQgc3RvcC4gKi8KJiM0MztURVNUX0YoaW50ZXJwX2xpbWl0LCBmaXhlZF9pbnRlcnByZXRlcnNfYXJlX2NoYXJnZWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlszMl07CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JXUmIzM0OywgTElNSVQpOwomIzQzOwlBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZmlsbF9idWRnZXQoTU5ULCBMSU1JVCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCAmIzM0O292ZXImIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1NQQyk7CiYjNDM7CiYjNDM7CS8qIEEgcmVmdXNlZCByZWdpc3RyYXRpb24gbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiAqLwomIzQzOwlFWFBFQ1RfRkFMU0UoZW50cnlfZXhpc3RzKE1OVCwgJiMzNDtvdmVyJiMzNDspKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gZW50cnkgdGhhdCBwcmUtb3BlbnMgbm90aGluZyBwaW5zIG5vdGhpbmcsIHNvIGl0IGlzIG5vdCBjaGFyZ2VkLiAqLwomIzQzO1RFU1RfRihpbnRlcnBfbGltaXQsIHBsYWluX2VudHJpZXNfYXJlX25vdF9jaGFyZ2VkKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHNldF9saW1pdCgmIzM0OzAmIzM0OyksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEocmVnaXN0ZXJfcGxhaW4oTU5ULCAmIzM0O3BsYWluJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfZXhpc3RzKE1OVCwgJiMzNDtwbGFpbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CS8qIC4uLiB3aGlsZSB0aGUgc2FtZSBlbnRyeSB3aXRoICYjMzk7RiYjMzk7IGhhcyBub3RoaW5nIHRvIHNwZW5kLiAqLwomIzQzOwlFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCAmIzM0O2ZpeGVkJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqLwomIzQzO1RFU1RfRihpbnRlcnBfbGltaXQsIHJlbW92YWxfcmVmdW5kc190aGVfY2hhcmdlKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyV1JiMzNDssIExJTUlUKTsKJiM0MzsJQVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTsKJiM0MzsJQVNTRVJUX05FKHJlZ2lzdGVyX2ZpeGVkKE1OVCwgJiMzNDtvdmVyJiMzNDspLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHJlbW92ZV9lbnRyeShNTlQsICYjMzQ7Zml4ZWQwJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHJlZ2lzdGVyX2ZpeGVkKE1OVCwgJiMzNDtvdmVyJiMzNDspLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgY2hhcmdlIHdhbGtzIHRoZSBhbmNlc3RvcnMsIHNvIGEgbmFtZXNwYWNlIGNhbm5vdCBidXkgaXRzZWxmIGJ1ZGdldCBieQomIzQzOyAqIG5lc3Rpbmc6IGl0IG1heSByYWlzZSBvbmx5IGl0cyBvd24gbGltaXQsIGFuZCB0aGUgcGFyZW50IGl0IHdhcyBjcmVhdGVkCiYjNDM7ICogZnJvbSBpcyBjaGFyZ2VkIGZvciBldmVyeSBiaW5kaW5nIG1hZGUgYmVsb3cgaXQuCiYjNDM7ICovCiYjNDM7VEVTVF9GKGludGVycF9saW1pdCwgbmVzdGluZ19kb2VzX25vdF9ldmFkZV9pdCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldSYjMzQ7LCBMSU1JVCk7CiYjNDM7CUFTU0VSVF9FUShzZXRfbGltaXQoYnVmKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShmaWxsX2J1ZGdldChNTlQsIExJTUlUKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShzZXRfbGltaXQoTElNSVRfTUFYKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlbnN1cmVfZGlyKE5FU1RFRF9NTlQpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKG1vdW50KCYjMzQ7YmluZm10X21pc2MmIzM0OywgTkVTVEVEX01OVCwgJiMzNDtiaW5mbXRfbWlzYyYjMzQ7LCAwLCBOVUxMKSwgMCk7CiYjNDM7CiYjNDM7CS8qIEEgZnJlc2ggaW5zdGFuY2Ugd2l0aCBhbiB1bmxpbWl0ZWQgYnVkZ2V0IG9mIGl0cyBvd24sIGFuZCB5ZXQ6ICovCiYjNDM7CUVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChORVNURURfTU5ULCAmIzM0O25lc3RlZCYjMzQ7KSwgMCk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PU1BDKTsKJiM0MzsKJiM0MzsJLyogVGhlIG5lc3RlZCBpbnN0YW5jZSB3b3JrcyBmb3IgYW55dGhpbmcgdGhhdCBwaW5zIG5vIGZpbGUuICovCiYjNDM7CUVYUEVDVF9FUShyZWdpc3Rlcl9wbGFpbihORVNURURfTU5ULCAmIzM0O25lc3RlZF9wbGFpbiYjMzQ7KSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCaW5mbXRfbWlzYyBJbnRlcnByZXRlciBMaW1pdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLiBJdCYjMzk7cyB0b3VjaGluZyBgZnMvYmluZm10X21pc2MuY2AgYW5kIGFkZGluZyBhIG5ldyBzeXNjdGwsIGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYCwgd2hpY2ggaXMgaW50cmlndWluZy4gTGltaXRpbmcgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyB3aXRoaW4gYGJpbmZtdF9taXNjYCBpcyBhIGdvb2QgaWRlYSBpbiB0ZXJtcyBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaGFyZGVuaW5nLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHVzaW5nIGBpbmNfdWNvdW50YCBhbmQgYGRlY191Y291bnRgIHdpdGggYFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlNgIHRvIG1hbmFnZSB0aGUgYWNjb3VudGluZywgd2hpY2ggaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciByZXNvdXJjZSBsaW1pdGluZy4gVGhlIGNoYW5nZXMgZm9jdXMgb24gbW9kaWZ5aW5nIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIHRvIGFwcGx5IHRoZSBjaGFyZ2UsIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSB0ZXN0LCBgYmluZm10X21pc2NfaW50ZXJwbGltaXQuY2AsIGFuZCB0b3VjaGVkIGBiaW5mbXRfbWlzY19icGYuY2AuCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBga2VybmVsL3Vjb3VudC5jYCB0byBzZWUgaG93IHRoZSBsaW1pdCBpcyBpbXBsZW1lbnRlZC4gSSBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoZSBwb3RlbnRpYWwgaGVyZSBmb3IgZnV6emluZy4gYGJpbmZtdF9taXNjYCBpcywgYWZ0ZXIgYWxsLCB1c2VyLXJlYWNoYWJsZSB0aHJvdWdoIG1vdW50aW5nIGFuZCB3cml0aW5nIHRvIHRoZSBmaWxlIHN5c3RlbS4gVGhhdCBtZWFucyBhbnkgZmxhdyBpbiB0aGUgbG9naWMgaXMgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlIGxvb2suCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgc291bmRzIGxpa2UgdGhlIGNyaXRpY2FsIHBvaW50LiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VudHJ5X2F0dGFjaF9pbnRlcnByZXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz0yODU9c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0yOTctLyoqXG5mcy9iaW5mbXRfbWlzYy5jOjI5ODogKiBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIgLSBiaW5kIGFuIG9wZW5lZCBpbnRlcnByZXRlciB0byBAZVxuZnMvYmluZm10X21pc2MuYy0yOTktICogQGU6IGVudHJ5IGJlaW5nIGNvbmZpZ3VyZWRcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTMxMy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MzE0OnN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMzE1LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMzAxPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM1MS1cdGVsc2VcbmZzL2JpbmZtdF9taXNjLmM6MTM1MjpcdFx0cmV0dmFsID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIG5hbWUsIHBhdGgsIGYpO1xuZnMvYmluZm10X21pc2MuYy0xMzUzLVx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQ2Mj1zdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0ODYtXHRcdFx0cmV0dXJuIFBUUl9FUlIoZik7XG5mcy9iaW5mbXRfbWlzYy5jOjE0ODc6XHRcdGVyciA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBcJiMzNDtcJiMzNDssIGUtXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xuZnMvYmluZm10X21pc2MuYy0xNDg4LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEludGVycHJldGVyIEF0dGFjaG1lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBob3cgaW50ZXJwcmV0ZXJzIGFyZSBiZWluZyBsaW5rZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgYGJtX2VudHJ5X2FkZF9pbnRlcnBgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBhbmQgYm90aCBvZiB0aG9zZSB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHNjb3Bpbmcg4oCTIHNwZWNpZmljYWxseSwgYXJlIHRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgZG9pbmcgdGhlIGF0dGFjaGluZywgZGVjbGFyZWQgYXMgc3RhdGljPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJZiB0aGV5ICphcmUqIHN0YXRpYywgaXQgcmVhbGx5IGxpbWl0cyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBtYW5pcHVsYXRpb24gb3IgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVpciB2aXNpYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgb3IgaWYgdGhleSBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzZWN1cml0eSwgbWFpbnRhaW5hYmlsaXR5LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aG9zZSBkZWNsYXJhdGlvbnMgcXVpY2tseSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4cG9zdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JtX2VudHJ5X2FkZF9pbnRlcnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmM9MTI2ND1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjg1LS8qKlxuZnMvYmluZm10X21pc2MuYzoxMjg2OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcbmZzL2JpbmZtdF9taXNjLmMtMTI4Ny0gKiBAZTogdGhlIGVudHJ5XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMzAwLSAqL1xuZnMvYmluZm10X21pc2MuYzoxMzAxOnN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xMzAyLVx0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTM2Mj1zdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEzNzktXHRpZiAoYnVmWzBdID09ICYjMzk7JiM0MzsmIzM5OylcbmZzL2JpbmZtdF9taXNjLmM6MTM4MDpcdFx0cmV0dXJuIGJtX2VudHJ5X2FkZF9pbnRlcnAoZSwgZmlsZSwgYnVmLCBjb3VudCk7XG5mcy9iaW5mbXRfbWlzYy5jLTEzODEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipEaXZpbmcgaW50byB0aGUgV3JpdGUgT3BlcmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBibV9lbnRyeV93cml0ZWAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGZpbGUgb3BlcmF0aW9uIHdyaXRlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCbG9jayBNYW5hZ2VyLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGNvbmZpcm1pbmcgaG93IHdyaXRlcyBhcmUgcmVnaXN0ZXJlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBibV9yZWdpc3Rlcl93cml0ZWAgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGludGVybmFsbHkuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcmVnaXN0ZXJpbmcgYSB3cml0ZSBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTE0MzE9c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2MS1cbmZzL2JpbmZtdF9taXNjLmM6MTQ2MjpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTQ2My1cdFx0XHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xNTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jOjE1MDQ6XHQud3JpdGVcdFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcbmZzL2JpbmZtdF9taXNjLmMtMTUwNS1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRW50cnkgUG9pbnRzKioKCkFscmlnaHQsIGxldCYjMzk7cyB6b29tIGluIG9uIHRoaXMgY29kZS4gSXQgbG9va3MgbGlrZSBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBgYm1fZW50cnlfd3JpdGVgIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHdoYXRldmVyIHRoaXMgc3lzdGVtIGlzIGRvaW5nLiBHaXZlbiB0aGVpciBuYW1lcywgSSYjMzk7bSBndWVzc2luZyBvbmUgaGFuZGxlcyByZWdpc3Rlci1sZXZlbCB3cml0ZXMgYW5kIHRoZSBvdGhlciBtYW5hZ2VzIGRhdGEgZW50cmllcy4gU2VlbXMgbG9naWNhbCwgYSBzdGFuZGFyZCBhcmNoaXRlY3R1cmFsIGJyZWFrZG93biwgYW5kIGxpa2VseSBmb2xsb3dzIGEgY29tbW9uIHNvZnR3YXJlIGRlc2lnbiBwYXR0ZXJuLiBUbyB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHksIG15IGltbWVkaWF0ZSBmb2N1cyBoYXMgdG8gYmUgb24gYGJtX2VudHJ5X3dyaXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IG9wZXJhdGVzLCB0aGF0IHdpbGwgbGlrZWx5IGlsbHVtaW5hdGUgdGhlIHdob2xlIG9wZXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym1fZW50cnlfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmM9MTI2ND1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjcxLVxuZnMvYmluZm10X21pc2MuYzoxMjcyOlx0Lyogc2VxX29wZW4oKSBjbGVhcnMgRk1PREVfUFdSSVRFLCBibV9lbnRyeV93cml0ZSgpIHRha2VzIGFueSBvZmZzZXQgKi9cbmZzL2JpbmZtdF9taXNjLmMtMTI3My1cdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMzAxPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM2MS1cbmZzL2JpbmZtdF9taXNjLmM6MTM2MjpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTM2My1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9lbnRyeV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQyMi1cdC5yZWFkXHRcdD0gc2VxX3JlYWQsXG5mcy9iaW5mbXRfbWlzYy5jOjE0MjM6XHQud3JpdGVcdFx0PSBibV9lbnRyeV93cml0ZSxcbmZzL2JpbmZtdF9taXNjLmMtMTQyNC1cdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGZvciBDb21wbGV0ZSBGaWxlIE9wZXJhdGlvbiBDb3ZlcmFnZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0hhdmUgd2UgdHJ1bHkgYWNjb3VudGVkIGZvciAqYWxsKiB0aGUgZmlsZSBvcGVyYXRpb25zIGhlcmU/JiMzNDsgSXQmIzM5O3MgYSBjcml0aWNhbCBxdWVzdGlvbiB0byBhc2ssIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBkYXRhIG1hbmlwdWxhdGlvbi4gTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gcXVpY2tseSBhbmQgY29tcHJlaGVuc2l2ZWx5IHNjYW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHRvIHNlZSBpZiB3ZSYjMzk7dmUgbWlzc2VkIGFueXRoaW5nLiBNeSBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGFyZWFzIHdoZXJlIHdlIHB1dCBpbmZvcm1hdGlvbiBpbnRvIGEgc3lzdGVtLCB3aGljaCBzaG91bGQgY292ZXIgdGhlIG1vc3QgaW1wb3J0YW50IGFzcGVjdHMuICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCYjMzQ7LiBJJiMzOTtsbCB1c2UgdGhhdCBhcyBhIGp1bXBpbmctb2ZmIHBvaW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY2FwdHVyZWQgdGhlIGNvcmUgYWN0aW9ucyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW50cnlfcHV0X2ludGVycHJldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz0yNzM9c3RhdGljIHN0cnVjdCBmaWxlICpvcGVuX2ludGVycF9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBjaGFyICpwYXRoKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMjg0LS8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xuZnMvYmluZm10X21pc2MuYzoyODU6c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG5mcy9iaW5mbXRfbWlzYy5jLTI4Ni17XG4tLVxuZnMvYmluZm10X21pc2MuYz0zNzE9c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM3Ni1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbmZzL2JpbmZtdF9taXNjLmM6Mzc3Olx0XHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xuZnMvYmluZm10X21pc2MuYy0zNzgtXHRcdC8qIFdhbGtlcnMgbWF5IHN0aWxsIGRlcmVmZXJlbmNlIHRoaXMgZW50cnksIGV2ZW4gc2xlZXBpbmcuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGJpbmZtdF9oYW5kbGVyIFJlbW92YWwqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHB1dF9iaW5mbXRfaGFuZGxlcmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgdGhlICpyZW1vdmFsKiBvZiBhIGJpbmZtdCBoYW5kbGVyLiBUaGF0IG1ha2VzIGltbWVkaWF0ZSBzZW5zZTsgd2UgbmVlZCBhIG1lY2hhbmlzbSB0byBncmFjZWZ1bGx5IGNsZWFuIHVwIGFmdGVyIGEgaGFuZGxlciBpcyBubyBsb25nZXIgYWN0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgZXhhY3RseS4gV2hhdCBjbGVhbnVwIHRhc2tzIGFyZSBpbml0aWF0ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSBmcmVlZD8gSSBleHBlY3QgYSB3ZWxsLWRlc2lnbmVkIGhhbmRsZXIgd2lsbCBoYXZlIGFsbG9jYXRlZCBzb21lIGtlcm5lbCBzdHJ1Y3R1cmVzIGFuZCBwZXJoYXBzIGZpbGUgZGVzY3JpcHRvcnMsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgaXMgZnJlZWQgYW5kIGlmIHdlIGFyZSBjYWxsaW5nIGFwcHJvcHJpYXRlIGRlc3RydWN0aW9uIGZ1bmN0aW9ucyBmb3IgdGhhdCBkYXRhLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN0YWJpbGl0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcHV0X2JpbmZtdF9oYW5kbGVyYCBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X2JpbmZtdF9oYW5kbGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTM1Mj1zdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM2Mi0vKipcbmZzL2JpbmZtdF9taXNjLmM6MzYzOiAqIHB1dF9iaW5mbXRfaGFuZGxlciAtIHB1dCBiaW5hcnkgaGFuZGxlciBlbnRyeVxuZnMvYmluZm10X21pc2MuYy0zNjQtICogQGU6IGVudHJ5IHRvIHB1dFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzcwLSAqL1xuZnMvYmluZm10X21pc2MuYzozNzE6c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtMzcyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM4Mi1cbmZzL2JpbmZtdF9taXNjLmM6MzgzOkRFRklORV9GUkVFKHB1dF9iaW5mbXRfaGFuZGxlciwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICosIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG5mcy9iaW5mbXRfbWlzYy5jLTM4NC1cbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTYyMT1zdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2JpbmZtdF9taXNjLmMtNjIyLXtcbmZzL2JpbmZtdF9taXNjLmM6NjIzOlx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpmbXQgX19mcmVlKHB1dF9iaW5mbXRfaGFuZGxlcikgPSBOVUxMO1xuZnMvYmluZm10X21pc2MuYy02MjQtXHRjb25zdCBjaGFyICppbnRlcnByZXRlcjtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTg0OD1zdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTk5NC1cbmZzL2JpbmZtdF9taXNjLmM6OTk1Olx0LyogQm9ybiBob2xkaW5nIG9uZSByZWZlcmVuY2U7IHB1dF9iaW5mbXRfaGFuZGxlcigpIGlzIHRoZSB0ZWFyZG93bi4gKi9cbmZzL2JpbmZtdF9taXNjLmMtOTk2LVx0cmVmY291bnRfc2V0KFx1MDAyNmUtXHUwMDNldXNlcnMsIDEpO1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTE0OT1zdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTE2Mi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuZnMvYmluZm10X21pc2MuYzoxMTYzOlx0XHRwdXRfYmluZm10X2hhbmRsZXIoZSk7XG5mcy9iaW5mbXRfbWlzYy5jLTExNjQtXHR9XG4tLVxuZnMvYmluZm10X21pc2MuYz0xNDYyPXN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2NC17XG5mcy9iaW5mbXRfbWlzYy5jOjE0NjU6XHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKHB1dF9iaW5mbXRfaGFuZGxlcikgPSBOVUxMO1xuZnMvYmluZm10X21pc2MuYy0xNDY2LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBiaW5mbXRfbWlzYyBJbnRlcnByZXRlciBMaW1pdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9ldmljdF9pbm9kZWAsIGFuZCBgbG9hZF9taXNjX2JpbmFyeWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGhlcmUuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBiaW5mbXRfbWlzY2AsIHNwZWNpZmljYWxseSBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzLiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4KCkkgc2VlIHRoYXQgYFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlNgIGhhcyBiZWVuIGludHJvZHVjZWQsIGFsb25nIHdpdGggcmVsYXRlZCBkZWZpbml0aW9ucyBpbiBgdWNvdW50LmNgIGFuZCBgdXNlcl9uYW1lc3BhY2UuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgY29udHJvbCBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGF0IGNvdW50ZXIgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYXJlIGBDT05GSUdfQklORk1UX01JU0NgIGFuZCBgQ09ORklHX1VTRVJfTlNgLiBNYWtlcyBzZW5zZTsgYENPTkZJR19VU0VSX05TYCBpcyBjcnVjaWFsIGZvciBuYW1lc3BhY2UtYXdhcmUgbGltaXRzLiBUaW1lIHRvIGRpdmUgaW50byBgZnMvS2NvbmZpZy5iaW5mbXRgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBCSU5GTVRfTUlTQ2AuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gY29uZmlnIG9wdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgaG93IHRvIG1hbmFnZSB0aGlzIGludGVycHJldGVyIGxpbWl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQklORk1UX01JU0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxuLS1cbmZzL0tjb25maWcuYmluZm10LTE0NC1cbmZzL0tjb25maWcuYmluZm10OjE0NTpjb25maWcgQklORk1UX01JU0NcbmZzL0tjb25maWcuYmluZm10LTE0Ni1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBNSVNDIGJpbmFyaWVzXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTcxOmNvbmZpZyBCSU5GTVRfTUlTQ19CUEZcbmZzL0tjb25maWcuYmluZm10LTE3Mi1cdGJvb2wgXCYjMzQ7QlBGLXNlbGVjdGVkIGludGVycHJldGVycyBmb3IgbWlzYyBiaW5hcmllc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBrZXJuZWw6CgoqKkRlbHZpbmcgaW50byBVc2VyIE5hbWVzcGFjZXM6IEV4YW1pbmluZyBga2VybmVsL3Vjb3VudC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgcGVyaGFwcyBjb25maXJtIGEgaHVuY2gsIGFib3V0IGhvdyB1c2VyIG5hbWVzcGFjZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGtlcm5lbC91Y291bnQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYW55IGNvZGUgcmVsYXRlZCB0byBgVVNFUl9OU2AuIEl0JiMzOTtzIGEga2V5IHN0cnVjdHVyZSBhbmQgbWVjaGFuaXNtLCBhbmQgdGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbG9naWMgZm9yIG1hbmFnaW5nIHVzZXIgbmFtZXNwYWNlIHJlc291cmNlIGFjY291bnRpbmcsIHBlcmhhcHMgdXNlciBJRCBtYXBwaW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBzeXN0ZW0gY2FsbHMuIFRoZSBjb2RlIGluIGB1Y291bnQuY2Agc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBrZXJuZWwgdHJhY2tzIGFuZCBsaW1pdHMgcmVzb3VyY2UgY29uc3VtcHRpb24gd2l0aGluIHRoZXNlIGlzb2xhdGVkIHVzZXIgZW52aXJvbm1lbnRzLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIGhvdyB1c2VyIG5hbWVzcGFjZXMgb3BlcmF0ZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoaXMgZGV0YWlsIGZvciBsYXRlciBpbiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNDI5PWNvbmZpZyBJUENfTlNcbi0tXG5pbml0L0tjb25maWctMTQzNi1cbmluaXQvS2NvbmZpZzoxNDM3OmNvbmZpZyBVU0VSX05TXG5pbml0L0tjb25maWctMTQzOC1cdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDEKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiA0MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJJTkZNVF9NSVNDIGFuZCBVU0VSX05TIGZvciBSZWxldmFudCBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQklORk1UX01JU0NgIGFuZCBgVVNFUl9OU2AgYXMgbXkgY29uZmlnIGNvbnRleHQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9ldmljdF9pbm9kZWAsIGFuZCBgbG9hZF9taXNjX2JpbmFyeWAuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSB0aGUgY3J1Y2lhbCBvbmVzIGJlY2F1c2UgKnRoZXkqIGFyZSB3aGF0IGNhbGwgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAsIGFuZCB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGBpbmNfdWNvdW50YC4gT24gdGhlIGZsaXAgc2lkZSwgYGJtX2V2aWN0X2lub2RlYCBpcyBsaW5rZWQgdG8gYHB1dF9iaW5mbXRfaGFuZGxlcmAsIHdoaWNoIGNhbGxzIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCwgdGhhdCB0aGVuIGRvZXMgdGhlIGBkZWNfdWNvdW50YCBvcGVyYXRpb24uCgpMZXQmIzM5O3MgZHJpbGwgZG93bi4gYGJtX3JlZ2lzdGVyX3dyaXRlYCBsb29rcyBzb2xpZDsgaXQgaGFuZGxlcyB3cml0ZXMgdG8gYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmAuICBgYm1fZW50cnlfd3JpdGVgIGlzIHNpbWlsYXJseSBmb2N1c2VkIG9uIHdyaXRlcyB0byBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjLyZsdDtlbnRyeSZndDtgLiAgYGJtX2V2aWN0X2lub2RlYCBpcyB0cmlnZ2VyZWQgd2hlbiBhIGJpbmZtdCBlbnRyeSBmaWxlIGdldHMgcmVtb3ZlZC4gQW5kIGBsb2FkX21pc2NfYmluYXJ5YCBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gYSBiaW5hcnkgaXMgZXhlY3V0ZWQuIFNvLCBjb25zaWRlcmluZyB0aGF0LCBJJiMzOTttIGRlZmluaXRlbHkgaW5jbHVkaW5nIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIGBibV9lbnRyeV93cml0ZWAgaW4gbXkgYW5hbHlzaXMuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIHN0YXRpYyBpc3N1ZS4gYGJtX3JlZ2lzdGVyX3dyaXRlYCAqaXMqIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgb2ZmIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBIb3dldmVyLCB0aGVzZSBgYm1fKmAgZnVuY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3RzLiBUaGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGFuZCB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgb3B0aW9uPwoKYGluY191Y291bnRgIGFuZCBgZGVjX3Vjb3VudGAgYXJlIGV4cG9ydGVkLCBidXQgdGhvc2UgYXJlIGp1c3QgZ2VuZXJpYyB1dGlsaXRpZXMuIExldCBtZSBjaGVjayBpZiBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBpcyBpbmxpbmVkLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0ICphdXRvbWF0aWNhbGx5KiBtZWFuIGl0JiMzOTtzIGlubGluZWQuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZnMvYmluZm10X21pc2MuY2AgZm9yIHNvbWUgbW9yZSBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDEKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRmluZGluZyBEeW5hbWljIEZ1bmN0aW9uYWxpdHkgaW4gYGZzL2JpbmZtdF9taXNjLmNgKioKClJpZ2h0LCBzbyB0aGUgZ29hbCBpcyB0byBwaW5wb2ludCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL2JpbmZtdF9taXNjLmNgLiBXaHk/IFdlbGwsIHByb2JhYmx5IGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZHluYW1pY2FsbHkgaGFuZGxlcyBleGVjdXRhYmxlIGZvcm1hdHMsIG9yIHBlcmhhcHMgSSYjMzk7bSBsb29raW5nIHRvIGV4dGVuZCBpdHMgY2FwYWJpbGl0aWVzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsaW1pdGVkIGluIHNjb3BlLCBhbmQgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHNvIHRvIHNwZWFrLCBvZiB0aGF0IGZpbGUuIFRoZXkmIzM5O3JlIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBob29rcywgdGhlIHRoaW5ncyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB1c2VyLXNwYWNlIG1pZ2h0IGNhbGwgaW50by4gVGhlcmVmb3JlLCBmb2N1c2luZyBvbiB0aGUgbm9uLXN0YXRpYyBvbmVzIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjYWxsYWJsZSBieSBvdGhlciBtb2R1bGVzIG9yIHRoZSBrZXJuZWwgYXMgYSB3aG9sZS4gSSBleHBlY3QgdGhlc2Ugd2lsbCBiZSB0aGUgZnVuY3Rpb25zIG1hbmFnaW5nIHRoZSByZWdpc3RyYXRpb24sIGxvYWRpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZm9ybWF0cyBhcmUgaGFuZGxlZCBhbmQgd2hhdCBob29rcyBhcmUgYXZhaWxhYmxlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTI3CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqQ29uc2lkZXJpbmcgUG90ZW50aWFsIFR5cGUgUXVhbGlmaWVycyBmb3IgU2l6ZS1SZWxhdGVkIFZhcmlhYmxlcyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZGVzaWduIHByb2JsZW0sIGFuZCBJJiMzOTttIGF0IHRoZSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gc2V0dGxlIG9uIGEgdHlwZSBxdWFsaWZpZXIgZm9yIGEgdmFyaWFibGUgbGlrZWx5IHRvIGhvbGQgc2l6ZSBpbmZvcm1hdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUgYmVzdCBvcHRpb25zIGhlcmU/JiMzNDsgTXkgaW5pdGlhbCBpbnN0aW5jdCBsZWFucyB0b3dhcmRzIHRyeWluZyBgXnZvaWRgIG9yIGBec3NpemVfdGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFzc2VzcyB0aGUgdHJhZGVvZmZzLiBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiBIb3cgZG9lcyB0aGlzIGltcGFjdCBwb3J0YWJpbGl0eT8gSXMgYF52b2lkYCBvdmVybHkgZ2VuZXJpYywgb3IgZG9lcyBpdCBvZmZlciBzb21lIHBvdGVudGlhbCBmb3IgZnV0dXJlIGZsZXhpYmlsaXR5PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgXnNzaXplX3RgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoOiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgcGxhdGZvcm0sIGFuZCB3aWxsIGl0IGJlIHRoZSBiZXN0IG9wdGlvbiBoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxzc2l6ZV90fGludCkgW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBGb2N1c2VkIEFwcHJvYWNoKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXIuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gaW1tZWRpYXRlbHkgZW5nYWdlIHdpdGggdGhlIGNvcmUgZWxlbWVudDogdGhlIGZpbGUgaXRzZWxmLiBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIG92ZXJ0aGluayB0aGUgc2l0dWF0aW9uIG9yIGdldCBib2dnZWQgZG93biBpbiBhbmNpbGxhcnkgY29uY2VybnMuIExldCYjMzk7cyBjdXQgdGhyb3VnaCB0aGUgbm9pc2UgYW5kIGRpcmVjdGx5IGFzc2VzcyB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24uIEp1bXBpbmcgc3RyYWlnaHQgaW50byB0aGUgZmlsZSBpcyB0aGUgbW9zdCBlZmZpY2llbnQgYW5kIHByYWN0aWNhbCBzdGFydGluZyBwb2ludC4gVGhhdCBpbml0aWFsIHNjYW4gYW5kIHBhcnNlIHdpbGwgaW5mb3JtIG15IHN1YnNlcXVlbnQgZXZhbHVhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIGJpbmZtdF9taXNjLmNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEfDvG50aGVyXG4gICA2Olx0ICpcbiAgIDc6XHQgKiBiaW5mbXRfbWlzYyBkZXRlY3RzIGJpbmFyaWVzIHZpYSBhIG1hZ2ljIG9yIGZpbGVuYW1lIGV4dGVuc2lvbiBhbmQgaW52b2tlc1xuICAgODpcdCAqIGEgc3BlY2lmaWVkIHdyYXBwZXIuIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10X21pc2MuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmVkLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jdHlwZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzdHJ0b3guaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICAzMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAgMzI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gIDM0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2ZpbGUuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAzNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuICAzNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gIDM4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2hlbHBlcnMuaFx1MDAzZVxuICAzOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICA0MDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcdTAwM2VcbiAgNDE6XHRcbiAgNDI6XHQjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gIDQzOlx0XG4gIDQ0Olx0LyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqL1xuICA0NTpcdGVudW0gYmluZm10X21pc2NfZW50cnlfYml0cyB7XG4gIDQ2Olx0XHRNSVNDX0ZNVF9FTkFCTEVEX0JJVFx0PSAwLFxuICA0NzpcdFx0TUlTQ19GTVRfTUFHSUNfQklUXHQ9IDEsXG4gIDQ4Olx0XHRNSVNDX0ZNVF9CUEZfQklUXHQ9IDIsXG4gIDQ5Olx0fTtcbiAgNTA6XHRcbiAgNTE6XHQvKiBFbnRyeSBiZWhhdmlvciBmbGFncywgZml4ZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWUuICovXG4gIDUyOlx0ZW51bSBiaW5mbXRfbWlzY19lbnRyeV9mbGFncyB7XG4gIDUzOlx0XHRNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMFx0PSAoMVUgXHUwMDNjXHUwMDNjIDMxKSxcbiAgNTQ6XHRcdE1JU0NfRk1UX09QRU5fQklOQVJZXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMzApLFxuICA1NTpcdFx0TUlTQ19GTVRfQ1JFREVOVElBTFNcdD0gKDFVIFx1MDAzY1x1MDAzYyAyOSksXG4gIDU2Olx0XHRNSVNDX0ZNVF9PUEVOX0ZJTEVcdD0gKDFVIFx1MDAzY1x1MDAzYyAyOCksXG4gIDU3Olx0XHRNSVNDX0ZNVF9UUkFOU1BBUkVOVFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI3KSxcbiAgNTg6XHRcdE1JU0NfRk1UX0xPQURFUlx0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjYpLFxuICA1OTpcdFx0TUlTQ19GTVRfRElTQUJMRURcdD0gKDFVIFx1MDAzY1x1MDAzYyAyNSksXG4gIDYwOlx0fTtcbiAgNjE6XHRcbiAgNjI6XHQvKiBUaGUgZmxhZ3MgdGhhdCBzaGFwZSB0aGUgaW52b2NhdGlvbjsgYSAmIzM5O0ImIzM5OyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqL1xuICA2MzpcdCNkZWZpbmUgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUyAoTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgfFx0XFxcbiAgNjQ6XHRcdFx0XHRcdCAgIE1JU0NfRk1UX09QRU5fQklOQVJZIHxcdFxcXG4gIDY1Olx0XHRcdFx0XHQgICBNSVNDX0ZNVF9DUkVERU5USUFMUyB8XHRcXFxuICA2NjpcdFx0XHRcdFx0ICAgTUlTQ19GTVRfT1BFTl9GSUxFIHxcdFx0XFxcbiAgNjc6XHRcdFx0XHRcdCAgIE1JU0NfRk1UX1RSQU5TUEFSRU5UIHxcdFxcXG4gIDY4Olx0XHRcdFx0XHQgICBNSVNDX0ZNVF9MT0FERVIpXG4gIDY5Olx0XG4gIDcwOlx0LyoqXG4gIDcxOlx0ICogc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgLSBhIGZsYWcgY2hhcmFjdGVyIG9mIHRoZSByZWdpc3RlciBzdHJpbmdcbiAgNzI6XHQgKiBAYzogdGhlIGNoYXJhY3RlciB1c2Vyc3BhY2Ugd3JpdGVzIGFuZCByZWFkcyBiYWNrXG4gIDczOlx0ICogQGZsYWc6IHRoZSBlbnRyeSBmbGFnIGl0IHNldHNcbiAgNzQ6XHQgKiBAaW1wbGllczogZW50cnkgZmxhZ3MgaXQgdHVybnMgb24gaW4gYWRkaXRpb25cbiAgNzU6XHQgKiBAZGVzYzogd2hhdCBpdCBkb2VzLCBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBkZWJ1ZyBvdXRwdXRcbiAgNzY6XHQgKi9cbiAgNzc6XHRzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XG4gIDc4Olx0XHRjaGFyXHRcdGM7XG4gIDc5Olx0XHR1bnNpZ25lZCBsb25nXHRmbGFnO1xuICA4MDpcdFx0dW5zaWduZWQgbG9uZ1x0aW1wbGllcztcbiAgODE6XHRcdGNvbnN0IGNoYXJcdCpkZXNjO1xuICA4MjpcdH07XG4gIDgzOlx0XG4gIDg0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcbiAgODU6XHRcdHsgJiMzOTtQJiMzOTssIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwLFx0MCxcdFx0XHRcJiMzNDtwcmVzZXJ2ZSBhcmd2MFwmIzM0O1x0XHR9LFxuICA4NjpcdFx0eyAmIzM5O08mIzM5OywgTUlTQ19GTVRfT1BFTl9CSU5BUlksXHQwLFx0XHRcdFwmIzM0O29wZW4gYmluYXJ5XCYjMzQ7XHRcdFx0fSxcbiAgODc6XHRcdHsgJiMzOTtDJiMzOTssIE1JU0NfRk1UX0NSRURFTlRJQUxTLFx0TUlTQ19GTVRfT1BFTl9CSU5BUlksXHRcJiMzNDtjcmVkZW50aWFscyBmcm9tIHRoZSBiaW5hcnlcJiMzNDtcdH0sXG4gIDg4Olx0XHR7ICYjMzk7RiYjMzk7LCBNSVNDX0ZNVF9PUEVOX0ZJTEUsXHQwLFx0XHRcdFwmIzM0O29wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcJiMzNDtcdH0sXG4gIDg5Olx0XHR7ICYjMzk7VCYjMzk7LCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcdE1JU0NfRk1UX09QRU5fQklOQVJZLFx0XCYjMzQ7dHJhbnNwYXJlbnRcJiMzNDtcdFx0XHR9LFxuICA5MDpcdFx0eyAmIzM5O0wmIzM5OywgTUlTQ19GTVRfTE9BREVSLFx0XHQwLFx0XHRcdFwmIzM0O2xvYWRlciBzdWJzdGl0dXRpb25cJiMzNDtcdFx0fSxcbiAgOTE6XHRcdHsgJiMzOTtEJiMzOTssIE1JU0NfRk1UX0RJU0FCTEVELFx0MCxcdFx0XHRcJiMzNDtyZWdpc3RlciBkaXNhYmxlZFwmIzM0O1x0XHR9LFxuICA5MjpcdH07XG4gIDkzOlx0XG4gIDk0Olx0LyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXG4gIDk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpXG4gIDk2Olx0e1xuICA5NzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWlzY19mbGFncyk7IGkmIzQzOyYjNDM7KVxuICA5ODpcdFx0XHRpZiAobWlzY19mbGFnc1tpXS5jID09IGMpXG4gIDk5Olx0XHRcdFx0cmV0dXJuIFx1MDAyNm1pc2NfZmxhZ3NbaV07XG4gMTAwOlx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRvIHRoaXMuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBEaWdpdGFsIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGF0IGEgcG9pbnQgaW4gdGhpcyBwcm9jZXNzIHdoZXJlIEkmIzM5O3ZlIGFuYWx5emVkIGEgc3BlY2lmaWMgcGFydCwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiBteSBwZXJzcGVjdGl2ZS4gSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQsIGJ1dCB0byBiZSB0cnVseSB0aG9yb3VnaCwgSSBuZWVkIHRvIHpvb20gb3V0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZSYjMzQ7LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSYjMzk7bSBtZW50YWxseSBidWlsZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHNuaXBwZXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlLCB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIHRoZSB3aWRlciBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gVGhlcmUgY291bGQgYmUgY3JpdGljYWwgY29ubmVjdGlvbnMgYW5kIGltcGxpY2l0IGFzc3VtcHRpb25zLCBhbGwgb2Ygd2hpY2ggbWlnaHQgYmUgcmV2ZWFsZWQgdGhyb3VnaCBicm9hZGVyIGNvbnRleHQuIFNvLCBJJiMzOTtsbCBiZSBnb2luZyB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRvIHNlZSBob3cgdGhpcyBhcmVhIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz03Nz1zdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XG4tLVxuZnMvYmluZm10X21pc2MuYy04My1cbmZzL2JpbmZtdF9taXNjLmM6ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcbmZzL2JpbmZtdF9taXNjLmMtODUtXHR7ICYjMzk7UCYjMzk7LCBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCxcdDAsXHRcdFx0XCYjMzQ7cHJlc2VydmUgYXJndjBcJiMzNDtcdFx0fSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTk0LS8qIExvb2sgdXAgYSBmbGFnIGNoYXJhY3RlciwgTlVMTCBpZiBAYyBpcyBub3Qgb25lLiAqL1xuZnMvYmluZm10X21pc2MuYzo5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgKm1pc2NfZmxhZ19ieV9jaGFyKGNvbnN0IGNoYXIgYylcbmZzL2JpbmZtdF9taXNjLmMtOTYte1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQwPURFRklORV9TVEFUSUNfU1JDVV9GQVNUKGJtX2VudHJpZXNfc3JjdSk7XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDItLyogQ2hlY2sgaWYgQGUmIzM5O3MgbWFnaWMgbWF0Y2hlcyBAYnBybSYjMzk7cyBidWZmZXIsIGFwcGx5aW5nIHRoZSBtYXNrIGlmIHNldC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTQzOnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfbWFnaWMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xNDQtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTU4LS8qIENoZWNrIGlmIEBlJiMzOTtzIHJlZ2lzdGVyZWQgZXh0ZW5zaW9uIG1hdGNoZXMgQGV4dCwgTlVMTCBpZiB0aGVyZSBpcyBub25lLiAqL1xuZnMvYmluZm10X21pc2MuYzoxNTk6c3RhdGljIGJvb2wgZW50cnlfbWF0Y2hlc19leHRlbnNpb24oY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xNjAtXHRcdFx0XHQgICAgY29uc3QgY2hhciAqZXh0KVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTgxLSAqL1xuZnMvYmluZm10X21pc2MuYzoxODI6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqXG5mcy9iaW5mbXRfbWlzYy5jLTE4My1zZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMjMwLSAqL1xuZnMvYmluZm10X21pc2MuYzoyMzE6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbmZzL2JpbmZtdF9taXNjLmMtMjMyLVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MjQ2PWJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0yNTYtLyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqL1xuZnMvYmluZm10X21pc2MuYzoyNTc6c3RhdGljIHZvaWQgY2xvc2VfaW50ZXJwX2ZpbGUoc3RydWN0IGZpbGUgKmYpXG5mcy9iaW5mbXRfbWlzYy5jLTI1OC17XG4tLVxuZnMvYmluZm10X21pc2MuYz0yNjU9REVGSU5FX0ZSRUUoY2xvc2VfaW50ZXJwX2ZpbGUsIHN0cnVjdCBmaWxlICosIGNsb3NlX2ludGVycF9maWxlKF9UKSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTI3Mi0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MjczOnN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcbmZzL2JpbmZtdF9taXNjLmMtMjc0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTI4NC0vKiBSZWxlYXNlIHRoZSBpbnRlcnByZXRlcnMgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6Mjg1OnN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuZnMvYmluZm10X21pc2MuYy0yODYte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzEzLSAqL1xuZnMvYmluZm10X21pc2MuYzozMTQ6c3RhdGljIGludCBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0zMTUtXHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM1MS1cbmZzL2JpbmZtdF9taXNjLmM6MzUyOnN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuZnMvYmluZm10X21pc2MuYy0zNTMte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzcwLSAqL1xuZnMvYmluZm10X21pc2MuYzozNzE6c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtMzcyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTM4Mz1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzg1LS8qIERyb3AgZXZlcnl0aGluZyBhIGxvYWQgcHJvZ3JhbSBzdGFnZWQgZm9yIHRoaXMgZXhlYy4gKi9cbmZzL2JpbmZtdF9taXNjLmM6Mzg2OnN0YXRpYyB2b2lkIGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuZnMvYmluZm10X21pc2MuYy0zODcte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNDEwLSAqL1xuZnMvYmluZm10X21pc2MuYzo0MTE6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqY3VycmVudF9iaW5mbXRfbWlzYyh2b2lkKVxuZnMvYmluZm10X21pc2MuYy00MTIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNDM3LSAqL1xuZnMvYmluZm10X21pc2MuYzo0Mzg6c3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTQzOS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X21pc2MuYy00ODgtICovXG5mcy9iaW5mbXRfbWlzYy5jOjQ4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtNDkwLVx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTUyNy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NTI4OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTUyOS1cdFx0XHRcdFx0ICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTU3MC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NTcxOnN0YXRpYyBpbnQgYnVpbGRfaW50ZXJwX2FyZ3Yoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqaW50ZXJwcmV0ZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTU3Mi1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxuZnMvYmluZm10X21pc2MuYy02MjAtICovXG5mcy9iaW5mbXRfbWlzYy5jOjYyMTpzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2JpbmZtdF9taXNjLmMtNjIyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTcwMi0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NzAzOnN0YXRpYyBjaGFyICpzY2FuYXJnKGNoYXIgKnMsIGNoYXIgZGVsKVxuZnMvYmluZm10X21pc2MuYy03MDQte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNzIwLS8qIFBhcnNlIHRoZSAmIzM5O2ZsYWdzJiMzOTsgZmllbGQsIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBpcyBub3Qgb25lLiAqL1xuZnMvYmluZm10X21pc2MuYzo3MjE6c3RhdGljIGNoYXIgKmNoZWNrX3NwZWNpYWxfZmxhZ3MoY2hhciAqcCwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuZnMvYmluZm10X21pc2MuYy03MjIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNzMzLS8qIFBhcnNlIHRoZSAmIzM5O29mZnNldCYjMzk7LCAmIzM5O21hZ2ljJiMzOTsgYW5kICYjMzk7bWFzayYjMzk7IGZpZWxkcyBvZiBhbiAmIzM5O00mIzM5OyBlbnRyeS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6NzM0OnN0YXRpYyBjaGFyICpwYXJzZV9tYWdpY19maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcbmZzL2JpbmZtdF9taXNjLmMtNzM1LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTc5NC0vKiBQYXJzZSB0aGUgJiMzOTttYWdpYyYjMzk7IGZpZWxkIG9mIGFuICYjMzk7RSYjMzk7IGVudHJ5OiB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uLiAqL1xuZnMvYmluZm10X21pc2MuYzo3OTU6c3RhdGljIGNoYXIgKnBhcnNlX2V4dGVuc2lvbl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLFxuZnMvYmluZm10X21pc2MuYy03OTYtXHRcdFx0XHQgICAgY2hhciBkZWwpXG4tLVxuZnMvYmluZm10X21pc2MuYy04MjUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjgyNjpzdGF0aWMgY2hhciAqcGFyc2VfYnBmX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsIGNoYXIgZGVsKVxuZnMvYmluZm10X21pc2MuYy04Mjcte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtODQ3LSAqL1xuZnMvYmluZm10X21pc2MuYzo4NDg6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTg0OS1cdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTAwMT1lbnVtIGJtX2NvbW1hbmQge1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTAxNC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTAxNTpzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciAqcywgc2l6ZV90IGNvdW50KVxuZnMvYmluZm10X21pc2MuYy0xMDE2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwMzItLyogQ29weSBpbiBhIGNvbW1hbmQgZnJvbSBhIGZpbGUgdGhhdCB0YWtlcyBub3RoaW5nIGVsc2UsIGFuZCBwYXJzZSBpdC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTAzMzpzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXG5mcy9iaW5mbXRfbWlzYy5jLTEwMzQte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTA0Ni0vKiBUaGUgcm9vdCBkaXJlY3RvcnkmIzM5O3MgaW5vZGU7IGl0cyBsb2NrIHNlcmlhbGl6ZXMgY29uZmlndXJpbmcgYW4gaW5zdGFuY2UuICovXG5mcy9iaW5mbXRfbWlzYy5jOjEwNDc6c3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xMDQ4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTEtXG5mcy9iaW5mbXRfbWlzYy5jOjEwNTI6c3RhdGljIHZvaWQgYm1fc2VxX2hleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHU4ICpkYXRhLCBpbnQgc2l6ZSlcbmZzL2JpbmZtdF9taXNjLmMtMTA1My17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDU3LVxuZnMvYmluZm10X21pc2MuYzoxMDU4OnN0YXRpYyBpbnQgYm1fZW50cnlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZClcbmZzL2JpbmZtdF9taXNjLmMtMTA1OS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMTA3LVxuZnMvYmluZm10X21pc2MuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bW9kZV90IG1vZGUpXG5mcy9iaW5mbXRfbWlzYy5jLTExMDkte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTEzMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTEzMTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICppX2JpbmZtdF9taXNjKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9iaW5mbXRfbWlzYy5jLTExMzIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTE0OC0qL1xuZnMvYmluZm10X21pc2MuYzoxMTQ5OnN0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9iaW5mbXRfbWlzYy5jLTExNTAte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTE3OC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTE3OTpzdGF0aWMgdm9pZCB1bmxpbmtfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuZnMvYmluZm10X21pc2MuYy0xMTgwLVx0XHRcdFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMTk0LSAqL1xuZnMvYmluZm10X21pc2MuYzoxMTk1OnN0YXRpYyB2b2lkIHJlbW92ZV9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG5mcy9iaW5mbXRfbWlzYy5jLTExOTYtXHRcdFx0XHQgIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyMDItLyogUmVtb3ZlIEBlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLiAqL1xuZnMvYmluZm10X21pc2MuYzoxMjAzOnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9iaW5mbXRfbWlzYy5jLTEyMDQte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTIxNC0vKiBSZW1vdmUgYWxsIGVudHJpZXMgb2YgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIEBtaXNjIGJlbG9uZ2luZyB0byBAc2IuICovXG5mcy9iaW5mbXRfbWlzYy5jOjEyMTU6c3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbmZzL2JpbmZtdF9taXNjLmMtMTIxNi1cdFx0XHRcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyNDUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjEyNDY6c3RhdGljIGludCBibV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2JpbmZtdF9taXNjLmMtMTI0Ny17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjU2LVxuZnMvYmluZm10X21pc2MuYzoxMjU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBibV9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTI1OC1cdC5sb29rdXBcdFx0PSBzaW1wbGVfbG9va3VwLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTI2My1cbmZzL2JpbmZtdF9taXNjLmM6MTI2NDpzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9iaW5mbXRfbWlzYy5jLTEyNjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTMwMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTMwMTpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMTMwMi1cdFx0XHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjEtXG5mcy9iaW5mbXRfbWlzYy5jOjEzNjI6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjMtXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTktXG5mcy9iaW5mbXRfbWlzYy5jOjE0MjA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fZW50cnlfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTQyMS1cdC5vcGVuXHRcdD0gYm1fZW50cnlfb3Blbixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0MzAtLyogYWRkIHRvIGZpbGVzeXN0ZW0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTQzMTpzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9iaW5mbXRfbWlzYy5jLTE0MzIte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2MS1cbmZzL2JpbmZtdF9taXNjLmM6MTQ2MjpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTQ2My1cdFx0XHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTAyLVxuZnMvYmluZm10X21pc2MuYzoxNTAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE1MDQtXHQud3JpdGVcdFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1MDktXG5mcy9iaW5mbXRfbWlzYy5jOjE1MTA6c3RhdGljIHNzaXplX3RcbmZzL2JpbmZtdF9taXNjLmMtMTUxMS1ibV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTUyMC1cbmZzL2JpbmZtdF9taXNjLmM6MTUyMTpzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTE1MjItXHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTU0NC1cbmZzL2JpbmZtdF9taXNjLmM6MTU0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9zdGF0dXNfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTU0Ni1cdC5yZWFkXHRcdD0gYm1fc3RhdHVzX3JlYWQsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTUyLVxuZnMvYmluZm10X21pc2MuYzoxNTUzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBibV9zdXBlcl9vcHMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE1NTQtXHQuc3RhdGZzXHRcdD0gc2ltcGxlX3N0YXRmcyxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTctXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTg6c3RhdGljIGludCBibV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2JpbmZtdF9taXNjLmMtMTU1OS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjMwLVxuZnMvYmluZm10X21pc2MuYzoxNjMxOnN0YXRpYyB2b2lkIGJtX2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYmluZm10X21pc2MuYy0xNjMyLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2MzYtXG5mcy9iaW5mbXRfbWlzYy5jOjE2Mzc6c3RhdGljIGludCBibV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9iaW5mbXRfbWlzYy5jLTE2Mzgte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTY0MS1cbmZzL2JpbmZtdF9taXNjLmM6MTY0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBibV9jb250ZXh0X29wcyA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTY0My1cdC5mcmVlXHRcdD0gYm1fZnJlZSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDYtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NDc6c3RhdGljIHZvaWQgYm1fa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xNjQ4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NTQtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NTU6c3RhdGljIGludCBibV9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYmluZm10X21pc2MuYy0xNjU2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjAtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NjE6c3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgbWlzY19mb3JtYXQgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE2NjItXHQubW9kdWxlID0gVEhJU19NT0RVTEUsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjY1LVxuZnMvYmluZm10X21pc2MuYzoxNjY2OnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBibV9mc190eXBlID0ge1xuZnMvYmluZm10X21pc2MuYy0xNjY3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxuZnMvYmluZm10X21pc2MuYz0xNjczPU1PRFVMRV9BTElBU19GUyhcJiMzNDtiaW5mbXRfbWlzY1wmIzM0Oyk7XG5mcy9iaW5mbXRfbWlzYy5jLTE2NzQtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NzU6c3RhdGljIGludCBfX2luaXQgaW5pdF9taXNjX2JpbmZtdCh2b2lkKVxuZnMvYmluZm10X21pc2MuYy0xNjc2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2ODItXG5mcy9iaW5mbXRfbWlzYy5jOjE2ODM6c3RhdGljIHZvaWQgX19leGl0IGV4aXRfbWlzY19iaW5mbXQodm9pZClcbmZzL2JpbmZtdF9taXNjLmMtMTY4NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjI0CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDg5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJpbkZtdCBNaXNjIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIHdvdWxkIG1ha2UgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB0aG9zZSBhcmUgdGhlIG1vc3Qgc3RhYmxlIGFuZCBlYXNpbHkgYWNjZXNzaWJsZSBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIEluaXRpYWxseSwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCBjYXVnaHQgbXkgZXllLCBidXQgaXQmIzM5O3Mgbm90IGEgdHJ1ZSBBUEkgZW50cnkgcG9pbnQuIFRoZW4gSSBub3RpY2VkIHRoYXQgYGxvYWRfbWlzY19iaW5hcnlgICppcyogc3RhdGljLCBidXQgaXMgYXNzaWduZWQgdG8gYG1pc2NfZm9ybWF0LmxvYWRfYmluYXJ5YC4gU2ltaWxhcmx5LCBJIHNhdyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFzc2lnbmVkIHRvIGBibV9yZWdpc3Rlcl9vcGVyYXRpb25zLndyaXRlYCwgYGJtX2VudHJ5X3dyaXRlYCBhc3NpZ25lZCB0byBgYm1fZW50cnlfb3BlcmF0aW9ucy53cml0ZWAsIGFuZCBgYm1fZXZpY3RfaW5vZGVgIGFzc2lnbmVkIHRvIGBibV9zdXBlcl9vcHMuZXZpY3RfaW5vZGVgLiBUaGVzZSBhc3NpZ25tZW50cywgc3BlY2lmaWNhbGx5IHRvIHRoZSBmdW5jdGlvbiBwb2ludGVycywgbWFkZSBtZSByZWFsaXplIHRoZXNlIGFyZSBpbmRlZWQgdGhlIHJpZ2h0IHBsYWNlcyB0byBmb2N1cy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgbW9yZSBjbG9zZWx5LCBpdCBzZWVtcyB0aGF0IGBsb2FkX21pc2NfYmluYXJ5YCBkb2VzbiYjMzk7dCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCwgbWVhbmluZyBpdCYjMzk7cyBsZXNzIHJlbGV2YW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBhbmQgYGVudHJ5X3B1dF9pbnRlcnByZXRlcnNgLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBpcyBjYWxsZWQgYnkgYGJtX2VudHJ5X2FkZF9pbnRlcnBgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCB3aGVyZSBgYm1fZW50cnlfYWRkX2ludGVycGAgaXMgY2FsbGVkIGJ5IGBibV9lbnRyeV93cml0ZWAuICBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgaXMgY2FsbGVkIGJ5IGBwdXRfYmluZm10X2hhbmRsZXJgLCB3aGljaCBpcyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnMsIGluY2x1ZGluZyBgYm1fZW50cnlfZnJlZV9yY3VgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBjcmVhdGVfZW50cnlgLCBgYm1fZXZpY3RfaW5vZGVgLCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYC4KCkFmdGVyIHRoaXMsIEkgcmUtZXZhbHVhdGVkIGFuZCBkZWNpZGVkIHRoYXQgYGJtX3JlZ2lzdGVyX3dyaXRlYCwgYGJtX2VudHJ5X3dyaXRlYCwgYW5kIGBibV9ldmljdF9pbm9kZWAgYXJlIHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMsIGhvd2V2ZXIsIHNpbmNlIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIGBibV9lbnRyeV93cml0ZWAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9udG8gdGhlIGNvbmZpZ3VyYXRpb25zLiAgSSBjaGVja2VkIGZvciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgaWRlbnRpZmllZCBgQ09ORklHX0JJTkZNVF9NSVNDYCBhbmQgYENPTkZJR19VU0VSX05TYC4gSG93ZXZlciwgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1VTRVJfTlNgIGFuZCBkaXNjb3ZlcmluZyBpdCBkZXBlbmRzIG9uIGBNVUxUSVVTRVJgIGFuZCBgTkFNRVNQQUNFU2AgYW5kIHNpbmNlIGBVU0VSX05TYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gc3l6a2FsbGVyLCBJIHdpbGwganVzdCBsaXN0IGBCSU5GTVRfTUlTQ2AgYW5kIGBVU0VSX05TYC4KCkRvdWJsZS1jaGVja2luZyBgZnMvS2NvbmZpZy5iaW5mbXRgIGZvciBgQklORk1UX01JU0NgIGNvbmZpcm1lZCBpdCBoYXMgbm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMuICBSZXZpZXdpbmcgYGtlcm5lbC91Y291bnQuY2AgZm9yIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCBzb2xpZGlmaWVzIHRoYXQgYEJJTkZNVF9NSVNDYCBpcyB0aGUgb25seSB0cnVseSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi4KCkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHk6IGl0JiMzOTtzIGFkZGluZyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCwgdXNpbmcgYGluY191Y291bnRgIGFuZCBgZGVjX3Vjb3VudGAgZm9yIHRoZSBjb3VudC4gVGhlIGxpbWl0IGl0c2VsZiBpcyBzZXQgdmlhIGAvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYC4gVGhlIHBhdGNoIHRvdWNoZXMgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgdG8gY2hhcmdlIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCB3b3J0aCBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6Ci0gYGJtX3JlZ2lzdGVyX3dyaXRlYAotIGBibV9lbnRyeV93cml0ZWAKLSBgYm1fZXZpY3RfaW5vZGVgCgpBbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOgotIGBCSU5GTVRfTUlTQ2AKLSBgVVNFUl9OU2AKClRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9ldmljdF9pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBsaW1pdCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBpbiBgYmluZm10X21pc2NgIHVzaW5nIGB1Y291bnRzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBhbmQgYGJpbmZtdF9taXNjYCBmaWxlc3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAoaW4gYSB1c2VyIG5hbWVzcGFjZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgb2YgYGJpbmZtdF9taXNjYCBlbnRyaWVzIHRvIHRlc3QgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIG9mIHRoZSBidWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O1VTRVJfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9ldmljdF9pbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCBsaW1pdCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBpbiBgYmluZm10X21pc2NgIHVzaW5nIGB1Y291bnRzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBhbmQgYGJpbmZtdF9taXNjYCBmaWxlc3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAoaW4gYSB1c2VyIG5hbWVzcGFjZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgb2YgYGJpbmZtdF9taXNjYCBlbnRyaWVzIHRvIHRlc3QgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIG9mIHRoZSBidWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Njo0OS4yMDIyMDQ4MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzAwNjYzMzE2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICAgIFwiYm1fZW50cnlfd3JpdGVcIixcbiAgICBcImJtX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgbGltaXQgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCB1c2luZyBgdWNvdW50c2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgYW5kIGBiaW5mbXRfbWlzY2AgZmlsZXN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB1bnByaXZpbGVnZWQgdXNlcnMgKGluIGEgdXNlciBuYW1lc3BhY2UpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZW1vdmFsIG9mIGBiaW5mbXRfbWlzY2AgZW50cmllcyB0byB0ZXN0IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiB0aGUgYnVkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Njo0OS4yMDIyMTExMTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODUyNzU5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYmU4NTNlM2M5M2M4YzE5ZGUyYWUyMzc1ZmE3NjdlYjViZDM1NjY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTQ6NDY6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbmluZGV4IDYyMmI1ZDhjODk5NTcuLmQyNmI2M2EyN2MyNTkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbkBAIC0xMjgsNiArMTI4LDExIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcXG4gICAgbmFtZWQgYnkgYW4gYWJzb2x1dGUgcGF0aC4gSXQgaXMgb3BlbmVkIHdoZW4gdGhlIGJpbmFyeSBpcyBleGVjdXRlZCwgc29cXG4gICAgYSByZWxhdGl2ZSBvbmUgd291bGQgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2ZcXG4gICAgd2hvZXZlciBydW5zIHRoZSBiaW5hcnlcXG4rIC0gdGhlIGFtb3VudCBvZiBwcmUtb3BlbmVkIGludGVycHJldGVycyBieSBgYEZgYCwgb3IgYm91bmQgdG8gYSBgYEJgYCBlbnRyeVxcbisgICBpcyBsaW1pdGVkIGJ5IHRoZSBgYC9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgYCBzeXNjdGwuIEFcXG4rICAgcmVnaXN0cmF0aW9uIHBhc3QgdGhlIGxpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC4gVGhpcyBsaW1pdHMgYW5cXG4rICAgdW5wcml2aWxlZ2VkIG5hbWVzcGFjZSBwaW5uaW5nIGZpbGVzLiBBIG5lc3RlZCBuYW1lc3BhY2UgY2FuIHJhaXNlIG9ubHkgaXRzXFxuKyAgIG93biBsaW1pdCBhbmQgZXZlcnkgYW5jZXN0b3IgaXMgY2hhcmdlZCB0b29cXG4gXFxuIFxcbiBUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aFxcbkBAIC0yMTUsMTAgKzIyMCw5IEBAIHdpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXFxuIHByZS1vcGVucyBhIHN0YXRpYyBlbnRyeSdzIGludGVycHJldGVyOyB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS4gVGhlXFxuIHBhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZSwgc28gdGhlcmUgaXMgbm90aGluZyBpdCBjYW5ub3RcXG4gZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XFxuLWJpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVyczsgYSB3cml0ZSBwYXN0IHRoYXQgaXMgcmVmdXNlZCB3aXRoXFxuLWBgLUVOT1NQQ2BgLiBUbyBiaW5kIGEgZmlsZSB0aGF0IGhhcyBubyBwYXRoIG9mIGl0cyBvd24gLSBhbHJlYWR5XFxuLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxcbi1vcGVuIGl0IGFuZCB3cml0ZSBgYC9wcm9jL3NlbGYvZmQvTmBgLlxcbitiaW5kcyBhdCBtb3N0IDEwMCBpbnRlcnByZXRlcnMsIGFuZCBlYWNoIG9uZSBpcyBjaGFyZ2VkIGFnYWluc3RcXG4rYGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYGAgbGlrZSBhbnkgb3RoZXIgYmluZGluZy4gQSB3cml0ZSBwYXN0IGVpdGhlclxcbitsaW1pdCBpcyByZWZ1c2VkIHdpdGggYGAtRU5PU1BDYGAuXFxuIFxcbiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcXG4gYGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWBgIGtmdW5jLCBhbmQgZXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgdGhlXFxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXFxuaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDRcXG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXFxuKysrIGIvZnMvYmluZm10X21pc2MuY1xcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRlcnAsIHRtcCwgXFx1MDAyNmUtXFx1MDAzZWludGVycHMsIGxpc3QpIHtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmludGVycC1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdGNsb3NlX2ludGVycF9maWxlKGludGVycC1cXHUwMDNlZmlsZSk7XFxuK1xcdFxcdGRlY191Y291bnQoaW50ZXJwLVxcdTAwM2V1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcXG4gXFx0XFx0a2ZyZWUoaW50ZXJwKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTMwNyw3ICszMDgsOCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4gICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlXFxuICAqIGNhbm5vdCBiZSBtYXRjaGVkIHlldCwgYW5kIG93bnMgQGYgdW50aWwgdGhpcyBzdWNjZWVkcy5cXG4gICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGUgZW50cnkgaXMgZnVsbCBvciB0aGUgYmluZGVyIGlzIG91dCBvZlxcbisgKiAgICAgICAgIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYnVkZ2V0LCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcXG4gICovXFxuIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4gXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXFxuQEAgLTMxNSwyMiArMzE3LDMyIEBAIHN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4ge1xcbiBcXHRzaXplX3QgbmxlbiA9IHN0cmxlbihuYW1lKSwgcGxlbiA9IHN0cmxlbihwYXRoKTtcXG4gXFx0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xcbitcXHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcXG4gXFxuIFxcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcywgbmFtZSkpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRpZiAobGlzdF9jb3VudF9ub2RlcyhcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcykgXFx1MDAzZT0gQklORk1UX01JU0NfSU5URVJQX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbitcXHQvKiBUaGUgYmluZGluZyBrZWVwcyBhIGZpbGUgb3Blbiwgc28gY2hhcmdlIGl0IHRvIHdob2V2ZXIgYmluZHMgaXQuICovXFxuK1xcdHVjb3VudHMgPSBpbmNfdWNvdW50KGN1cnJlbnRfdXNlcl9ucygpLCBjdXJyZW50X2V1aWQoKSxcXG4rXFx0XFx0XFx0ICAgICBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcXG4rXFx0aWYgKCF1Y291bnRzKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFxuIFxcdC8qIE9uZSBhbGxvY2F0aW9uLCBib3RoIHN0cmluZ3MgaW4gaXQsIGxpa2UgdGhlIGVudHJ5J3Mgb3duIGJ1ZmZlci4gKi9cXG4gXFx0aW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gKyBwbGVuICsgMiksXFxuIFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi1cXHRpZiAoIWludGVycClcXG4rXFx0aWYgKCFpbnRlcnApIHtcXG4rXFx0XFx0ZGVjX3Vjb3VudCh1Y291bnRzLCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdGludGVycC1cXHUwMDNlcGF0aCA9IGludGVycC1cXHUwMDNlbmFtZSArIG5sZW4gKyAxO1xcbiBcXHRzdHJzY3B5KGludGVycC1cXHUwMDNlbmFtZSwgbmFtZSwgbmxlbiArIDEpO1xcbiBcXHRzdHJzY3B5KGludGVycC1cXHUwMDNlbmFtZSArIG5sZW4gKyAxLCBwYXRoLCBwbGVuICsgMSk7XFxuIFxcdGludGVycC1cXHUwMDNlZmlsZSA9IGY7XFxuK1xcdGludGVycC1cXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XFxuIFxcdC8qIFB1Ymxpc2ggdGhlIG5vZGU6IGEgbG9ja2xlc3MgY2F0IG1heSBiZSB3YWxraW5nIHRoZSBsaXN0LiAqL1xcbiBcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2aW50ZXJwLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcyk7XFxuIFxcdHByX2RlYnVnKFxcXCJyZWdpc3RlcjogaW50ZXJwcmV0ZXI6ICVzIHslc31cXFxcblxcXCIsIG5hbWUsIHBhdGgpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5pbmRleCAwNzJlNGIzZGQ3OGQyLi44MDQ1YjEwZGQzZTVjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbkBAIC03LDYgKzcsNyBAQFxcbiBzdHJ1Y3QgYnBmX3Byb2c7XFxuIHN0cnVjdCBmaWxlO1xcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xcbitzdHJ1Y3QgdWNvdW50cztcXG4gc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbiBcXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcXG5AQCAtMjEsNiArMjIsNyBAQCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XFxuICAqIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgLSBhbiBpbnRlcnByZXRlciBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXFxuICAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSdzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxcbiAgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXFxuKyAqIEB1Y291bnRzOiB0aGUgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyBjaGFyZ2UgdGhlIGJpbmRpbmcgdG9va1xcbiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyXFxuICAqICAgICAgICBydW5zIHVuZGVyOyBzdG9yZWQgYWZ0ZXIgQG5hbWUgaW4gdGhlIHNhbWUgYWxsb2NhdGlvblxcbiAgKiBAbmFtZTogdGhlIG5hbWUgdGhlIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkXFxuQEAgLTMzLDYgKzM1LDcgQEAgc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIFxcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGU7XFxuK1xcdHN0cnVjdCB1Y291bnRzXFx0XFx0KnVjb3VudHM7XFxuIFxcdGNvbnN0IGNoYXJcXHRcXHQqcGF0aDtcXG4gXFx0Y2hhclxcdFxcdFxcdG5hbWVbXTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXFxuaW5kZXggOWMzYmUxNTczOTdlMC4uZTM4ZDllNjA1NjlmMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXG5AQCAtNTcsNiArNTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHtcXG4gI2lmZGVmIENPTkZJR19GQU5PVElGWVxcbiBcXHRVQ09VTlRfRkFOT1RJRllfR1JPVVBTLFxcbiBcXHRVQ09VTlRfRkFOT1RJRllfTUFSS1MsXFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpXFxuK1xcdFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsXFxuICNlbmRpZlxcbiBcXHRVQ09VTlRfQ09VTlRTLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvdWNvdW50LmMgYi9rZXJuZWwvdWNvdW50LmNcXG5pbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC91Y291bnQuY1xcbisrKyBiL2tlcm5lbC91Y291bnQuY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbkBAIC04OSw2ICs5MCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVzZXJfdGFibGVbXSA9IHtcXG4gXFx0VUNPVU5UX0VOVFJZKFxcXCJtYXhfZmFub3RpZnlfZ3JvdXBzXFxcIiksXFxuIFxcdFVDT1VOVF9FTlRSWShcXFwibWF4X2Zhbm90aWZ5X21hcmtzXFxcIiksXFxuICNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpXFxuK1xcdFVDT1VOVF9FTlRSWShcXFwibWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1xcXCIpLFxcbisjZW5kaWZcXG4gfTtcXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cXG4gXFxuQEAgLTIzMyw2ICsyMzcsNyBAQCBzdHJ1Y3QgdWNvdW50cyAqaW5jX3Vjb3VudChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBrdWlkX3QgdWlkLFxcbiBcXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhpbmNfdWNvdW50LCBcXFwiYmluZm10X21pc2NcXFwiKTtcXG4gXFxuIHZvaWQgZGVjX3Vjb3VudChzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSB1Y291bnRfdHlwZSB0eXBlKVxcbiB7XFxuQEAgLTI0Myw2ICsyNDgsNyBAQCB2b2lkIGRlY191Y291bnQoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gdWNvdW50X3R5cGUgdHlwZSlcXG4gXFx0fVxcbiBcXHRwdXRfdWNvdW50cyh1Y291bnRzKTtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGRlY191Y291bnQsIFxcXCJiaW5mbXRfbWlzY1xcXCIpO1xcbiBcXG4gbG9uZyBpbmNfcmxpbWl0X3Vjb3VudHMoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gcmxpbWl0X3R5cGUgdHlwZSwgbG9uZyB2KVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZVxcbmluZGV4IGZiYmIxNjAwZGRiOTQuLmU0MmVjZDRjOTA4ZDEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXFxuQEAgLTIwLDYgKzIwLDcgQEAgeHh4eHh4eHgqXFxuIHBpcGVcXG4gU19JKi50ZXN0XFxuIGJpbmZtdF9taXNjX2JwZlxcbitiaW5mbXRfbWlzY19pbnRlcnBsaW1pdFxcbiBiaW5mbXRfYnBmX2ludGVycFxcbiBiaW5mbXRfYnBmX2FwcFxcbiBiaW5mbXRfbWlzY190cmFuc3BhcmVudFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbmluZGV4IDQxMGM5MzYwNmEwYzMuLmI2NDBhZjhmMDJiNTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcXG5AQCAtMjUsNiArMjUsMTAgQEAgVEVTVF9HRU5fUFJPR1MgKz0gY2hlY2stZXhlY1xcbiAjIG9yIGFuICdGJyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19zZWxmcGluXFxuIFxcbisjIFRoZSBpbnRlcnByZXRlcnMgYW4gJ0YnIG9yICdCJyBlbnRyeSBwcmUtb3BlbnMgYXJlIGNoYXJnZWQgYWdhaW5zdFxcbisjIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxcbitURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19pbnRlcnBsaW1pdFxcbitcXG4gIyAnRCcgKHJlZ2lzdGVyIGRpc2FibGVkKSBiaW5mbXRfbWlzYyB0ZXN0OiBhbiBlbnRyeSB0aGF0IGV4aXN0cyBidXQgZG9lc1xcbiAjIG5vdCBkaXNwYXRjaCB1bnRpbCBpdCBpcyBlbmFibGVkLiBTdGF0aWMgbWFnaWMgZW50cnksIG5vIGJwZiB0b29sY2hhaW4uXFxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2Rpc2FibGVkXFxuQEAgLTEwNCw2ICsxMDgsOCBAQCAkKE9VVFBVVCkvc2NyaXB0LW5vZXhlYy5pbmM6ICQoQ0hFQ0tfRVhFQ19TQU1QTEVTKS9zY3JpcHQtbm9leGVjLmluY1xcbiAjIENGTEFHUyBmb3IgZXZlcnkgcHJvZ3JhbSBpbiB0aGlzIGRpcmVjdG9yeS5cXG4gJChPVVRQVVQpL2JpbmZtdF9taXNjX3NlbGZwaW46IENGTEFHUyArPSAkKFRPT0xTX0lOQ0xVREVTKVxcbiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogLi4vZmlsZXN5c3RlbXMvdXRpbHMuY1xcbiskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IENGTEFHUyArPSAkKFRPT0xTX0lOQ0xVREVTKVxcbiskKE9VVFBVVCkvYmluZm10X21pc2NfaW50ZXJwbGltaXQ6IC4uL2ZpbGVzeXN0ZW1zL3V0aWxzLmNcXG4gXFxuICMgLS0tIGJpbmZtdF9taXNjIGJwZiAoJ0InKSBoYW5kbGVyIHRlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICMgVGhlIHN0cnVjdF9vcHMgYnBmIG9iamVjdHMgYXJlIGNvbXBpbGVkIGFnYWluc3QgdGhlIHJ1bm5pbmcga2VybmVsJ3MgQlRGLlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xcbmluZGV4IDJjN2I2MzA3NWYxZDkuLmIyYTQ1MTg5MDFiMGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcXG5AQCAtMzgsNiArMzgsNyBAQFxcbiAjZGVmaW5lIF9HTlVfU09VUkNFXFxuICNpbmNsdWRlIFxcdTAwM2NlbGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbkBAIC02NSw2ICs2Niw5IEBAXFxuICNkZWZpbmUgQklORF9SSVNDVl9QQVRIXFx0XFxcIi90bXAvYmluZm10X2JpbmRfcmlzY3ZcXFwiXFxuICNkZWZpbmUgQklORF9FWFBFQ1RcXHRcXFwiQklORF9SQU4gXFxcIlxcbiAjZGVmaW5lIEJJTkRfTUFYXFx0MTAwXFxuKyNkZWZpbmUgSU5URVJQX0xJTUlUXFx0XFxcIi9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNcXFwiXFxuKy8qIEV4aXQgc3RhdHVzIG9mIHRoZSBiaW5kaW5nIGNoaWxkIHdoZW4gaXQgY2Fubm90IHNldCB1cCBhIGJ1ZGdldCBvZiBpdHMgb3duLiAqL1xcbisjZGVmaW5lIEJJTkRfTk9fQlVER0VUXFx0MjAwXFxuIFxcbiAvKiBBIG1pbmltYWwgNjQtYml0IGxpdHRsZS1lbmRpYW4gRUxGIGhlYWRlciwgcGFkZGVkIHRvIHRoZSByZWFkIHNpemUuICovXFxuIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpXFxuQEAgLTM3OCw2ICszODIsNTcgQEAgc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxcbiBcXHRyZXR1cm4gZW50cnlfY29tbWFuZChlbnRyeSwgY21kKTtcXG4gfVxcbiBcXG4rLyogU2V0IHRoZSBpbnRlcnByZXRlciBidWRnZXQgb2YgdGhpcyBuYW1lc3BhY2UuICovXFxuK3N0YXRpYyBpbnQgd3JpdGVfaW50ZXJwX2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcXG4re1xcbitcXHRzc2l6ZV90IG47XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihJTlRFUlBfTElNSVQsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRuID0gd3JpdGUoZmQsIHZhbCwgc3RybGVuKHZhbCkpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiBuIFxcdTAwM2MgMCA/IC0xIDogMDtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIGVycm5vIGEgYmluZCBpcyByZWZ1c2VkIHdpdGggd2hlbiB0aGUgd3JpdGVyIGlzIGEgY2hpbGQgdGhhdCBoYXMgc3BlbnRcXG4rICogdGhlIGJ1ZGdldCBvZiBhIHVzZXIgbmFtZXNwYWNlIG9mIGl0cyBvd24sIDAgaWYgaXQgc3VjY2VlZGVkIGFuZCAtMSBpZiB0aGVcXG4rICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGVcXG4rICogaW50ZXJwcmV0ZXIgaXMgc3RpbGwgb3BlbmVkIHdpdGggdGhpcyBwcm9jZXNzJ3MgY3JlZGVudGlhbHMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGJpbmRfb3V0X29mX2J1ZGdldChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRjaGFyIGNtZFtQQVRIX01BWF0sIGZpbGVbUEFUSF9NQVhdO1xcbitcXHRpbnQgZmQsIHN0YXR1cywgcmV0dmFsO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksIEJJTkZNVF9ESVIgXFxcIi8lc1xcXCIsIGVudHJ5KTtcXG4rXFx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXFxcIislcyAlc1xcXFxuXFxcIiwgbmFtZSwgcGF0aCk7XFxuK1xcbitcXHRmZCA9IG9wZW4oZmlsZSwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRcXHQvKiBBIG5hbWVzcGFjZSBvZiBpdHMgb3duLCB3aXRoIG5vdGhpbmcgbGVmdCBpbiBpdCB0byBzcGVuZC4gKi9cXG4rXFx0XFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikgfHwgd3JpdGVfaW50ZXJwX2xpbWl0KFxcXCIwXFxcIikpXFxuK1xcdFxcdFxcdF9leGl0KEJJTkRfTk9fQlVER0VUKTtcXG4rXFx0XFx0biA9IHdyaXRlKGZkLCBjbWQsIHN0cmxlbihjbWQpKTtcXG4rXFx0XFx0X2V4aXQobiBcXHUwMDNjIDAgPyBlcnJubyA6IDApO1xcbitcXHR9XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dmFsID0gV0VYSVRTVEFUVVMoc3RhdHVzKTtcXG4rXFx0cmV0dXJuIHJldHZhbCA9PSBCSU5EX05PX0JVREdFVCA/IC0xIDogcmV0dmFsO1xcbit9XFxuK1xcbiBGSVhUVVJFKGJvdW5kX2ludGVycCkge1xcbiBcXHRjaGFyIG9ialtQQVRIX01BWF07XFxuIFxcdHN0cnVjdCBicGZfY2FzZSBjO1xcbkBAIC01NjUsNCArNjIwLDE5IEBAIFRFU1RfRihib3VuZF9pbnRlcnAsIGNhcHBlZF9iaW5kaW5ncylcXG4gXFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLCBcXFwib3ZlclxcXCIsIEJJTkRfRklSU1QpLCAtRU5PU1BDKTtcXG4gfVxcbiBcXG4rLyogQSBiaW5kaW5nIHBpbnMgYSBmaWxlOiBpdCBpcyBjaGFyZ2VkLCBhbmQgcmVmdXNlZCBvbmNlIHRoZSBidWRnZXQgaXMgb3V0LiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBiaW5kaW5nc19hcmVfY2hhcmdlZClcXG4re1xcbitcXHRpbnQgZXJyID0gYmluZF9vdXRfb2ZfYnVkZ2V0KFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcInRoaXJkXFxcIiwgQklORF9GSVJTVCk7XFxuK1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyB1c2VyIG5hbWVzcGFjZXMgb3Igbm8gXFxcIiBJTlRFUlBfTElNSVQpO1xcbitcXG4rXFx0LyogVGhlIGNoYXJnZSBmb2xsb3dzIHRoZSB3cml0ZXIsIG5vdCB0aGUgZW50cnkgZmlsZSBpdCB3cml0ZXMgdG8uICovXFxuK1xcdEVYUEVDVF9FUShlcnIsIEVOT1NQQyk7XFxuK1xcbitcXHQvKiBUaGUgYnVkZ2V0IHdhcyB0aGUgb25seSB0aGluZyBpbiB0aGUgd2F5LiAqL1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsIFxcXCJ0aGlyZFxcXCIsIEJJTkRfRklSU1QpLCAwKTtcXG4rfVxcbitcXG4gVEVTVF9IQVJORVNTX01BSU5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iZjYxMWM1NTE3ODQyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuY1xcbkBAIC0wLDAgKzEsMjMyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIEEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciAtIHdoYXQgJ0YnIGdpdmVzIGEgc3RhdGljIGVudHJ5IGFuZCB3aGF0IGEgJ0InXFxuKyAqIGVudHJ5IGJpbmRzIC0ga2VlcHMgYSBmaWxlIG9wZW4gZm9yIGFzIGxvbmcgYXMgdGhlIGVudHJ5IGxpdmVzLCBzbyBpdCBwaW5zXFxuKyAqIHRoZSBtb3VudCBpdCBjYW1lIGZyb20uIEl0IGNvc3RzIG5vIGZpbGUgZGVzY3JpcHRvciwgYW5kIGJpbmZtdF9taXNjIGlzXFxuKyAqIEZTX1VTRVJOU19NT1VOVCwgc28gYW4gdW5wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlIGNhbiBjcmVhdGUgdGhlbSB3aXRob3V0XFxuKyAqIGJvdW5kLiBDaGVjayB0aGF0IFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYm91bmRzIGl0LCB0aGF0IGFuIGVudHJ5XFxuKyAqIHRoYXQgcHJlLW9wZW5zIG5vdGhpbmcgaXMgbm90IGNoYXJnZWQsIHRoYXQgcmVtb3ZpbmcgYW4gZW50cnkgZ2l2ZXMgdGhlXFxuKyAqIGNoYXJnZSBiYWNrLCBhbmQgdGhhdCBuZXN0aW5nIGEgdXNlciBuYW1lc3BhY2UgZG9lcyBub3QgZXZhZGUgaXQuXFxuKyAqXFxuKyAqIFJ1bnMgdW5wcml2aWxlZ2VkIGluIGEgdXNlciBuYW1lc3BhY2UuXFxuKyAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21vdW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vZmlsZXN5c3RlbXMvdXRpbHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjZGVmaW5lIE1OVFxcdFxcdFxcXCIvdG1wL2JpbmZtdF9pbnRlcnBsaW1pdFxcXCJcXG4rI2RlZmluZSBORVNURURfTU5UXFx0XFxcIi90bXAvYmluZm10X2ludGVycGxpbWl0X25lc3RlZFxcXCJcXG4rI2RlZmluZSBMSU1JVF9TWVNDVExcXHRcXFwiL3Byb2Mvc3lzL3VzZXIvbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc1xcXCJcXG4rXFxuKyNkZWZpbmUgTUFHSUNcXHRcXHRcXFwiXFxcXFxcXFx4ZGVcXFxcXFxcXHhhZFxcXCJcXG4rLyogTm90IG9uIHRoZSBpbnN0YW5jZSwgYW5kIHVubGlrZSAvYmluL3RydWUgaXQgYWx3YXlzIGV4aXN0cy4gKi9cXG4rI2RlZmluZSBJTlRFUlBcXHRcXHRcXFwiL3Byb2Mvc2VsZi9leGVcXFwiXFxuK1xcbisvKiBTbWFsbCBlbm91Z2ggdG8gZmlsbCBieSBoYW5kLCBiaWcgZW5vdWdoIHRoYXQgYSByZWZ1bmQgaXMgdmlzaWJsZS4gKi9cXG4rI2RlZmluZSBMSU1JVFxcdFxcdDRcXG4rXFxuKy8qIFdoYXQgVUNPVU5UX0VOVFJZKCkgbGV0cyBhIG5hbWVzcGFjZSByYWlzZSBpdHMgb3duIGxpbWl0IHRvLiAqL1xcbisjZGVmaW5lIExJTUlUX01BWFxcdFxcXCIyMTQ3NDgzNjQ3XFxcIlxcbitcXG4rc3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpXFxuK3tcXG4rXFx0aWYgKG1rZGlyKHBhdGgsIDA3NTUpIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVFWElTVClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogV3JpdGUgQHZhbCB0byBAcGF0aCwgcHJlc2VydmluZyB3cml0ZSgyKSdzIGVycm5vIGZvciB0aGUgY2FsbGVyLiAqL1xcbitzdGF0aWMgaW50IHdyaXRlX2tlZXBfZXJybm8oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsKVxcbit7XFxuK1xcdGludCBmZCwgc2F2ZWQ7XFxuK1xcdHNzaXplX3QgbjtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0biA9IHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKTtcXG4rXFx0c2F2ZWQgPSBlcnJubztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRlcnJubyA9IHNhdmVkO1xcbitcXHRyZXR1cm4gbiBcXHUwMDNjIDAgPyAtMSA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2V0X2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcXG4re1xcbitcXHRyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhMSU1JVF9TWVNDVEwsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfYXQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpydWxlKVxcbit7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIlcy9yZWdpc3RlclxcXCIsIG1udCk7XFxuK1xcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpO1xcbit9XFxuK1xcbisvKiBBbiAnRicgZW50cnk6IG9uZSBpbnRlcnByZXRlciBwcmUtb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbiwgb25lIGNoYXJnZS4gKi9cXG4rc3RhdGljIGludCByZWdpc3Rlcl9maXhlZChjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2hhciBydWxlW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXFxcIjolczpNOjpcXFwiIE1BR0lDIFxcXCI6OlxcXCIgSU5URVJQIFxcXCI6RlxcXCIsIG5hbWUpO1xcbitcXHRyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTtcXG4rfVxcbitcXG4rLyogVGhlIHNhbWUgZW50cnkgd2l0aG91dCAnRic6IHRoZSBpbnRlcnByZXRlciBpcyBvcGVuZWQgcGVyIGV4ZWMgaW5zdGVhZC4gKi9cXG4rc3RhdGljIGludCByZWdpc3Rlcl9wbGFpbihjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2hhciBydWxlW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXFxcIjolczpNOjpcXFwiIE1BR0lDIFxcXCI6OlxcXCIgSU5URVJQIFxcXCI6XFxcIiwgbmFtZSk7XFxuK1xcdHJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJlbW92ZV9lbnRyeShjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzLyVzXFxcIiwgbW50LCBuYW1lKTtcXG4rXFx0cmV0dXJuIHdyaXRlX2tlZXBfZXJybm8ocGF0aCwgXFxcIi0xXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZW50cnlfZXhpc3RzKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvJXNcXFwiLCBtbnQsIG5hbWUpO1xcbitcXHRyZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spID09IDA7XFxuK31cXG4rXFxuKy8qIFJlZ2lzdGVyIEBuICdGJyBlbnRyaWVzLCBlYWNoIHdpdGggYSBuYW1lIG9mIGl0cyBvd24uICovXFxuK3N0YXRpYyBpbnQgZmlsbF9idWRnZXQoY29uc3QgY2hhciAqbW50LCB1bnNpZ25lZCBpbnQgbilcXG4re1xcbitcXHRjaGFyIG5hbWVbMzJdO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG4rXFx0XFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwiZml4ZWQldVxcXCIsIGkpO1xcbitcXHRcXHRpZiAocmVnaXN0ZXJfZml4ZWQobW50LCBuYW1lKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitGSVhUVVJFKGludGVycF9saW1pdCkge1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChpbnRlcnBfbGltaXQpXFxuK3tcXG4rXFx0Lyogc2V0dXBfdXNlcm5zKCkgZXhpdHMgcmF0aGVyIHRoYW4gcmV0dXJucyBpZiB0aGlzIGlzIG5vdCB0aGVyZS4gKi9cXG4rXFx0aWYgKGFjY2VzcyhcXFwiL3Byb2Mvc2VsZi9ucy91c2VyXFxcIiwgRl9PSykpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwia2VybmVsIHdpdGhvdXQgdXNlciBuYW1lc3BhY2VzXFxcIik7XFxuK1xcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XFxuK1xcbitcXHQvKiBDQVBfU1lTX1JFU09VUkNFIGluIHRoaXMgbmFtZXNwYWNlIGlzIHdoYXQgbWFrZXMgaXQgd3JpdGFibGUuICovXFxuK1xcdGlmIChzZXRfbGltaXQoTElNSVRfTUFYKSkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCB3aXRob3V0IFxcXCIgTElNSVRfU1lTQ1RMKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJjYW5ub3Qgc2V0IHRoZSBsaW1pdDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEoZW5zdXJlX2RpcihNTlQpLCAwKTtcXG4rXFx0aWYgKG1vdW50KFxcXCJiaW5mbXRfbWlzY1xcXCIsIE1OVCwgXFxcImJpbmZtdF9taXNjXFxcIiwgMCwgTlVMTCkpIHtcXG4rXFx0XFx0aW50IHNhdmVkID0gZXJybm87XFxuK1xcbitcXHRcXHQvKiBUZWFyZG93biBkb2Vzbid0IHJ1biB3aGVuIHNldHVwIHNraXBzLCBzbyBjbGVhbiB1cCBoZXJlLiAqL1xcbitcXHRcXHRybWRpcihNTlQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIGJpbmZtdF9taXNjOiAlc1xcXCIsIHN0cmVycm9yKHNhdmVkKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihpbnRlcnBfbGltaXQpXFxuK3tcXG4rXFx0LyogVGhlIG5hbWVzcGFjZXMgZ28gd2l0aCB0aGUgcHJvY2VzczsganVzdCBkb24ndCBsaXR0ZXIgL3RtcC4gKi9cXG4rXFx0dW1vdW50MihORVNURURfTU5ULCBNTlRfREVUQUNIKTtcXG4rXFx0dW1vdW50MihNTlQsIE1OVF9ERVRBQ0gpO1xcbitcXHRybWRpcihORVNURURfTU5UKTtcXG4rXFx0cm1kaXIoTU5UKTtcXG4rfVxcbitcXG4rLyogRXZlcnkgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBpcyBjaGFyZ2VkLCBhbmQgdGhlIGJ1ZGdldCBpcyBhIGhhcmQgc3RvcC4gKi9cXG4rVEVTVF9GKGludGVycF9saW1pdCwgZml4ZWRfaW50ZXJwcmV0ZXJzX2FyZV9jaGFyZ2VkKVxcbit7XFxuK1xcdGNoYXIgYnVmWzMyXTtcXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldVxcXCIsIExJTUlUKTtcXG4rXFx0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmaWxsX2J1ZGdldChNTlQsIExJTUlUKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCBcXFwib3ZlclxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xcbitcXG4rXFx0LyogQSByZWZ1c2VkIHJlZ2lzdHJhdGlvbiBsZWF2ZXMgbm90aGluZyBiZWhpbmQuICovXFxuK1xcdEVYUEVDVF9GQUxTRShlbnRyeV9leGlzdHMoTU5ULCBcXFwib3ZlclxcXCIpKTtcXG4rfVxcbitcXG4rLyogQW4gZW50cnkgdGhhdCBwcmUtb3BlbnMgbm90aGluZyBwaW5zIG5vdGhpbmcsIHNvIGl0IGlzIG5vdCBjaGFyZ2VkLiAqL1xcbitURVNUX0YoaW50ZXJwX2xpbWl0LCBwbGFpbl9lbnRyaWVzX2FyZV9ub3RfY2hhcmdlZClcXG4re1xcbitcXHRBU1NFUlRfRVEoc2V0X2xpbWl0KFxcXCIwXFxcIiksIDApO1xcbitcXG4rXFx0RVhQRUNUX0VRKHJlZ2lzdGVyX3BsYWluKE1OVCwgXFxcInBsYWluXFxcIiksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlbnRyeV9leGlzdHMoTU5ULCBcXFwicGxhaW5cXFwiKSk7XFxuK1xcbitcXHQvKiAuLi4gd2hpbGUgdGhlIHNhbWUgZW50cnkgd2l0aCAnRicgaGFzIG5vdGhpbmcgdG8gc3BlbmQuICovXFxuK1xcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFxcXCJmaXhlZFxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xcbit9XFxuK1xcbisvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqL1xcbitURVNUX0YoaW50ZXJwX2xpbWl0LCByZW1vdmFsX3JlZnVuZHNfdGhlX2NoYXJnZSlcXG4re1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJXVcXFwiLCBMSU1JVCk7XFxuK1xcdEFTU0VSVF9FUShzZXRfbGltaXQoYnVmKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoZmlsbF9idWRnZXQoTU5ULCBMSU1JVCksIDApO1xcbitcXHRBU1NFUlRfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCBcXFwib3ZlclxcXCIpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZW1vdmVfZW50cnkoTU5ULCBcXFwiZml4ZWQwXFxcIiksIDApO1xcbitcXHRFWFBFQ1RfRVEocmVnaXN0ZXJfZml4ZWQoTU5ULCBcXFwib3ZlclxcXCIpLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIGNoYXJnZSB3YWxrcyB0aGUgYW5jZXN0b3JzLCBzbyBhIG5hbWVzcGFjZSBjYW5ub3QgYnV5IGl0c2VsZiBidWRnZXQgYnlcXG4rICogbmVzdGluZzogaXQgbWF5IHJhaXNlIG9ubHkgaXRzIG93biBsaW1pdCwgYW5kIHRoZSBwYXJlbnQgaXQgd2FzIGNyZWF0ZWRcXG4rICogZnJvbSBpcyBjaGFyZ2VkIGZvciBldmVyeSBiaW5kaW5nIG1hZGUgYmVsb3cgaXQuXFxuKyAqL1xcbitURVNUX0YoaW50ZXJwX2xpbWl0LCBuZXN0aW5nX2RvZXNfbm90X2V2YWRlX2l0KVxcbit7XFxuK1xcdGNoYXIgYnVmWzMyXTtcXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldVxcXCIsIExJTUlUKTtcXG4rXFx0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShzZXRfbGltaXQoTElNSVRfTUFYKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoZW5zdXJlX2RpcihORVNURURfTU5UKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShtb3VudChcXFwiYmluZm10X21pc2NcXFwiLCBORVNURURfTU5ULCBcXFwiYmluZm10X21pc2NcXFwiLCAwLCBOVUxMKSwgMCk7XFxuK1xcbitcXHQvKiBBIGZyZXNoIGluc3RhbmNlIHdpdGggYW4gdW5saW1pdGVkIGJ1ZGdldCBvZiBpdHMgb3duLCBhbmQgeWV0OiAqL1xcbitcXHRFWFBFQ1RfTkUocmVnaXN0ZXJfZml4ZWQoTkVTVEVEX01OVCwgXFxcIm5lc3RlZFxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xcbitcXG4rXFx0LyogVGhlIG5lc3RlZCBpbnN0YW5jZSB3b3JrcyBmb3IgYW55dGhpbmcgdGhhdCBwaW5zIG5vIGZpbGUuICovXFxuK1xcdEVYUEVDVF9FUShyZWdpc3Rlcl9wbGFpbihORVNURURfTU5ULCBcXFwibmVzdGVkX3BsYWluXFxcIiksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Njo1MC40ODgzNjY1MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjg3ODAxNTkwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICAgIFwiYm1fZW50cnlfd3JpdGVcIixcbiAgICBcImJtX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgbGltaXQgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCB1c2luZyBgdWNvdW50c2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgYW5kIGBiaW5mbXRfbWlzY2AgZmlsZXN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB1bnByaXZpbGVnZWQgdXNlcnMgKGluIGEgdXNlciBuYW1lc3BhY2UpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZW1vdmFsIG9mIGBiaW5mbXRfbWlzY2AgZW50cmllcyB0byB0ZXN0IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiB0aGUgYnVkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYmU4NTNlM2M5M2M4YzE5ZGUyYWUyMzc1ZmE3NjdlYjViZDM1NjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNDo0Njo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbmluZGV4IDYyMmI1ZDhjODk5NTcuLmQyNmI2M2EyN2MyNTkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbkBAIC0xMjgsNiArMTI4LDExIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcbiAgICBuYW1lZCBieSBhbiBhYnNvbHV0ZSBwYXRoLiBJdCBpcyBvcGVuZWQgd2hlbiB0aGUgYmluYXJ5IGlzIGV4ZWN1dGVkLCBzb1xuICAgIGEgcmVsYXRpdmUgb25lIHdvdWxkIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mXG4gICAgd2hvZXZlciBydW5zIHRoZSBiaW5hcnlcbisgLSB0aGUgYW1vdW50IG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGJ5IGBgRmBgLCBvciBib3VuZCB0byBhIGBgQmBgIGVudHJ5XG4rICAgaXMgbGltaXRlZCBieSB0aGUgYGAvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYGAgc3lzY3RsLiBBXG4rICAgcmVnaXN0cmF0aW9uIHBhc3QgdGhlIGxpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC4gVGhpcyBsaW1pdHMgYW5cbisgICB1bnByaXZpbGVnZWQgbmFtZXNwYWNlIHBpbm5pbmcgZmlsZXMuIEEgbmVzdGVkIG5hbWVzcGFjZSBjYW4gcmFpc2Ugb25seSBpdHNcbisgICBvd24gbGltaXQgYW5kIGV2ZXJ5IGFuY2VzdG9yIGlzIGNoYXJnZWQgdG9vXG4gXG4gXG4gVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGhcbkBAIC0yMTUsMTAgKzIyMCw5IEBAIHdpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXG4gcHJlLW9wZW5zIGEgc3RhdGljIGVudHJ5J3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbiBwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaXQgY2Fubm90XG4gZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XG4tYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbi1gYC1FTk9TUENgYC4gVG8gYmluZCBhIGZpbGUgdGhhdCBoYXMgbm8gcGF0aCBvZiBpdHMgb3duIC0gYWxyZWFkeVxuLXVubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxuLW9wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4rYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzLCBhbmQgZWFjaCBvbmUgaXMgY2hhcmdlZCBhZ2FpbnN0XG4rYGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYGAgbGlrZSBhbnkgb3RoZXIgYmluZGluZy4gQSB3cml0ZSBwYXN0IGVpdGhlclxuK2xpbWl0IGlzIHJlZnVzZWQgd2l0aCBgYC1FTk9TUENgYC5cbiBcbiBUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcbiBgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpYGAga2Z1bmMsIGFuZCBldmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiB0aGVcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggYWQ4YzRmNjRiZjEwMi4uYTNhYTQyZmQ1NzYxNCAxMDA2NDRcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcbisrKyBiL2ZzL2JpbmZtdF9taXNjLmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW50ZXJwLCB0bXAsIFx1MDAyNmUtXHUwMDNlaW50ZXJwcywgbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCk7XG4gXHRcdGNsb3NlX2ludGVycF9maWxlKGludGVycC1cdTAwM2VmaWxlKTtcbitcdFx0ZGVjX3Vjb3VudChpbnRlcnAtXHUwMDNldWNvdW50cywgVUNPVU5UX0JJTkZNVF9NSVNDX0lOVEVSUFJFVEVSUyk7XG4gXHRcdGtmcmVlKGludGVycCk7XG4gXHR9XG4gfVxuQEAgLTMwNyw3ICszMDgsOCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbiAgKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHZhbGlkYXRlZCBAbmFtZSBhbmQgQHBhdGgsIGVzdGFibGlzaGVkIHRoYXQgQGVcbiAgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuXG4gICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlIGVudHJ5IGlzIGZ1bGwgb3IgdGhlIGJpbmRlciBpcyBvdXQgb2ZcbisgKiAgICAgICAgIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgYnVkZ2V0LCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbiAgKi9cbiBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4gXHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcbkBAIC0zMTUsMjIgKzMxNywzMiBAQCBzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0c2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4rXHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiBcbiBcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcdTAwMjZlLVx1MDAzZWludGVycHMsIG5hbWUpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdGlmIChsaXN0X2NvdW50X25vZGVzKFx1MDAyNmUtXHUwMDNlaW50ZXJwcykgXHUwMDNlPSBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYKVxuIFx0XHRyZXR1cm4gLUVOT1NQQztcbiBcbitcdC8qIFRoZSBiaW5kaW5nIGtlZXBzIGEgZmlsZSBvcGVuLCBzbyBjaGFyZ2UgaXQgdG8gd2hvZXZlciBiaW5kcyBpdC4gKi9cbitcdHVjb3VudHMgPSBpbmNfdWNvdW50KGN1cnJlbnRfdXNlcl9ucygpLCBjdXJyZW50X2V1aWQoKSxcbitcdFx0XHQgICAgIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMpO1xuK1x0aWYgKCF1Y291bnRzKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcbiBcdC8qIE9uZSBhbGxvY2F0aW9uLCBib3RoIHN0cmluZ3MgaW4gaXQsIGxpa2UgdGhlIGVudHJ5J3Mgb3duIGJ1ZmZlci4gKi9cbiBcdGludGVycCA9IGttYWxsb2Moc3RydWN0X3NpemUoaW50ZXJwLCBuYW1lLCBubGVuICsgcGxlbiArIDIpLFxuIFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFpbnRlcnApXG4rXHRpZiAoIWludGVycCkge1xuK1x0XHRkZWNfdWNvdW50KHVjb3VudHMsIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbiBcbiBcdGludGVycC1cdTAwM2VwYXRoID0gaW50ZXJwLVx1MDAzZW5hbWUgKyBubGVuICsgMTtcbiBcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUsIG5hbWUsIG5sZW4gKyAxKTtcbiBcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUgKyBubGVuICsgMSwgcGF0aCwgcGxlbiArIDEpO1xuIFx0aW50ZXJwLVx1MDAzZWZpbGUgPSBmO1xuK1x0aW50ZXJwLVx1MDAzZXVjb3VudHMgPSB1Y291bnRzO1xuIFx0LyogUHVibGlzaCB0aGUgbm9kZTogYSBsb2NrbGVzcyBjYXQgbWF5IGJlIHdhbGtpbmcgdGhlIGxpc3QuICovXG4gXHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCwgXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKTtcbiBcdHByX2RlYnVnKFwicmVnaXN0ZXI6IGludGVycHJldGVyOiAlcyB7JXN9XFxuXCIsIG5hbWUsIHBhdGgpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaCBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxuaW5kZXggMDcyZTRiM2RkNzhkMi4uODA0NWIxMGRkM2U1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5AQCAtNyw2ICs3LDcgQEBcbiBzdHJ1Y3QgYnBmX3Byb2c7XG4gc3RydWN0IGZpbGU7XG4gc3RydWN0IGxpbnV4X2JpbnBybTtcbitzdHJ1Y3QgdWNvdW50cztcbiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4gXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcbkBAIC0yMSw2ICsyMiw3IEBAIHN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbiAgKiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIC0gYW4gaW50ZXJwcmV0ZXIgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aFxuICAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSdzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxuICAqIEBmaWxlOiB0aGUgZmlsZSwgb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbiBhbmQgbmV2ZXIgcmVzb2x2ZWQgYWdhaW5cbisgKiBAdWNvdW50czogdGhlIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMgY2hhcmdlIHRoZSBiaW5kaW5nIHRvb2tcbiAgKiBAcGF0aDogdGhlIHBhdGggaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIHVzZWQgYXMgdGhlIG5hbWUgdGhlIGludGVycHJldGVyXG4gICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXG4gICogQG5hbWU6IHRoZSBuYW1lIHRoZSBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdCBieTsgZW1wdHkgZm9yIHRoZSBmaXhlZFxuQEAgLTMzLDYgKzM1LDcgQEAgc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xuIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiBcdHN0cnVjdCBmaWxlXHRcdCpmaWxlO1xuK1x0c3RydWN0IHVjb3VudHNcdFx0KnVjb3VudHM7XG4gXHRjb25zdCBjaGFyXHRcdCpwYXRoO1xuIFx0Y2hhclx0XHRcdG5hbWVbXTtcbiB9O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuaW5kZXggOWMzYmUxNTczOTdlMC4uZTM4ZDllNjA1NjlmMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oXG5AQCAtNTcsNiArNTcsOSBAQCBlbnVtIHVjb3VudF90eXBlIHtcbiAjaWZkZWYgQ09ORklHX0ZBTk9USUZZXG4gXHRVQ09VTlRfRkFOT1RJRllfR1JPVVBTLFxuIFx0VUNPVU5UX0ZBTk9USUZZX01BUktTLFxuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQylcbitcdFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMsXG4gI2VuZGlmXG4gXHRVQ09VTlRfQ09VTlRTLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL3Vjb3VudC5jIGIva2VybmVsL3Vjb3VudC5jXG5pbmRleCBkNmRjM2U4NTlmMTI5Li5lYzhiMTQ0NWUyODc3IDEwMDY0NFxuLS0tIGEva2VybmVsL3Vjb3VudC5jXG4rKysgYi9rZXJuZWwvdWNvdW50LmNcbkBAIC00LDYgKzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuQEAgLTg5LDYgKzkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdXNlcl90YWJsZVtdID0ge1xuIFx0VUNPVU5UX0VOVFJZKFwibWF4X2Zhbm90aWZ5X2dyb3Vwc1wiKSxcbiBcdFVDT1VOVF9FTlRSWShcIm1heF9mYW5vdGlmeV9tYXJrc1wiKSxcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0MpXG4rXHRVQ09VTlRfRU5UUlkoXCJtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzXCIpLFxuKyNlbmRpZlxuIH07XG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbkBAIC0yMzMsNiArMjM3LDcgQEAgc3RydWN0IHVjb3VudHMgKmluY191Y291bnQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywga3VpZF90IHVpZCxcbiBcdHB1dF91Y291bnRzKHVjb3VudHMpO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoaW5jX3Vjb3VudCwgXCJiaW5mbXRfbWlzY1wiKTtcbiBcbiB2b2lkIGRlY191Y291bnQoc3RydWN0IHVjb3VudHMgKnVjb3VudHMsIGVudW0gdWNvdW50X3R5cGUgdHlwZSlcbiB7XG5AQCAtMjQzLDYgKzI0OCw3IEBAIHZvaWQgZGVjX3Vjb3VudChzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSB1Y291bnRfdHlwZSB0eXBlKVxuIFx0fVxuIFx0cHV0X3Vjb3VudHModWNvdW50cyk7XG4gfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZGVjX3Vjb3VudCwgXCJiaW5mbXRfbWlzY1wiKTtcbiBcbiBsb25nIGluY19ybGltaXRfdWNvdW50cyhzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cywgZW51bSBybGltaXRfdHlwZSB0eXBlLCBsb25nIHYpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZVxuaW5kZXggZmJiYjE2MDBkZGI5NC4uZTQyZWNkNGM5MDhkMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy8uZ2l0aWdub3JlXG5AQCAtMjAsNiArMjAsNyBAQCB4eHh4eHh4eCpcbiBwaXBlXG4gU19JKi50ZXN0XG4gYmluZm10X21pc2NfYnBmXG4rYmluZm10X21pc2NfaW50ZXJwbGltaXRcbiBiaW5mbXRfYnBmX2ludGVycFxuIGJpbmZtdF9icGZfYXBwXG4gYmluZm10X21pc2NfdHJhbnNwYXJlbnRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuaW5kZXggNDEwYzkzNjA2YTBjMy4uYjY0MGFmOGYwMmI1MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbkBAIC0yNSw2ICsyNSwxMCBAQCBURVNUX0dFTl9QUk9HUyArPSBjaGVjay1leGVjXG4gIyBvciBhbiAnRicgZW50cnkgY2FuIHBpbiB0aGUgaW5zdGFuY2UgdGhhdCBvd25zIGl0LiBVbnByaXZpbGVnZWQsIG5vIGJwZi5cbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19zZWxmcGluXG4gXG4rIyBUaGUgaW50ZXJwcmV0ZXJzIGFuICdGJyBvciAnQicgZW50cnkgcHJlLW9wZW5zIGFyZSBjaGFyZ2VkIGFnYWluc3RcbisjIFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlMuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuK1RFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2ludGVycGxpbWl0XG4rXG4gIyAnRCcgKHJlZ2lzdGVyIGRpc2FibGVkKSBiaW5mbXRfbWlzYyB0ZXN0OiBhbiBlbnRyeSB0aGF0IGV4aXN0cyBidXQgZG9lc1xuICMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi5cbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19kaXNhYmxlZFxuQEAgLTEwNCw2ICsxMDgsOCBAQCAkKE9VVFBVVCkvc2NyaXB0LW5vZXhlYy5pbmM6ICQoQ0hFQ0tfRVhFQ19TQU1QTEVTKS9zY3JpcHQtbm9leGVjLmluY1xuICMgQ0ZMQUdTIGZvciBldmVyeSBwcm9ncmFtIGluIHRoaXMgZGlyZWN0b3J5LlxuICQoT1VUUFVUKS9iaW5mbXRfbWlzY19zZWxmcGluOiBDRkxBR1MgKz0gJChUT09MU19JTkNMVURFUylcbiAkKE9VVFBVVCkvYmluZm10X21pc2Nfc2VsZnBpbjogLi4vZmlsZXN5c3RlbXMvdXRpbHMuY1xuKyQoT1VUUFVUKS9iaW5mbXRfbWlzY19pbnRlcnBsaW1pdDogQ0ZMQUdTICs9ICQoVE9PTFNfSU5DTFVERVMpXG4rJChPVVRQVVQpL2JpbmZtdF9taXNjX2ludGVycGxpbWl0OiAuLi9maWxlc3lzdGVtcy91dGlscy5jXG4gXG4gIyAtLS0gYmluZm10X21pc2MgYnBmICgnQicpIGhhbmRsZXIgdGVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAjIFRoZSBzdHJ1Y3Rfb3BzIGJwZiBvYmplY3RzIGFyZSBjb21waWxlZCBhZ2FpbnN0IHRoZSBydW5uaW5nIGtlcm5lbCdzIEJURi5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuaW5kZXggMmM3YjYzMDc1ZjFkOS4uYjJhNDUxODkwMWIwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbkBAIC0zOCw2ICszOCw3IEBAXG4gI2RlZmluZSBfR05VX1NPVVJDRVxuICNpbmNsdWRlIFx1MDAzY2VsZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC02NSw2ICs2Niw5IEBAXG4gI2RlZmluZSBCSU5EX1JJU0NWX1BBVEhcdFwiL3RtcC9iaW5mbXRfYmluZF9yaXNjdlwiXG4gI2RlZmluZSBCSU5EX0VYUEVDVFx0XCJCSU5EX1JBTiBcIlxuICNkZWZpbmUgQklORF9NQVhcdDEwMFxuKyNkZWZpbmUgSU5URVJQX0xJTUlUXHRcIi9wcm9jL3N5cy91c2VyL21heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNcIlxuKy8qIEV4aXQgc3RhdHVzIG9mIHRoZSBiaW5kaW5nIGNoaWxkIHdoZW4gaXQgY2Fubm90IHNldCB1cCBhIGJ1ZGdldCBvZiBpdHMgb3duLiAqL1xuKyNkZWZpbmUgQklORF9OT19CVURHRVRcdDIwMFxuIFxuIC8qIEEgbWluaW1hbCA2NC1iaXQgbGl0dGxlLWVuZGlhbiBFTEYgaGVhZGVyLCBwYWRkZWQgdG8gdGhlIHJlYWQgc2l6ZS4gKi9cbiBzdGF0aWMgaW50IGNyZWF0ZV9mYWtlX2VsZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBzaG9ydCBtYWNoaW5lKVxuQEAgLTM3OCw2ICszODIsNTcgQEAgc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxuIFx0cmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7XG4gfVxuIFxuKy8qIFNldCB0aGUgaW50ZXJwcmV0ZXIgYnVkZ2V0IG9mIHRoaXMgbmFtZXNwYWNlLiAqL1xuK3N0YXRpYyBpbnQgd3JpdGVfaW50ZXJwX2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcbit7XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oSU5URVJQX0xJTUlULCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdG4gPSB3cml0ZShmZCwgdmFsLCBzdHJsZW4odmFsKSk7XG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gbiBcdTAwM2MgMCA/IC0xIDogMDtcbit9XG4rXG4rLypcbisgKiBUaGUgZXJybm8gYSBiaW5kIGlzIHJlZnVzZWQgd2l0aCB3aGVuIHRoZSB3cml0ZXIgaXMgYSBjaGlsZCB0aGF0IGhhcyBzcGVudFxuKyAqIHRoZSBidWRnZXQgb2YgYSB1c2VyIG5hbWVzcGFjZSBvZiBpdHMgb3duLCAwIGlmIGl0IHN1Y2NlZWRlZCBhbmQgLTEgaWYgdGhlXG4rICogY2hpbGQgY291bGQgbm90IHNldCBpdHNlbGYgdXAuIFRoZSBmZCBpcyBvcGVuZWQgaGVyZSBhbmQgaW5oZXJpdGVkLCBzbyB0aGVcbisgKiBpbnRlcnByZXRlciBpcyBzdGlsbCBvcGVuZWQgd2l0aCB0aGlzIHByb2Nlc3MncyBjcmVkZW50aWFscy5cbisgKi9cbitzdGF0aWMgaW50IGJpbmRfb3V0X29mX2J1ZGdldChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHQgICAgICBjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdGNoYXIgY21kW1BBVEhfTUFYXSwgZmlsZVtQQVRIX01BWF07XG4rXHRpbnQgZmQsIHN0YXR1cywgcmV0dmFsO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0c25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCBCSU5GTVRfRElSIFwiLyVzXCIsIGVudHJ5KTtcbitcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFwiKyVzICVzXFxuXCIsIG5hbWUsIHBhdGgpO1xuK1xuK1x0ZmQgPSBvcGVuKGZpbGUsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdHNzaXplX3QgbjtcbitcbitcdFx0LyogQSBuYW1lc3BhY2Ugb2YgaXRzIG93biwgd2l0aCBub3RoaW5nIGxlZnQgaW4gaXQgdG8gc3BlbmQuICovXG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpIHx8IHdyaXRlX2ludGVycF9saW1pdChcIjBcIikpXG4rXHRcdFx0X2V4aXQoQklORF9OT19CVURHRVQpO1xuK1x0XHRuID0gd3JpdGUoZmQsIGNtZCwgc3RybGVuKGNtZCkpO1xuK1x0XHRfZXhpdChuIFx1MDAzYyAwID8gZXJybm8gOiAwKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcdGlmIChwaWQgXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dmFsID0gV0VYSVRTVEFUVVMoc3RhdHVzKTtcbitcdHJldHVybiByZXR2YWwgPT0gQklORF9OT19CVURHRVQgPyAtMSA6IHJldHZhbDtcbit9XG4rXG4gRklYVFVSRShib3VuZF9pbnRlcnApIHtcbiBcdGNoYXIgb2JqW1BBVEhfTUFYXTtcbiBcdHN0cnVjdCBicGZfY2FzZSBjO1xuQEAgLTU2NSw0ICs2MjAsMTkgQEAgVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxuIFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCJ0ZXN0X2ludGVycF9iaW5kXCIsIFwib3ZlclwiLCBCSU5EX0ZJUlNUKSwgLUVOT1NQQyk7XG4gfVxuIFxuKy8qIEEgYmluZGluZyBwaW5zIGEgZmlsZTogaXQgaXMgY2hhcmdlZCwgYW5kIHJlZnVzZWQgb25jZSB0aGUgYnVkZ2V0IGlzIG91dC4gKi9cbitURVNUX0YoYm91bmRfaW50ZXJwLCBiaW5kaW5nc19hcmVfY2hhcmdlZClcbit7XG4rXHRpbnQgZXJyID0gYmluZF9vdXRfb2ZfYnVkZ2V0KFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInRoaXJkXCIsIEJJTkRfRklSU1QpO1xuK1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gdXNlciBuYW1lc3BhY2VzIG9yIG5vIFwiIElOVEVSUF9MSU1JVCk7XG4rXG4rXHQvKiBUaGUgY2hhcmdlIGZvbGxvd3MgdGhlIHdyaXRlciwgbm90IHRoZSBlbnRyeSBmaWxlIGl0IHdyaXRlcyB0by4gKi9cbitcdEVYUEVDVF9FUShlcnIsIEVOT1NQQyk7XG4rXG4rXHQvKiBUaGUgYnVkZ2V0IHdhcyB0aGUgb25seSB0aGluZyBpbiB0aGUgd2F5LiAqL1xuK1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCJ0ZXN0X2ludGVycF9iaW5kXCIsIFwidGhpcmRcIiwgQklORF9GSVJTVCksIDApO1xuK31cbitcbiBURVNUX0hBUk5FU1NfTUFJTlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmNjExYzU1MTc4NDJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfaW50ZXJwbGltaXQuY1xuQEAgLTAsMCArMSwyMzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogQSBwcmUtb3BlbmVkIGludGVycHJldGVyIC0gd2hhdCAnRicgZ2l2ZXMgYSBzdGF0aWMgZW50cnkgYW5kIHdoYXQgYSAnQidcbisgKiBlbnRyeSBiaW5kcyAtIGtlZXBzIGEgZmlsZSBvcGVuIGZvciBhcyBsb25nIGFzIHRoZSBlbnRyeSBsaXZlcywgc28gaXQgcGluc1xuKyAqIHRoZSBtb3VudCBpdCBjYW1lIGZyb20uIEl0IGNvc3RzIG5vIGZpbGUgZGVzY3JpcHRvciwgYW5kIGJpbmZtdF9taXNjIGlzXG4rICogRlNfVVNFUk5TX01PVU5ULCBzbyBhbiB1bnByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2UgY2FuIGNyZWF0ZSB0aGVtIHdpdGhvdXRcbisgKiBib3VuZC4gQ2hlY2sgdGhhdCBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTIGJvdW5kcyBpdCwgdGhhdCBhbiBlbnRyeVxuKyAqIHRoYXQgcHJlLW9wZW5zIG5vdGhpbmcgaXMgbm90IGNoYXJnZWQsIHRoYXQgcmVtb3ZpbmcgYW4gZW50cnkgZ2l2ZXMgdGhlXG4rICogY2hhcmdlIGJhY2ssIGFuZCB0aGF0IG5lc3RpbmcgYSB1c2VyIG5hbWVzcGFjZSBkb2VzIG5vdCBldmFkZSBpdC5cbisgKlxuKyAqIFJ1bnMgdW5wcml2aWxlZ2VkIGluIGEgdXNlciBuYW1lc3BhY2UuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vZmlsZXN5c3RlbXMvdXRpbHMuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjZGVmaW5lIE1OVFx0XHRcIi90bXAvYmluZm10X2ludGVycGxpbWl0XCJcbisjZGVmaW5lIE5FU1RFRF9NTlRcdFwiL3RtcC9iaW5mbXRfaW50ZXJwbGltaXRfbmVzdGVkXCJcbisjZGVmaW5lIExJTUlUX1NZU0NUTFx0XCIvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzXCJcbitcbisjZGVmaW5lIE1BR0lDXHRcdFwiXFxcXHhkZVxcXFx4YWRcIlxuKy8qIE5vdCBvbiB0aGUgaW5zdGFuY2UsIGFuZCB1bmxpa2UgL2Jpbi90cnVlIGl0IGFsd2F5cyBleGlzdHMuICovXG4rI2RlZmluZSBJTlRFUlBcdFx0XCIvcHJvYy9zZWxmL2V4ZVwiXG4rXG4rLyogU21hbGwgZW5vdWdoIHRvIGZpbGwgYnkgaGFuZCwgYmlnIGVub3VnaCB0aGF0IGEgcmVmdW5kIGlzIHZpc2libGUuICovXG4rI2RlZmluZSBMSU1JVFx0XHQ0XG4rXG4rLyogV2hhdCBVQ09VTlRfRU5UUlkoKSBsZXRzIGEgbmFtZXNwYWNlIHJhaXNlIGl0cyBvd24gbGltaXQgdG8uICovXG4rI2RlZmluZSBMSU1JVF9NQVhcdFwiMjE0NzQ4MzY0N1wiXG4rXG4rc3RhdGljIGludCBlbnN1cmVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpXG4re1xuK1x0aWYgKG1rZGlyKHBhdGgsIDA3NTUpIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFRVhJU1QpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBXcml0ZSBAdmFsIHRvIEBwYXRoLCBwcmVzZXJ2aW5nIHdyaXRlKDIpJ3MgZXJybm8gZm9yIHRoZSBjYWxsZXIuICovXG4rc3RhdGljIGludCB3cml0ZV9rZWVwX2Vycm5vKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbClcbit7XG4rXHRpbnQgZmQsIHNhdmVkO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0biA9IHdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKTtcbitcdHNhdmVkID0gZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXHRlcnJubyA9IHNhdmVkO1xuK1x0cmV0dXJuIG4gXHUwMDNjIDAgPyAtMSA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2V0X2xpbWl0KGNvbnN0IGNoYXIgKnZhbClcbit7XG4rXHRyZXR1cm4gd3JpdGVfa2VlcF9lcnJubyhMSU1JVF9TWVNDVEwsIHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfYXQoY29uc3QgY2hhciAqbW50LCBjb25zdCBjaGFyICpydWxlKVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcmVnaXN0ZXJcIiwgbW50KTtcbitcdHJldHVybiB3cml0ZV9rZWVwX2Vycm5vKHBhdGgsIHJ1bGUpO1xuK31cbitcbisvKiBBbiAnRicgZW50cnk6IG9uZSBpbnRlcnByZXRlciBwcmUtb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbiwgb25lIGNoYXJnZS4gKi9cbitzdGF0aWMgaW50IHJlZ2lzdGVyX2ZpeGVkKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRjaGFyIHJ1bGVbUEFUSF9NQVhdO1xuK1xuK1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcIjolczpNOjpcIiBNQUdJQyBcIjo6XCIgSU5URVJQIFwiOkZcIiwgbmFtZSk7XG4rXHRyZXR1cm4gcmVnaXN0ZXJfYXQobW50LCBydWxlKTtcbit9XG4rXG4rLyogVGhlIHNhbWUgZW50cnkgd2l0aG91dCAnRic6IHRoZSBpbnRlcnByZXRlciBpcyBvcGVuZWQgcGVyIGV4ZWMgaW5zdGVhZC4gKi9cbitzdGF0aWMgaW50IHJlZ2lzdGVyX3BsYWluKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRjaGFyIHJ1bGVbUEFUSF9NQVhdO1xuK1xuK1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcIjolczpNOjpcIiBNQUdJQyBcIjo6XCIgSU5URVJQIFwiOlwiLCBuYW1lKTtcbitcdHJldHVybiByZWdpc3Rlcl9hdChtbnQsIHJ1bGUpO1xuK31cbitcbitzdGF0aWMgaW50IHJlbW92ZV9lbnRyeShjb25zdCBjaGFyICptbnQsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy8lc1wiLCBtbnQsIG5hbWUpO1xuK1x0cmV0dXJuIHdyaXRlX2tlZXBfZXJybm8ocGF0aCwgXCItMVxcblwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZW50cnlfZXhpc3RzKGNvbnN0IGNoYXIgKm1udCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzLyVzXCIsIG1udCwgbmFtZSk7XG4rXHRyZXR1cm4gYWNjZXNzKHBhdGgsIEZfT0spID09IDA7XG4rfVxuK1xuKy8qIFJlZ2lzdGVyIEBuICdGJyBlbnRyaWVzLCBlYWNoIHdpdGggYSBuYW1lIG9mIGl0cyBvd24uICovXG4rc3RhdGljIGludCBmaWxsX2J1ZGdldChjb25zdCBjaGFyICptbnQsIHVuc2lnbmVkIGludCBuKVxuK3tcbitcdGNoYXIgbmFtZVszMl07XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwiZml4ZWQldVwiLCBpKTtcbitcdFx0aWYgKHJlZ2lzdGVyX2ZpeGVkKG1udCwgbmFtZSkpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK0ZJWFRVUkUoaW50ZXJwX2xpbWl0KSB7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGludGVycF9saW1pdClcbit7XG4rXHQvKiBzZXR1cF91c2VybnMoKSBleGl0cyByYXRoZXIgdGhhbiByZXR1cm5zIGlmIHRoaXMgaXMgbm90IHRoZXJlLiAqL1xuK1x0aWYgKGFjY2VzcyhcIi9wcm9jL3NlbGYvbnMvdXNlclwiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIHdpdGhvdXQgdXNlciBuYW1lc3BhY2VzXCIpO1xuK1x0QVNTRVJUX0VRKHNldHVwX3VzZXJucygpLCAwKTtcbitcbitcdC8qIENBUF9TWVNfUkVTT1VSQ0UgaW4gdGhpcyBuYW1lc3BhY2UgaXMgd2hhdCBtYWtlcyBpdCB3cml0YWJsZS4gKi9cbitcdGlmIChzZXRfbGltaXQoTElNSVRfTUFYKSkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuK1x0XHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCB3aXRob3V0IFwiIExJTUlUX1NZU0NUTCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImNhbm5vdCBzZXQgdGhlIGxpbWl0OiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKGVuc3VyZV9kaXIoTU5UKSwgMCk7XG4rXHRpZiAobW91bnQoXCJiaW5mbXRfbWlzY1wiLCBNTlQsIFwiYmluZm10X21pc2NcIiwgMCwgTlVMTCkpIHtcbitcdFx0aW50IHNhdmVkID0gZXJybm87XG4rXG4rXHRcdC8qIFRlYXJkb3duIGRvZXNuJ3QgcnVuIHdoZW4gc2V0dXAgc2tpcHMsIHNvIGNsZWFuIHVwIGhlcmUuICovXG4rXHRcdHJtZGlyKE1OVCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIGJpbmZtdF9taXNjOiAlc1wiLCBzdHJlcnJvcihzYXZlZCkpO1xuK1x0fVxuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKGludGVycF9saW1pdClcbit7XG4rXHQvKiBUaGUgbmFtZXNwYWNlcyBnbyB3aXRoIHRoZSBwcm9jZXNzOyBqdXN0IGRvbid0IGxpdHRlciAvdG1wLiAqL1xuK1x0dW1vdW50MihORVNURURfTU5ULCBNTlRfREVUQUNIKTtcbitcdHVtb3VudDIoTU5ULCBNTlRfREVUQUNIKTtcbitcdHJtZGlyKE5FU1RFRF9NTlQpO1xuK1x0cm1kaXIoTU5UKTtcbit9XG4rXG4rLyogRXZlcnkgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBpcyBjaGFyZ2VkLCBhbmQgdGhlIGJ1ZGdldCBpcyBhIGhhcmQgc3RvcC4gKi9cbitURVNUX0YoaW50ZXJwX2xpbWl0LCBmaXhlZF9pbnRlcnByZXRlcnNfYXJlX2NoYXJnZWQpXG4re1xuK1x0Y2hhciBidWZbMzJdO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBMSU1JVCk7XG4rXHRBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbitcbitcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwib3ZlclwiKSwgMCk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1NQQyk7XG4rXG4rXHQvKiBBIHJlZnVzZWQgcmVnaXN0cmF0aW9uIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gKi9cbitcdEVYUEVDVF9GQUxTRShlbnRyeV9leGlzdHMoTU5ULCBcIm92ZXJcIikpO1xuK31cbitcbisvKiBBbiBlbnRyeSB0aGF0IHByZS1vcGVucyBub3RoaW5nIHBpbnMgbm90aGluZywgc28gaXQgaXMgbm90IGNoYXJnZWQuICovXG4rVEVTVF9GKGludGVycF9saW1pdCwgcGxhaW5fZW50cmllc19hcmVfbm90X2NoYXJnZWQpXG4re1xuK1x0QVNTRVJUX0VRKHNldF9saW1pdChcIjBcIiksIDApO1xuK1xuK1x0RVhQRUNUX0VRKHJlZ2lzdGVyX3BsYWluKE1OVCwgXCJwbGFpblwiKSwgMCk7XG4rXHRFWFBFQ1RfVFJVRShlbnRyeV9leGlzdHMoTU5ULCBcInBsYWluXCIpKTtcbitcbitcdC8qIC4uLiB3aGlsZSB0aGUgc2FtZSBlbnRyeSB3aXRoICdGJyBoYXMgbm90aGluZyB0byBzcGVuZC4gKi9cbitcdEVYUEVDVF9ORShyZWdpc3Rlcl9maXhlZChNTlQsIFwiZml4ZWRcIiksIDApO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9TUEMpO1xuK31cbitcbisvKiBSZW1vdmluZyBhbiBlbnRyeSBjbG9zZXMgaXRzIGludGVycHJldGVycyBhbmQgZ2l2ZXMgdGhlIGNoYXJnZSBiYWNrLiAqL1xuK1RFU1RfRihpbnRlcnBfbGltaXQsIHJlbW92YWxfcmVmdW5kc190aGVfY2hhcmdlKVxuK3tcbitcdGNoYXIgYnVmWzMyXTtcbitcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJXVcIiwgTElNSVQpO1xuK1x0QVNTRVJUX0VRKHNldF9saW1pdChidWYpLCAwKTtcbitcbitcdEFTU0VSVF9FUShmaWxsX2J1ZGdldChNTlQsIExJTUlUKSwgMCk7XG4rXHRBU1NFUlRfTkUocmVnaXN0ZXJfZml4ZWQoTU5ULCBcIm92ZXJcIiksIDApO1xuK1xuK1x0QVNTRVJUX0VRKHJlbW92ZV9lbnRyeShNTlQsIFwiZml4ZWQwXCIpLCAwKTtcbitcdEVYUEVDVF9FUShyZWdpc3Rlcl9maXhlZChNTlQsIFwib3ZlclwiKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogVGhlIGNoYXJnZSB3YWxrcyB0aGUgYW5jZXN0b3JzLCBzbyBhIG5hbWVzcGFjZSBjYW5ub3QgYnV5IGl0c2VsZiBidWRnZXQgYnlcbisgKiBuZXN0aW5nOiBpdCBtYXkgcmFpc2Ugb25seSBpdHMgb3duIGxpbWl0LCBhbmQgdGhlIHBhcmVudCBpdCB3YXMgY3JlYXRlZFxuKyAqIGZyb20gaXMgY2hhcmdlZCBmb3IgZXZlcnkgYmluZGluZyBtYWRlIGJlbG93IGl0LlxuKyAqL1xuK1RFU1RfRihpbnRlcnBfbGltaXQsIG5lc3RpbmdfZG9lc19ub3RfZXZhZGVfaXQpXG4re1xuK1x0Y2hhciBidWZbMzJdO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBMSU1JVCk7XG4rXHRBU1NFUlRfRVEoc2V0X2xpbWl0KGJ1ZiksIDApO1xuK1x0QVNTRVJUX0VRKGZpbGxfYnVkZ2V0KE1OVCwgTElNSVQpLCAwKTtcbitcbitcdEFTU0VSVF9FUShzZXR1cF91c2VybnMoKSwgMCk7XG4rXHRBU1NFUlRfRVEoc2V0X2xpbWl0KExJTUlUX01BWCksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGVuc3VyZV9kaXIoTkVTVEVEX01OVCksIDApO1xuK1x0QVNTRVJUX0VRKG1vdW50KFwiYmluZm10X21pc2NcIiwgTkVTVEVEX01OVCwgXCJiaW5mbXRfbWlzY1wiLCAwLCBOVUxMKSwgMCk7XG4rXG4rXHQvKiBBIGZyZXNoIGluc3RhbmNlIHdpdGggYW4gdW5saW1pdGVkIGJ1ZGdldCBvZiBpdHMgb3duLCBhbmQgeWV0OiAqL1xuK1x0RVhQRUNUX05FKHJlZ2lzdGVyX2ZpeGVkKE5FU1RFRF9NTlQsIFwibmVzdGVkXCIpLCAwKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PU1BDKTtcbitcbitcdC8qIFRoZSBuZXN0ZWQgaW5zdGFuY2Ugd29ya3MgZm9yIGFueXRoaW5nIHRoYXQgcGlucyBubyBmaWxlLiAqL1xuK1x0RVhQRUNUX0VRKHJlZ2lzdGVyX3BsYWluKE5FU1RFRF9NTlQsIFwibmVzdGVkX3BsYWluXCIpLCAwKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ2OjUwLjQ4ODM2Nzc3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTkyMTY2MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQmluZm10X21pc2MgSW50ZXJwcmV0ZXIgTGltaXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIEl0J3MgdG91Y2hpbmcgYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBhZGRpbmcgYSBuZXcgc3lzY3RsLCBgbWF4X2JpbmZtdF9taXNjX2ludGVycHJldGVyc2AsIHdoaWNoIGlzIGludHJpZ3VpbmcuIExpbWl0aW5nIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgd2l0aGluIGBiaW5mbXRfbWlzY2AgaXMgYSBnb29kIGlkZWEgaW4gdGVybXMgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGhhcmRlbmluZy4gTG9va3MgbGlrZSB0aGV5J3JlIHVzaW5nIGBpbmNfdWNvdW50YCBhbmQgYGRlY191Y291bnRgIHdpdGggYFVDT1VOVF9CSU5GTVRfTUlTQ19JTlRFUlBSRVRFUlNgIHRvIG1hbmFnZSB0aGUgYWNjb3VudGluZywgd2hpY2ggaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciByZXNvdXJjZSBsaW1pdGluZy4gVGhlIGNoYW5nZXMgZm9jdXMgb24gbW9kaWZ5aW5nIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIHRvIGFwcGx5IHRoZSBjaGFyZ2UsIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UuIFRoZXkndmUgYWxzbyBhZGRlZCBhIHRlc3QsIGBiaW5mbXRfbWlzY19pbnRlcnBsaW1pdC5jYCwgYW5kIHRvdWNoZWQgYGJpbmZtdF9taXNjX2JwZi5jYC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBmcy9iaW5mbXRfbWlzYy5jYCBhbmQgYGtlcm5lbC91Y291bnQuY2AgdG8gc2VlIGhvdyB0aGUgbGltaXQgaXMgaW1wbGVtZW50ZWQuIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGhlcmUgZm9yIGZ1enppbmcuIGBiaW5mbXRfbWlzY2AgaXMsIGFmdGVyIGFsbCwgdXNlci1yZWFjaGFibGUgdGhyb3VnaCBtb3VudGluZyBhbmQgd3JpdGluZyB0byB0aGUgZmlsZSBzeXN0ZW0uIFRoYXQgbWVhbnMgYW55IGZsYXcgaW4gdGhlIGxvZ2ljIGlzIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZSBsb29rLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb3JlIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCBzb3VuZHMgbGlrZSB0aGUgY3JpdGljYWwgcG9pbnQuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0NzoyNC40ODA1Mzg1MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3MTM4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW50cnlfYXR0YWNoX2ludGVycHJldGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz0yODU9c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTI5Ny0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjI5ODogKiBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIgLSBiaW5kIGFuIG9wZW5lZCBpbnRlcnByZXRlciB0byBAZVxcbmZzL2JpbmZtdF9taXNjLmMtMjk5LSAqIEBlOiBlbnRyeSBiZWluZyBjb25maWd1cmVkXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTMxMy0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjMxNDpzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy0zMTUtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEzMDE9c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEzNTEtXFx0ZWxzZVxcbmZzL2JpbmZtdF9taXNjLmM6MTM1MjpcXHRcXHRyZXR2YWwgPSBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoZSwgbmFtZSwgcGF0aCwgZik7XFxuZnMvYmluZm10X21pc2MuYy0xMzUzLVxcdGlub2RlX3VubG9jayhyb290KTtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQ2Mj1zdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ4Ni1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmKTtcXG5mcy9iaW5mbXRfbWlzYy5jOjE0ODc6XFx0XFx0ZXJyID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIFxcXCJcXFwiLCBlLVxcdTAwM2VpbnRlcnByZXRlciwgZik7XFxuZnMvYmluZm10X21pc2MuYy0xNDg4LVxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDc6MjQuNTI0MjYwMDU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNTM2NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBJbnRlcnByZXRlciBBdHRhY2htZW50KipcblxuUmlnaHQsIGxldCdzIHNlZS4gSSdtIGxvb2tpbmcgYXQgaG93IGludGVycHJldGVycyBhcmUgYmVpbmcgbGlua2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGUgY29kZSdzIGNhbGxpbmcgYGJtX2VudHJ5X2FkZF9pbnRlcnBgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBhbmQgYm90aCBvZiB0aG9zZSB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHNjb3Bpbmcg4oCTIHNwZWNpZmljYWxseSwgYXJlIHRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgZG9pbmcgdGhlIGF0dGFjaGluZywgZGVjbGFyZWQgYXMgc3RhdGljPyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIHRoZXkgKmFyZSogc3RhdGljLCBpdCByZWFsbHkgbGltaXRzIHRoZSBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIG1hbmlwdWxhdGlvbiBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZWlyIHZpc2liaWxpdHkgaXMgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBvciBpZiB0aGV5IGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLiBUaGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyaXR5LCBtYWludGFpbmFiaWxpdHksIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgZGVjbGFyYXRpb25zIHF1aWNrbHkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleHBvc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjMxLjIyOTYzMDU0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE3MTk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm1fZW50cnlfYWRkX2ludGVycFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9MTI2ND1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyODUtLyoqXFxuZnMvYmluZm10X21pc2MuYzoxMjg2OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyODctICogQGU6IHRoZSBlbnRyeVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzAwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTMwMTpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDItXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMzYyPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzc5LVxcdGlmIChidWZbMF0gPT0gJysnKVxcbmZzL2JpbmZtdF9taXNjLmM6MTM4MDpcXHRcXHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcXG5mcy9iaW5mbXRfbWlzYy5jLTEzODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjMxLjU1MTM1Nzg3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MDgzODI4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXcml0ZSBPcGVyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBibV9lbnRyeV93cml0ZWAuIFRoYXQgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCB0aGUgZmlsZSBvcGVyYXRpb24gd3JpdGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJsb2NrIE1hbmFnZXIuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gY29uZmlybWluZyBob3cgd3JpdGVzIGFyZSByZWdpc3RlcmVkLiBMZXQncyBkaWcgaW50byBgYm1fcmVnaXN0ZXJfd3JpdGVgIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkIGludGVybmFsbHkuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcmVnaXN0ZXJpbmcgYSB3cml0ZSBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjM4LjA1OTc0MzEyM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUyNzIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9MTQzMT1zdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjEtXFxuZnMvYmluZm10X21pc2MuYzoxNDYyOnN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbmZzL2JpbmZtdF9taXNjLmMtMTQ2My1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE1MDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jOjE1MDQ6XFx0LndyaXRlXFx0XFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE1MDUtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ3OjM4LjEwNjI3NDk4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxMjMzNDc1MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEVudHJ5IFBvaW50cyoqXG5cbkFscmlnaHQsIGxldCdzIHpvb20gaW4gb24gdGhpcyBjb2RlLiBJdCBsb29rcyBsaWtlIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIGBibV9lbnRyeV93cml0ZWAgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3Igd2hhdGV2ZXIgdGhpcyBzeXN0ZW0gaXMgZG9pbmcuIEdpdmVuIHRoZWlyIG5hbWVzLCBJJ20gZ3Vlc3Npbmcgb25lIGhhbmRsZXMgcmVnaXN0ZXItbGV2ZWwgd3JpdGVzIGFuZCB0aGUgb3RoZXIgbWFuYWdlcyBkYXRhIGVudHJpZXMuIFNlZW1zIGxvZ2ljYWwsIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJhbCBicmVha2Rvd24sIGFuZCBsaWtlbHkgZm9sbG93cyBhIGNvbW1vbiBzb2Z0d2FyZSBkZXNpZ24gcGF0dGVybi4gVG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LCBteSBpbW1lZGlhdGUgZm9jdXMgaGFzIHRvIGJlIG9uIGBibV9lbnRyeV93cml0ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBvcGVyYXRlcywgdGhhdCB3aWxsIGxpa2VseSBpbGx1bWluYXRlIHRoZSB3aG9sZSBvcGVyYXRpb24uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0Nzo1OS4zMzk3NTI0MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg0NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJtX2VudHJ5X3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz0xMjY0PXN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTI3MS1cXG5mcy9iaW5mbXRfbWlzYy5jOjEyNzI6XFx0Lyogc2VxX29wZW4oKSBjbGVhcnMgRk1PREVfUFdSSVRFLCBibV9lbnRyeV93cml0ZSgpIHRha2VzIGFueSBvZmZzZXQgKi9cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzMtXFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1dSSVRFKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMzAxPXN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzYxLVxcbmZzL2JpbmZtdF9taXNjLmM6MTM2MjpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjMtXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE0MjA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fZW50cnlfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQyMi1cXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuZnMvYmluZm10X21pc2MuYzoxNDIzOlxcdC53cml0ZVxcdFxcdD0gYm1fZW50cnlfd3JpdGUsXFxuZnMvYmluZm10X21pc2MuYy0xNDI0LVxcdC5sbHNlZWtcXHRcXHQ9IHNlcV9sc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDc6NTkuMzg1NDQ2ODIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODYzMjA3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIENvbXBsZXRlIEZpbGUgT3BlcmF0aW9uIENvdmVyYWdlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBcIkhhdmUgd2UgdHJ1bHkgYWNjb3VudGVkIGZvciAqYWxsKiB0aGUgZmlsZSBvcGVyYXRpb25zIGhlcmU/XCIgSXQncyBhIGNyaXRpY2FsIHF1ZXN0aW9uIHRvIGFzaywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb21wbGV4IGRhdGEgbWFuaXB1bGF0aW9uLiBNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBxdWlja2x5IGFuZCBjb21wcmVoZW5zaXZlbHkgc2NhbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgdG8gc2VlIGlmIHdlJ3ZlIG1pc3NlZCBhbnl0aGluZy4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBhcmVhcyB3aGVyZSB3ZSBwdXQgaW5mb3JtYXRpb24gaW50byBhIHN5c3RlbSwgd2hpY2ggc2hvdWxkIGNvdmVyIHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3RzLiBcIkxldCdzIGNoZWNrIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYFwiLiBJJ2xsIHVzZSB0aGF0IGFzIGEganVtcGluZy1vZmYgcG9pbnQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNhcHR1cmVkIHRoZSBjb3JlIGFjdGlvbnMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDg6MzAuMjQ4NjU2OTMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0MDQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW50cnlfcHV0X2ludGVycHJldGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9MjczPXN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjg0LS8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6Mjg1OnN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtMjg2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MzcxPXN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTM3Ni1cXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZlLVxcdTAwM2V1c2VycykpIHtcXG5mcy9iaW5mbXRfbWlzYy5jOjM3NzpcXHRcXHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xcbmZzL2JpbmZtdF9taXNjLmMtMzc4LVxcdFxcdC8qIFdhbGtlcnMgbWF5IHN0aWxsIGRlcmVmZXJlbmNlIHRoaXMgZW50cnksIGV2ZW4gc2xlZXBpbmcuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ4OjMwLjQ3NDA3Mjg5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA0MTI5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBiaW5mbXRfaGFuZGxlciBSZW1vdmFsKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBgcHV0X2JpbmZtdF9oYW5kbGVyYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSAqcmVtb3ZhbCogb2YgYSBiaW5mbXQgaGFuZGxlci4gVGhhdCBtYWtlcyBpbW1lZGlhdGUgc2Vuc2U7IHdlIG5lZWQgYSBtZWNoYW5pc20gdG8gZ3JhY2VmdWxseSBjbGVhbiB1cCBhZnRlciBhIGhhbmRsZXIgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4gTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgZXhhY3RseS4gV2hhdCBjbGVhbnVwIHRhc2tzIGFyZSBpbml0aWF0ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSBmcmVlZD8gSSBleHBlY3QgYSB3ZWxsLWRlc2lnbmVkIGhhbmRsZXIgd2lsbCBoYXZlIGFsbG9jYXRlZCBzb21lIGtlcm5lbCBzdHJ1Y3R1cmVzIGFuZCBwZXJoYXBzIGZpbGUgZGVzY3JpcHRvcnMsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgaXMgZnJlZWQgYW5kIGlmIHdlIGFyZSBjYWxsaW5nIGFwcHJvcHJpYXRlIGRlc3RydWN0aW9uIGZ1bmN0aW9ucyBmb3IgdGhhdCBkYXRhLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN0YWJpbGl0eSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLiBMZXQncyBkaWcgaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBwdXRfYmluZm10X2hhbmRsZXJgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ4OjM4LjQ3ODIwNTQ5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MjQ1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHV0X2JpbmZtdF9oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz0zNTI9c3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTM2Mi0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjM2MzogKiBwdXRfYmluZm10X2hhbmRsZXIgLSBwdXQgYmluYXJ5IGhhbmRsZXIgZW50cnlcXG5mcy9iaW5mbXRfbWlzYy5jLTM2NC0gKiBAZTogZW50cnkgdG8gcHV0XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTM3MC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjM3MTpzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtMzcyLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzgyLVxcbmZzL2JpbmZtdF9taXNjLmM6MzgzOkRFRklORV9GUkVFKHB1dF9iaW5mbXRfaGFuZGxlciwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICosIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXFxuZnMvYmluZm10X21pc2MuYy0zODQtXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTYyMT1zdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9iaW5mbXRfbWlzYy5jLTYyMi17XFxuZnMvYmluZm10X21pc2MuYzo2MjM6XFx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpmbXQgX19mcmVlKHB1dF9iaW5mbXRfaGFuZGxlcikgPSBOVUxMO1xcbmZzL2JpbmZtdF9taXNjLmMtNjI0LVxcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz04NDg9c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTk5NC1cXG5mcy9iaW5mbXRfbWlzYy5jOjk5NTpcXHQvKiBCb3JuIGhvbGRpbmcgb25lIHJlZmVyZW5jZTsgcHV0X2JpbmZtdF9oYW5kbGVyKCkgaXMgdGhlIHRlYXJkb3duLiAqL1xcbmZzL2JpbmZtdF9taXNjLmMtOTk2LVxcdHJlZmNvdW50X3NldChcXHUwMDI2ZS1cXHUwMDNldXNlcnMsIDEpO1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMTQ5PXN0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExNjItXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuZnMvYmluZm10X21pc2MuYzoxMTYzOlxcdFxcdHB1dF9iaW5mbXRfaGFuZGxlcihlKTtcXG5mcy9iaW5mbXRfbWlzYy5jLTExNjQtXFx0fVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNDYyPXN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDY0LXtcXG5mcy9iaW5mbXRfbWlzYy5jOjE0NjU6XFx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplIF9fZnJlZShwdXRfYmluZm10X2hhbmRsZXIpID0gTlVMTDtcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjYtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ4OjM4LjUyNjEzNTE4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA3NTI3NjM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJpbmZtdF9taXNjIEludGVycHJldGVyIExpbWl0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGJtX3JlZ2lzdGVyX3dyaXRlYCwgYGJtX2VudHJ5X3dyaXRlYCwgYGJtX2V2aWN0X2lub2RlYCwgYW5kIGBsb2FkX21pc2NfYmluYXJ5YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYGJpbmZtdF9taXNjYCwgc3BlY2lmaWNhbGx5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMuIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgYXBwcm9hY2ggdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLlxuXG5JIHNlZSB0aGF0IGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCBoYXMgYmVlbiBpbnRyb2R1Y2VkLCBhbG9uZyB3aXRoIHJlbGF0ZWQgZGVmaW5pdGlvbnMgaW4gYHVjb3VudC5jYCBhbmQgYHVzZXJfbmFtZXNwYWNlLmhgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgY29udHJvbCBsaWtlbHkgcmVzaWRlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoYXQgY291bnRlciBpcyBpbXBsZW1lbnRlZCBhbmQgdXNlZC5cblxuQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX0JJTkZNVF9NSVNDYCBhbmQgYENPTkZJR19VU0VSX05TYC4gTWFrZXMgc2Vuc2U7IGBDT05GSUdfVVNFUl9OU2AgaXMgY3J1Y2lhbCBmb3IgbmFtZXNwYWNlLWF3YXJlIGxpbWl0cy4gVGltZSB0byBkaXZlIGludG8gYGZzL0tjb25maWcuYmluZm10YCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFyb3VuZCBgQklORk1UX01JU0NgLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gY29uZmlnIG9wdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgaG93IHRvIG1hbmFnZSB0aGlzIGludGVycHJldGVyIGxpbWl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0OToxMy42MDE0MTU2MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjYwMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCSU5GTVRfTUlTQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnLmJpbmZtdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxcbmZzL0tjb25maWcuYmluZm10OjE0NTpjb25maWcgQklORk1UX01JU0NcXG5mcy9LY29uZmlnLmJpbmZtdC0xNDYtXFx0dHJpc3RhdGUgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBNSVNDIGJpbmFyaWVzXFxcIlxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxcbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQklORk1UX01JU0NfQlBGXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVxcdGJvb2wgXFxcIkJQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ5OjEzLjY1MzA4MjA0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjc1MDc1MTQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBrZXJuZWw6XG5cbioqRGVsdmluZyBpbnRvIFVzZXIgTmFtZXNwYWNlczogRXhhbWluaW5nIGBrZXJuZWwvdWNvdW50LmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgcGVyaGFwcyBjb25maXJtIGEgaHVuY2gsIGFib3V0IGhvdyB1c2VyIG5hbWVzcGFjZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGtlcm5lbC91Y291bnQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBhbnkgY29kZSByZWxhdGVkIHRvIGBVU0VSX05TYC4gSXQncyBhIGtleSBzdHJ1Y3R1cmUgYW5kIG1lY2hhbmlzbSwgYW5kIHRoYXQgZmlsZSBpcyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbG9naWMgZm9yIG1hbmFnaW5nIHVzZXIgbmFtZXNwYWNlIHJlc291cmNlIGFjY291bnRpbmcsIHBlcmhhcHMgdXNlciBJRCBtYXBwaW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBzeXN0ZW0gY2FsbHMuIFRoZSBjb2RlIGluIGB1Y291bnQuY2Agc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBrZXJuZWwgdHJhY2tzIGFuZCBsaW1pdHMgcmVzb3VyY2UgY29uc3VtcHRpb24gd2l0aGluIHRoZXNlIGlzb2xhdGVkIHVzZXIgZW52aXJvbm1lbnRzLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIGhvdyB1c2VyIG5hbWVzcGFjZXMgb3BlcmF0ZS4gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyBkZXRhaWwgZm9yIGxhdGVyIGluIHRoaXMgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo0OTozMC40MDM4MzU4NDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTc0NDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUl9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0Mjk9Y29uZmlnIElQQ19OU1xcbi0tXFxuaW5pdC9LY29uZmlnLTE0MzYtXFxuaW5pdC9LY29uZmlnOjE0Mzc6Y29uZmlnIFVTRVJfTlNcXG5pbml0L0tjb25maWctMTQzOC1cXHRib29sIFxcXCJVc2VyIG5hbWVzcGFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDk6MzAuNjIzNTg3MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMDIyOTE2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJJTkZNVF9NSVNDIGFuZCBVU0VSX05TIGZvciBSZWxldmFudCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEJJTkZNVF9NSVNDYCBhbmQgYFVTRVJfTlNgIGFzIG15IGNvbmZpZyBjb250ZXh0LiBUaGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBgYm1fZW50cnlfd3JpdGVgLCBgYm1fZXZpY3RfaW5vZGVgLCBhbmQgYGxvYWRfbWlzY19iaW5hcnlgLiBSaWdodCBub3csIGl0IGxvb2tzIGxpa2UgYGJtX2VudHJ5X3dyaXRlYCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhcmUgdGhlIGNydWNpYWwgb25lcyBiZWNhdXNlICp0aGV5KiBhcmUgd2hhdCBjYWxsIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgLCBhbmQgdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGBpbmNfdWNvdW50YC4gT24gdGhlIGZsaXAgc2lkZSwgYGJtX2V2aWN0X2lub2RlYCBpcyBsaW5rZWQgdG8gYHB1dF9iaW5mbXRfaGFuZGxlcmAsIHdoaWNoIGNhbGxzIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCwgdGhhdCB0aGVuIGRvZXMgdGhlIGBkZWNfdWNvdW50YCBvcGVyYXRpb24uXG5cbkxldCdzIGRyaWxsIGRvd24uIGBibV9yZWdpc3Rlcl93cml0ZWAgbG9va3Mgc29saWQ7IGl0IGhhbmRsZXMgd3JpdGVzIHRvIGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgLiAgYGJtX2VudHJ5X3dyaXRlYCBpcyBzaW1pbGFybHkgZm9jdXNlZCBvbiB3cml0ZXMgdG8gYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9cdTAwM2NlbnRyeVx1MDAzZWAuICBgYm1fZXZpY3RfaW5vZGVgIGlzIHRyaWdnZXJlZCB3aGVuIGEgYmluZm10IGVudHJ5IGZpbGUgZ2V0cyByZW1vdmVkLiBBbmQgYGxvYWRfbWlzY19iaW5hcnlgIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBhIGJpbmFyeSBpcyBleGVjdXRlZC4gU28sIGNvbnNpZGVyaW5nIHRoYXQsIEknbSBkZWZpbml0ZWx5IGluY2x1ZGluZyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBgYm1fZW50cnlfd3JpdGVgIGluIG15IGFuYWx5c2lzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIHN0YXRpYyBpc3N1ZS4gYGJtX3JlZ2lzdGVyX3dyaXRlYCAqaXMqIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgb2ZmIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBIb3dldmVyLCB0aGVzZSBgYm1fKmAgZnVuY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3RzLiBUaGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGFuZCB0aGV5ICphcmVuJ3QqIGlubGluZWQuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBvcHRpb24/XG5cbmBpbmNfdWNvdW50YCBhbmQgYGRlY191Y291bnRgIGFyZSBleHBvcnRlZCwgYnV0IHRob3NlIGFyZSBqdXN0IGdlbmVyaWMgdXRpbGl0aWVzLiBMZXQgbWUgY2hlY2sgaWYgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgaXMgaW5saW5lZC4gSXQncyBzdGF0aWMsIGJ1dCB0aGF0IGRvZXNuJ3QgKmF1dG9tYXRpY2FsbHkqIG1lYW4gaXQncyBpbmxpbmVkLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGZzL2JpbmZtdF9taXNjLmNgIGZvciBzb21lIG1vcmUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDEsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NDk6NDEuNjI1ODgyOTc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM3MTI0NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjQ5OjQxLjY3NzI2NDI0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5Mzk5ODU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipGaW5kaW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSBpbiBgZnMvYmluZm10X21pc2MuY2AqKlxuXG5SaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBmcy9iaW5mbXRfbWlzYy5jYC4gV2h5PyBXZWxsLCBwcm9iYWJseSBiZWNhdXNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGR5bmFtaWNhbGx5IGhhbmRsZXMgZXhlY3V0YWJsZSBmb3JtYXRzLCBvciBwZXJoYXBzIEknbSBsb29raW5nIHRvIGV4dGVuZCBpdHMgY2FwYWJpbGl0aWVzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsaW1pdGVkIGluIHNjb3BlLCBhbmQgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHNvIHRvIHNwZWFrLCBvZiB0aGF0IGZpbGUuIFRoZXkncmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzLCB0aGUgdGhpbmdzIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIHVzZXItc3BhY2UgbWlnaHQgY2FsbCBpbnRvLiBUaGVyZWZvcmUsIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIG9uZXMgaXMgdGhlIGJlc3QgZmlyc3Qgc3RlcC4gTGV0J3Mgc2VlIHdoYXQncyBjYWxsYWJsZSBieSBvdGhlciBtb2R1bGVzIG9yIHRoZSBrZXJuZWwgYXMgYSB3aG9sZS4gSSBleHBlY3QgdGhlc2Ugd2lsbCBiZSB0aGUgZnVuY3Rpb25zIG1hbmFnaW5nIHRoZSByZWdpc3RyYXRpb24sIGxvYWRpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZm9ybWF0cyBhcmUgaGFuZGxlZCBhbmQgd2hhdCBob29rcyBhcmUgYXZhaWxhYmxlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAxLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MTQuNjcxMjY3NzE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1NzU3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MTQuNzIxMjMzNzE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Mzc4MTAxMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBUeXBlIFF1YWxpZmllcnMgZm9yIFNpemUtUmVsYXRlZCBWYXJpYWJsZXMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBkZXNpZ24gcHJvYmxlbSwgYW5kIEknbSBhdCB0aGUgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHNldHRsZSBvbiBhIHR5cGUgcXVhbGlmaWVyIGZvciBhIHZhcmlhYmxlIGxpa2VseSB0byBob2xkIHNpemUgaW5mb3JtYXRpb24uIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJMZXQncyBzZWUsIHdoYXQgYXJlIHRoZSBiZXN0IG9wdGlvbnMgaGVyZT9cIiBNeSBpbml0aWFsIGluc3RpbmN0IGxlYW5zIHRvd2FyZHMgdHJ5aW5nIGBedm9pZGAgb3IgYF5zc2l6ZV90YC4gSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byBhc3Nlc3MgdGhlIHRyYWRlb2Zmcy4gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiBIb3cgZG9lcyB0aGlzIGltcGFjdCBwb3J0YWJpbGl0eT8gSXMgYF52b2lkYCBvdmVybHkgZ2VuZXJpYywgb3IgZG9lcyBpdCBvZmZlciBzb21lIHBvdGVudGlhbCBmb3IgZnV0dXJlIGZsZXhpYmlsaXR5PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgXnNzaXplX3RgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoOiBXaGF0J3MgdGhlIHRhcmdldCBwbGF0Zm9ybSwgYW5kIHdpbGwgaXQgYmUgdGhlIGJlc3Qgb3B0aW9uIGhlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTI3LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MzAuMDk5MzM3ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzk2Njc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8c3NpemVfdHxpbnQpIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo1MDozMC4xNDkxNDIzNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxMDkwNzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQSBGb2N1c2VkIEFwcHJvYWNoKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBpbW1lZGlhdGVseSBlbmdhZ2Ugd2l0aCB0aGUgY29yZSBlbGVtZW50OiB0aGUgZmlsZSBpdHNlbGYuIFRoZXJlJ3Mgbm8gbmVlZCB0byBvdmVydGhpbmsgdGhlIHNpdHVhdGlvbiBvciBnZXQgYm9nZ2VkIGRvd24gaW4gYW5jaWxsYXJ5IGNvbmNlcm5zLiBMZXQncyBjdXQgdGhyb3VnaCB0aGUgbm9pc2UgYW5kIGRpcmVjdGx5IGFzc2VzcyB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24uIEp1bXBpbmcgc3RyYWlnaHQgaW50byB0aGUgZmlsZSBpcyB0aGUgbW9zdCBlZmZpY2llbnQgYW5kIHByYWN0aWNhbCBzdGFydGluZyBwb2ludC4gVGhhdCBpbml0aWFsIHNjYW4gYW5kIHBhcnNlIHdpbGwgaW5mb3JtIG15IHN1YnNlcXVlbnQgZXZhbHVhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE0OjUwOjM2Ljg2MDA1MzM0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYmluZm10X21pc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogYmluZm10X21pc2MuY1xcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEfDvG50aGVyXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogYmluZm10X21pc2MgZGV0ZWN0cyBiaW5hcmllcyB2aWEgYSBtYWdpYyBvciBmaWxlbmFtZSBleHRlbnNpb24gYW5kIGludm9rZXNcXG4gICA4OlxcdCAqIGEgc3BlY2lmaWVkIHdyYXBwZXIuIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FycmF5X3NpemUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpbmZtdHMuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jdHlwZS5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3N0cnRveC5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWdpYy5oXFx1MDAzZVxcbiAgMzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMzE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbiAgMzI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gIDMzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICAzNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMzY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NyY3UuaFxcdTAwM2VcXG4gIDM3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDM4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfaGVscGVycy5oXFx1MDAzZVxcbiAgMzk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gIDQwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXFx1MDAzZVxcbiAgNDE6XFx0XFxuICA0MjpcXHQjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0LyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqL1xcbiAgNDU6XFx0ZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHtcXG4gIDQ2OlxcdFxcdE1JU0NfRk1UX0VOQUJMRURfQklUXFx0PSAwLFxcbiAgNDc6XFx0XFx0TUlTQ19GTVRfTUFHSUNfQklUXFx0PSAxLFxcbiAgNDg6XFx0XFx0TUlTQ19GTVRfQlBGX0JJVFxcdD0gMixcXG4gIDQ5OlxcdH07XFxuICA1MDpcXHRcXG4gIDUxOlxcdC8qIEVudHJ5IGJlaGF2aW9yIGZsYWdzLCBmaXhlZCBhdCByZWdpc3RyYXRpb24gdGltZS4gKi9cXG4gIDUyOlxcdGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xcbiAgNTM6XFx0XFx0TUlTQ19GTVRfUFJFU0VSVkVfQVJHVjBcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAzMSksXFxuICA1NDpcXHRcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWVxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDMwKSxcXG4gIDU1OlxcdFxcdE1JU0NfRk1UX0NSRURFTlRJQUxTXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjkpLFxcbiAgNTY6XFx0XFx0TUlTQ19GTVRfT1BFTl9GSUxFXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjgpLFxcbiAgNTc6XFx0XFx0TUlTQ19GTVRfVFJBTlNQQVJFTlRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyNyksXFxuICA1ODpcXHRcXHRNSVNDX0ZNVF9MT0FERVJcXHRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyNiksXFxuICA1OTpcXHRcXHRNSVNDX0ZNVF9ESVNBQkxFRFxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDI1KSxcXG4gIDYwOlxcdH07XFxuICA2MTpcXHRcXG4gIDYyOlxcdC8qIFRoZSBmbGFncyB0aGF0IHNoYXBlIHRoZSBpbnZvY2F0aW9uOyBhICdCJyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqL1xcbiAgNjM6XFx0I2RlZmluZSBNSVNDX0ZNVF9JTlZPQ0FUSU9OX0ZMQUdTIChNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCB8XFx0XFxcXFxcbiAgNjQ6XFx0XFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFxcdFxcXFxcXG4gIDY1OlxcdFxcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX0NSRURFTlRJQUxTIHxcXHRcXFxcXFxuICA2NjpcXHRcXHRcXHRcXHRcXHQgICBNSVNDX0ZNVF9PUEVOX0ZJTEUgfFxcdFxcdFxcXFxcXG4gIDY3OlxcdFxcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX1RSQU5TUEFSRU5UIHxcXHRcXFxcXFxuICA2ODpcXHRcXHRcXHRcXHRcXHQgICBNSVNDX0ZNVF9MT0FERVIpXFxuICA2OTpcXHRcXG4gIDcwOlxcdC8qKlxcbiAgNzE6XFx0ICogc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgLSBhIGZsYWcgY2hhcmFjdGVyIG9mIHRoZSByZWdpc3RlciBzdHJpbmdcXG4gIDcyOlxcdCAqIEBjOiB0aGUgY2hhcmFjdGVyIHVzZXJzcGFjZSB3cml0ZXMgYW5kIHJlYWRzIGJhY2tcXG4gIDczOlxcdCAqIEBmbGFnOiB0aGUgZW50cnkgZmxhZyBpdCBzZXRzXFxuICA3NDpcXHQgKiBAaW1wbGllczogZW50cnkgZmxhZ3MgaXQgdHVybnMgb24gaW4gYWRkaXRpb25cXG4gIDc1OlxcdCAqIEBkZXNjOiB3aGF0IGl0IGRvZXMsIGZvciB0aGUgcmVnaXN0cmF0aW9uIGRlYnVnIG91dHB1dFxcbiAgNzY6XFx0ICovXFxuICA3NzpcXHRzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XFxuICA3ODpcXHRcXHRjaGFyXFx0XFx0YztcXG4gIDc5OlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRmbGFnO1xcbiAgODA6XFx0XFx0dW5zaWduZWQgbG9uZ1xcdGltcGxpZXM7XFxuICA4MTpcXHRcXHRjb25zdCBjaGFyXFx0KmRlc2M7XFxuICA4MjpcXHR9O1xcbiAgODM6XFx0XFxuICA4NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgbWlzY19mbGFnc1tdID0ge1xcbiAgODU6XFx0XFx0eyAnUCcsIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwLFxcdDAsXFx0XFx0XFx0XFxcInByZXNlcnZlIGFyZ3YwXFxcIlxcdFxcdH0sXFxuICA4NjpcXHRcXHR7ICdPJywgTUlTQ19GTVRfT1BFTl9CSU5BUlksXFx0MCxcXHRcXHRcXHRcXFwib3BlbiBiaW5hcnlcXFwiXFx0XFx0XFx0fSxcXG4gIDg3OlxcdFxcdHsgJ0MnLCBNSVNDX0ZNVF9DUkVERU5USUFMUyxcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWSxcXHRcXFwiY3JlZGVudGlhbHMgZnJvbSB0aGUgYmluYXJ5XFxcIlxcdH0sXFxuICA4ODpcXHRcXHR7ICdGJywgTUlTQ19GTVRfT1BFTl9GSUxFLFxcdDAsXFx0XFx0XFx0XFxcIm9wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcXFwiXFx0fSxcXG4gIDg5OlxcdFxcdHsgJ1QnLCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWSxcXHRcXFwidHJhbnNwYXJlbnRcXFwiXFx0XFx0XFx0fSxcXG4gIDkwOlxcdFxcdHsgJ0wnLCBNSVNDX0ZNVF9MT0FERVIsXFx0XFx0MCxcXHRcXHRcXHRcXFwibG9hZGVyIHN1YnN0aXR1dGlvblxcXCJcXHRcXHR9LFxcbiAgOTE6XFx0XFx0eyAnRCcsIE1JU0NfRk1UX0RJU0FCTEVELFxcdDAsXFx0XFx0XFx0XFxcInJlZ2lzdGVyIGRpc2FibGVkXFxcIlxcdFxcdH0sXFxuICA5MjpcXHR9O1xcbiAgOTM6XFx0XFxuICA5NDpcXHQvKiBMb29rIHVwIGEgZmxhZyBjaGFyYWN0ZXIsIE5VTEwgaWYgQGMgaXMgbm90IG9uZS4gKi9cXG4gIDk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1pc2NfZmxhZ3MpOyBpKyspXFxuICA5ODpcXHRcXHRcXHRpZiAobWlzY19mbGFnc1tpXS5jID09IGMpXFxuICA5OTpcXHRcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNm1pc2NfZmxhZ3NbaV07XFxuIDEwMDpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6MzYuODYwMjA2NzMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTgzODMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRvIHRoaXMuIEhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRGlnaXRhbCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJJ20gYXQgYSBwb2ludCBpbiB0aGlzIHByb2Nlc3Mgd2hlcmUgSSd2ZSBhbmFseXplZCBhIHNwZWNpZmljIHBhcnQsIGFuZCBpdCdzIHRpbWUgdG8gYnJvYWRlbiBteSBwZXJzcGVjdGl2ZS4gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgZWxlbWVudCwgYnV0IHRvIGJlIHRydWx5IHRob3JvdWdoLCBJIG5lZWQgdG8gem9vbSBvdXQuIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZVwiLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJJ20gbWVudGFsbHkgYnVpbGRpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBzbmlwcGV0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgb3ZlcmFsbCBkYXRhIHN0cnVjdHVyZSwgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgd2lkZXIgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRoZXJlIGNvdWxkIGJlIGNyaXRpY2FsIGNvbm5lY3Rpb25zIGFuZCBpbXBsaWNpdCBhc3N1bXB0aW9ucywgYWxsIG9mIHdoaWNoIG1pZ2h0IGJlIHJldmVhbGVkIHRocm91Z2ggYnJvYWRlciBjb250ZXh0LiBTbywgSSdsbCBiZSBnb2luZyB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRvIHNlZSBob3cgdGhpcyBhcmVhIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6NDEuOTE4NTkzOTcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzNDIzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9Nzc9c3RydWN0IGJpbmZtdF9taXNjX2ZsYWcge1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy04My1cXG5mcy9iaW5mbXRfbWlzYy5jOjg0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7XFxuZnMvYmluZm10X21pc2MuYy04NS1cXHR7ICdQJywgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAsXFx0MCxcXHRcXHRcXHRcXFwicHJlc2VydmUgYXJndjBcXFwiXFx0XFx0fSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtOTQtLyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXFxuZnMvYmluZm10X21pc2MuYzo5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgKm1pc2NfZmxhZ19ieV9jaGFyKGNvbnN0IGNoYXIgYylcXG5mcy9iaW5mbXRfbWlzYy5jLTk2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQwPURFRklORV9TVEFUSUNfU1JDVV9GQVNUKGJtX2VudHJpZXNfc3JjdSk7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0Mi0vKiBDaGVjayBpZiBAZSdzIG1hZ2ljIG1hdGNoZXMgQGJwcm0ncyBidWZmZXIsIGFwcGx5aW5nIHRoZSBtYXNrIGlmIHNldC4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjE0MzpzdGF0aWMgYm9vbCBlbnRyeV9tYXRjaGVzX21hZ2ljKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTgtLyogQ2hlY2sgaWYgQGUncyByZWdpc3RlcmVkIGV4dGVuc2lvbiBtYXRjaGVzIEBleHQsIE5VTEwgaWYgdGhlcmUgaXMgbm9uZS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjE1OTpzdGF0aWMgYm9vbCBlbnRyeV9tYXRjaGVzX2V4dGVuc2lvbihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy0xNjAtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmV4dClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTgxLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTgyOnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKlxcbmZzL2JpbmZtdF9taXNjLmMtMTgzLXNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTIzMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjIzMTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpnZXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMjMyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0yNDY9YmluZm10X21pc2NfZmluZF9pbnRlcnAoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaW50ZXJwcywgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjU2LS8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjI1NzpzdGF0aWMgdm9pZCBjbG9zZV9pbnRlcnBfZmlsZShzdHJ1Y3QgZmlsZSAqZilcXG5mcy9iaW5mbXRfbWlzYy5jLTI1OC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTI2NT1ERUZJTkVfRlJFRShjbG9zZV9pbnRlcnBfZmlsZSwgc3RydWN0IGZpbGUgKiwgY2xvc2VfaW50ZXJwX2ZpbGUoX1QpKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0yNzItICovXFxuZnMvYmluZm10X21pc2MuYzoyNzM6c3RhdGljIHN0cnVjdCBmaWxlICpvcGVuX2ludGVycF9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBjaGFyICpwYXRoKVxcbmZzL2JpbmZtdF9taXNjLmMtMjc0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjg0LS8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6Mjg1OnN0YXRpYyB2b2lkIGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtMjg2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzEzLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MzE0OnN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTMxNS1cXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzUxLVxcbmZzL2JpbmZtdF9taXNjLmM6MzUyOnN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmZzL2JpbmZtdF9taXNjLmMtMzUzLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzcwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MzcxOnN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuZnMvYmluZm10X21pc2MuYy0zNzIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0zODM9REVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzg1LS8qIERyb3AgZXZlcnl0aGluZyBhIGxvYWQgcHJvZ3JhbSBzdGFnZWQgZm9yIHRoaXMgZXhlYy4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjM4NjpzdGF0aWMgdm9pZCBkcm9wX3N0YWdlZF9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9iaW5mbXRfbWlzYy5jLTM4Ny17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQxMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjQxMTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXFxuZnMvYmluZm10X21pc2MuYy00MTIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy00MzctICovXFxuZnMvYmluZm10X21pc2MuYzo0Mzg6c3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy00MzktXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQ4OC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjQ4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTQ5MC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNTI3LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NTI4OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy01MjktXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNTcwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NTcxOnN0YXRpYyBpbnQgYnVpbGRfaW50ZXJwX2FyZ3Yoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqaW50ZXJwcmV0ZXIsXFxuZnMvYmluZm10X21pc2MuYy01NzItXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy02MjAtICovXFxuZnMvYmluZm10X21pc2MuYzo2MjE6c3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuZnMvYmluZm10X21pc2MuYy02MjIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy03MDItICovXFxuZnMvYmluZm10X21pc2MuYzo3MDM6c3RhdGljIGNoYXIgKnNjYW5hcmcoY2hhciAqcywgY2hhciBkZWwpXFxuZnMvYmluZm10X21pc2MuYy03MDQte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy03MjAtLyogUGFyc2UgdGhlICdmbGFncycgZmllbGQsIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBpcyBub3Qgb25lLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NzIxOnN0YXRpYyBjaGFyICpjaGVja19zcGVjaWFsX2ZsYWdzKGNoYXIgKnAsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTcyMi17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTczMy0vKiBQYXJzZSB0aGUgJ29mZnNldCcsICdtYWdpYycgYW5kICdtYXNrJyBmaWVsZHMgb2YgYW4gJ00nIGVudHJ5LiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NzM0OnN0YXRpYyBjaGFyICpwYXJzZV9tYWdpY19maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcXG5mcy9iaW5mbXRfbWlzYy5jLTczNS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTc5NC0vKiBQYXJzZSB0aGUgJ21hZ2ljJyBmaWVsZCBvZiBhbiAnRScgZW50cnk6IHRoZSBmaWxlbmFtZSBleHRlbnNpb24uICovXFxuZnMvYmluZm10X21pc2MuYzo3OTU6c3RhdGljIGNoYXIgKnBhcnNlX2V4dGVuc2lvbl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLFxcbmZzL2JpbmZtdF9taXNjLmMtNzk2LVxcdFxcdFxcdFxcdCAgICBjaGFyIGRlbClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtODI1LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6ODI2OnN0YXRpYyBjaGFyICpwYXJzZV9icGZfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXFxuZnMvYmluZm10X21pc2MuYy04Mjcte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy04NDctICovXFxuZnMvYmluZm10X21pc2MuYzo4NDg6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy04NDktXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xMDAxPWVudW0gYm1fY29tbWFuZCB7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEwMTQtICovXFxuZnMvYmluZm10X21pc2MuYzoxMDE1OnN0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpXFxuZnMvYmluZm10X21pc2MuYy0xMDE2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTAzMi0vKiBDb3B5IGluIGEgY29tbWFuZCBmcm9tIGEgZmlsZSB0aGF0IHRha2VzIG5vdGhpbmcgZWxzZSwgYW5kIHBhcnNlIGl0LiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTAzMzpzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXFxuZnMvYmluZm10X21pc2MuYy0xMDM0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTA0Ni0vKiBUaGUgcm9vdCBkaXJlY3RvcnkncyBpbm9kZTsgaXRzIGxvY2sgc2VyaWFsaXplcyBjb25maWd1cmluZyBhbiBpbnN0YW5jZS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEwNDc6c3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2JpbmZtdF9taXNjLmMtMTA0OC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTEtXFxuZnMvYmluZm10X21pc2MuYzoxMDUyOnN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpXFxuZnMvYmluZm10X21pc2MuYy0xMDUzLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTA1Ny1cXG5mcy9iaW5mbXRfbWlzYy5jOjEwNTg6c3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKVxcbmZzL2JpbmZtdF9taXNjLmMtMTA1OS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExMDctXFxuZnMvYmluZm10X21pc2MuYzoxMTA4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bW9kZV90IG1vZGUpXFxuZnMvYmluZm10X21pc2MuYy0xMTA5LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTEzMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExMzE6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqaV9iaW5mbXRfbWlzYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2JpbmZtdF9taXNjLmMtMTEzMi17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExNDgtKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExNDk6c3RhdGljIHZvaWQgYm1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTExNTAte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTc4LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTE3OTpzdGF0aWMgdm9pZCB1bmxpbmtfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMTE4MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTE5NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExOTU6c3RhdGljIHZvaWQgcmVtb3ZlX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG5mcy9iaW5mbXRfbWlzYy5jLTExOTYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyMDItLyogUmVtb3ZlIEBlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTIwMzpzdGF0aWMgdm9pZCBibV9yZW1vdmVfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2JpbmZtdF9taXNjLmMtMTIwNC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyMTQtLyogUmVtb3ZlIGFsbCBlbnRyaWVzIG9mIHRoZSBiaW5mbXRfbWlzYyBpbnN0YW5jZSBAbWlzYyBiZWxvbmdpbmcgdG8gQHNiLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTIxNTpzdGF0aWMgdm9pZCBibV9yZW1vdmVfYWxsX2VudHJpZXMoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMTIxNi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNDUtICovXFxuZnMvYmluZm10X21pc2MuYzoxMjQ2OnN0YXRpYyBpbnQgYm1fdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvYmluZm10X21pc2MuYy0xMjQ3LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTI1Ni1cXG5mcy9iaW5mbXRfbWlzYy5jOjEyNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJtX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTI1OC1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjYzLVxcbmZzL2JpbmZtdF9taXNjLmM6MTI2NDpzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvYmluZm10X21pc2MuYy0xMjY1LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTMwMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEzMDE6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuZnMvYmluZm10X21pc2MuYy0xMzAyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTM2MS1cXG5mcy9iaW5mbXRfbWlzYy5jOjEzNjI6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xMzYzLVxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDE5LVxcbmZzL2JpbmZtdF9taXNjLmM6MTQyMDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9lbnRyeV9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTQyMS1cXHQub3BlblxcdFxcdD0gYm1fZW50cnlfb3BlbixcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQzMC0vKiBhZGQgdG8gZmlsZXN5c3RlbSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTQzMTpzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmluZm10X21pc2MuYy0xNDMyLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ2MS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE0NjI6c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xNDYzLVxcdFxcdFxcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTUwMi1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1MDM6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE1MDQtXFx0LndyaXRlXFx0XFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTUwOS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1MTA6c3RhdGljIHNzaXplX3RcXG5mcy9iaW5mbXRfbWlzYy5jLTE1MTEtYm1fc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTUyMC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1MjE6c3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbmZzL2JpbmZtdF9taXNjLmMtMTUyMi1cXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTU0NC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fc3RhdHVzX29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNTQ2LVxcdC5yZWFkXFx0XFx0PSBibV9zdGF0dXNfcmVhZCxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTU1Mi1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJtX3N1cGVyX29wcyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTQtXFx0LnN0YXRmc1xcdFxcdD0gc2ltcGxlX3N0YXRmcyxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTU1Ny1cXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTg6c3RhdGljIGludCBibV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTkte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjMwLVxcbmZzL2JpbmZtdF9taXNjLmM6MTYzMTpzdGF0aWMgdm9pZCBibV9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE2MzIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjM2LVxcbmZzL2JpbmZtdF9taXNjLmM6MTYzNzpzdGF0aWMgaW50IGJtX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE2Mzgte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjQxLVxcbmZzL2JpbmZtdF9taXNjLmM6MTY0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBibV9jb250ZXh0X29wcyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDMtXFx0LmZyZWVcXHRcXHQ9IGJtX2ZyZWUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDYtXFxuZnMvYmluZm10X21pc2MuYzoxNjQ3OnN0YXRpYyB2b2lkIGJtX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDgte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjU0LVxcbmZzL2JpbmZtdF9taXNjLmM6MTY1NTpzdGF0aWMgaW50IGJtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvYmluZm10X21pc2MuYy0xNjU2LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY2MC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NjE6c3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgbWlzY19mb3JtYXQgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNjYyLVxcdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY2NS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NjY6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGJtX2ZzX3R5cGUgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNjY3LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE2NzM9TU9EVUxFX0FMSUFTX0ZTKFxcXCJiaW5mbXRfbWlzY1xcXCIpO1xcbmZzL2JpbmZtdF9taXNjLmMtMTY3NC1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NzU6c3RhdGljIGludCBfX2luaXQgaW5pdF9taXNjX2JpbmZtdCh2b2lkKVxcbmZzL2JpbmZtdF9taXNjLmMtMTY3Ni17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2ODItXFxuZnMvYmluZm10X21pc2MuYzoxNjgzOnN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X21pc2NfYmluZm10KHZvaWQpXFxuZnMvYmluZm10X21pc2MuYy0xNjg0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTQ6NTA6NDEuOTY2NDMzODY3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjE3MzQ0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmluRm10IE1pc2MgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIFwiZm9jdXMgc3ltYm9sc1wiIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIHdvdWxkIG1ha2UgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB0aG9zZSBhcmUgdGhlIG1vc3Qgc3RhYmxlIGFuZCBlYXNpbHkgYWNjZXNzaWJsZSBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIEluaXRpYWxseSwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCBjYXVnaHQgbXkgZXllLCBidXQgaXQncyBub3QgYSB0cnVlIEFQSSBlbnRyeSBwb2ludC4gVGhlbiBJIG5vdGljZWQgdGhhdCBgbG9hZF9taXNjX2JpbmFyeWAgKmlzKiBzdGF0aWMsIGJ1dCBpcyBhc3NpZ25lZCB0byBgbWlzY19mb3JtYXQubG9hZF9iaW5hcnlgLiBTaW1pbGFybHksIEkgc2F3IGBibV9yZWdpc3Rlcl93cml0ZWAgYXNzaWduZWQgdG8gYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMud3JpdGVgLCBgYm1fZW50cnlfd3JpdGVgIGFzc2lnbmVkIHRvIGBibV9lbnRyeV9vcGVyYXRpb25zLndyaXRlYCwgYW5kIGBibV9ldmljdF9pbm9kZWAgYXNzaWduZWQgdG8gYGJtX3N1cGVyX29wcy5ldmljdF9pbm9kZWAuIFRoZXNlIGFzc2lnbm1lbnRzLCBzcGVjaWZpY2FsbHkgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCBtYWRlIG1lIHJlYWxpemUgdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgcGxhY2VzIHRvIGZvY3VzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIG1vcmUgY2xvc2VseSwgaXQgc2VlbXMgdGhhdCBgbG9hZF9taXNjX2JpbmFyeWAgZG9lc24ndCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCwgbWVhbmluZyBpdCdzIGxlc3MgcmVsZXZhbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIGlzIGNhbGxlZCBieSBgYm1fZW50cnlfYWRkX2ludGVycGAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAsIHdoZXJlIGBibV9lbnRyeV9hZGRfaW50ZXJwYCBpcyBjYWxsZWQgYnkgYGJtX2VudHJ5X3dyaXRlYC4gIGBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzYCBpcyBjYWxsZWQgYnkgYHB1dF9iaW5mbXRfaGFuZGxlcmAsIHdoaWNoIGlzIGNhbGxlZCBieSBzZXZlcmFsIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBibV9lbnRyeV9mcmVlX3JjdWAsIGBsb2FkX21pc2NfYmluYXJ5YCwgYGNyZWF0ZV9lbnRyeWAsIGBibV9ldmljdF9pbm9kZWAsIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLlxuXG5BZnRlciB0aGlzLCBJIHJlLWV2YWx1YXRlZCBhbmQgZGVjaWRlZCB0aGF0IGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV93cml0ZWAsIGFuZCBgYm1fZXZpY3RfaW5vZGVgIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLCBob3dldmVyLCBzaW5jZSBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBgYm1fZW50cnlfd3JpdGVgIGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0dXJlLCB0aGV5IHdvbid0IGJlIGlubGluZWQuXG5cbk5vdywgbGV0J3MgbW92ZSBvbnRvIHRoZSBjb25maWd1cmF0aW9ucy4gIEkgY2hlY2tlZCBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGlkZW50aWZpZWQgYENPTkZJR19CSU5GTVRfTUlTQ2AgYW5kIGBDT05GSUdfVVNFUl9OU2AuIEhvd2V2ZXIsIGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19VU0VSX05TYCBhbmQgZGlzY292ZXJpbmcgaXQgZGVwZW5kcyBvbiBgTVVMVElVU0VSYCBhbmQgYE5BTUVTUEFDRVNgIGFuZCBzaW5jZSBgVVNFUl9OU2AgaXMgdXN1YWxseSBlbmFibGVkIGluIHN5emthbGxlciwgSSB3aWxsIGp1c3QgbGlzdCBgQklORk1UX01JU0NgIGFuZCBgVVNFUl9OU2AuXG5cbkRvdWJsZS1jaGVja2luZyBgZnMvS2NvbmZpZy5iaW5mbXRgIGZvciBgQklORk1UX01JU0NgIGNvbmZpcm1lZCBpdCBoYXMgbm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMuICBSZXZpZXdpbmcgYGtlcm5lbC91Y291bnQuY2AgZm9yIGBVQ09VTlRfQklORk1UX01JU0NfSU5URVJQUkVURVJTYCBzb2xpZGlmaWVzIHRoYXQgYEJJTkZNVF9NSVNDYCBpcyB0aGUgb25seSB0cnVseSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cblxuRmluYWxseSwgYSBxdWljayByZXZpZXcgb2YgdGhlIHBhdGNoJ3MgY29yZSBmdW5jdGlvbmFsaXR5OiBpdCdzIGFkZGluZyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCwgdXNpbmcgYGluY191Y291bnRgIGFuZCBgZGVjX3Vjb3VudGAgZm9yIHRoZSBjb3VudC4gVGhlIGxpbWl0IGl0c2VsZiBpcyBzZXQgdmlhIGAvcHJvYy9zeXMvdXNlci9tYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYC4gVGhlIHBhdGNoIHRvdWNoZXMgYGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcmAgdG8gY2hhcmdlIGFuZCBgZW50cnlfcHV0X2ludGVycHJldGVyc2AgdG8gdW5jaGFyZ2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHdvcnRoIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuLSBgYm1fcmVnaXN0ZXJfd3JpdGVgXG4tIGBibV9lbnRyeV93cml0ZWBcbi0gYGJtX2V2aWN0X2lub2RlYFxuXG5BbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOlxuLSBgQklORk1UX01JU0NgXG4tIGBVU0VSX05TYFxuXG5UaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjI0LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNDo1MToxOS4xODM3ODA5ODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDc0MDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIixcbiAgICBcIlVTRVJfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiLFxuICAgIFwiYm1fZW50cnlfd3JpdGVcIixcbiAgICBcImJtX2V2aWN0X2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgbGltaXQgYG1heF9iaW5mbXRfbWlzY19pbnRlcnByZXRlcnNgIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgcHJlLW9wZW5lZCBpbnRlcnByZXRlcnMgaW4gYGJpbmZtdF9taXNjYCB1c2luZyBgdWNvdW50c2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgYW5kIGBiaW5mbXRfbWlzY2AgZmlsZXN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB1bnByaXZpbGVnZWQgdXNlcnMgKGluIGEgdXNlciBuYW1lc3BhY2UpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0cmF0aW9uIGFuZCByZW1vdmFsIG9mIGBiaW5mbXRfbWlzY2AgZW50cmllcyB0byB0ZXN0IHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBvZiB0aGUgYnVkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCIsXG4gICAgXCJVU0VSX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIixcbiAgICBcImJtX2VudHJ5X3dyaXRlXCIsXG4gICAgXCJibV9ldmljdF9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIGxpbWl0IGBtYXhfYmluZm10X21pc2NfaW50ZXJwcmV0ZXJzYCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIHByZS1vcGVuZWQgaW50ZXJwcmV0ZXJzIGluIGBiaW5mbXRfbWlzY2AgdXNpbmcgYHVjb3VudHNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGFuZCBgYmluZm10X21pc2NgIGZpbGVzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgdW5wcml2aWxlZ2VkIHVzZXJzIChpbiBhIHVzZXIgbmFtZXNwYWNlKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBvZiBgYmluZm10X21pc2NgIGVudHJpZXMgdG8gdGVzdCB0aGUgY2hhcmdpbmcgYW5kIHVuY2hhcmdpbmcgb2YgdGhlIGJ1ZGdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[1] Phase: Succeeded StartedAt: 2026-08-03 14:51:38 +0000 UTC FinishedAt: 2026-08-03 14:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 14:51:38 +0000 UTC FinishedAt: 2026-08-03 14:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2] Phase: Succeeded StartedAt: 2026-08-03 14:51:38 +0000 UTC FinishedAt: 2026-08-03 18:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 14:51:38 +0000 UTC FinishedAt: 2026-08-03 18:33:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 14:51:38 +0000 UTC FinishedAt: 2026-08-03 14:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 14:51:38 +0000 UTC FinishedAt: 2026-08-03 14:51:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowwcmb9/series-workflowwcmb9-convert-artifact-1266639030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 14:51:48 +0000 UTC FinishedAt: 2026-08-03 15:09:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 14:51:48 +0000 UTC FinishedAt: 2026-08-03 15:09:22 +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:*a856886b-2aaa-4f48-a8a0-0ebed84bfff6,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-workflowwcmb9/series-workflowwcmb9-convert-artifact-1266639030/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": "b9504366-1694-45a9-92a7-86bcbd0d6901", "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-workflowwcmb9/series-workflowwcmb9-build-action-1188071372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 14:51:48 +0000 UTC FinishedAt: 2026-08-03 15:09:12 +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:*a856886b-2aaa-4f48-a8a0-0ebed84bfff6,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-workflowwcmb9/series-workflowwcmb9-convert-artifact-1266639030/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": "b9504366-1694-45a9-92a7-86bcbd0d6901", "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-workflowwcmb9/series-workflowwcmb9-build-action-1188071372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 15:09:22 +0000 UTC FinishedAt: 2026-08-03 15:09:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 15:09:22 +0000 UTC FinishedAt: 2026-08-03 15:09:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 15:09:22 +0000 UTC FinishedAt: 2026-08-03 15:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 15:09:22 +0000 UTC FinishedAt: 2026-08-03 15:09:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowwcmb9/series-workflowwcmb9-convert-artifact-3675187273/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 15:09:32 +0000 UTC FinishedAt: 2026-08-03 15:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 15:09:32 +0000 UTC FinishedAt: 2026-08-03 15:11:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9504366-1694-45a9-92a7-86bcbd0d6901,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-workflowwcmb9/series-workflowwcmb9-build-action-1188071372/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-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 15:11:48 +0000 UTC FinishedAt: 2026-08-03 15:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 15:11:48 +0000 UTC FinishedAt: 2026-08-03 15:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 15:11:48 +0000 UTC FinishedAt: 2026-08-03 15:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 15:11:48 +0000 UTC FinishedAt: 2026-08-03 15:29:05 +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:*a856886b-2aaa-4f48-a8a0-0ebed84bfff6,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-workflowwcmb9/series-workflowwcmb9-convert-artifact-3675187273/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": "34fdbf75-1ffb-4c13-add3-3263103a2099", "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-workflowwcmb9/series-workflowwcmb9-build-action-1293186853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 15:11:48 +0000 UTC FinishedAt: 2026-08-03 15:28: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:*a856886b-2aaa-4f48-a8a0-0ebed84bfff6,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-workflowwcmb9/series-workflowwcmb9-convert-artifact-3675187273/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": "34fdbf75-1ffb-4c13-add3-3263103a2099", "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-workflowwcmb9/series-workflowwcmb9-build-action-1293186853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 15:29:05 +0000 UTC FinishedAt: 2026-08-03 15:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 15:29:05 +0000 UTC FinishedAt: 2026-08-03 15:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 15:29:05 +0000 UTC FinishedAt: 2026-08-03 15:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 15:29:05 +0000 UTC FinishedAt: 2026-08-03 15:31:07 +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:*34fdbf75-1ffb-4c13-add3-3263103a2099,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-workflowwcmb9/series-workflowwcmb9-build-action-1293186853/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-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 18:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 18:33:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b9504366-1694-45a9-92a7-86bcbd0d6901,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34fdbf75-1ffb-4c13-add3-3263103a2099,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-workflowwcmb9/series-workflowwcmb9-build-action-1188071372/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-workflowwcmb9/series-workflowwcmb9-build-action-1293186853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 15:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 15:31:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwcmb9/series-workflowwcmb9-convert-artifact-2714195870/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 15:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 15:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 15:31:16 +0000 UTC FinishedAt: 2026-08-03 15:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 15:31:26 +0000 UTC FinishedAt: 2026-08-03 18:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcmb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bm_register_write","bm_entry_write","bm_evict_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8996fed3e53f53216f36183f6b6539846bc15a67","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","USER_NS"],"series_id":"75b41f5f-4701-4c21-8d3e-498ebcabe79f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 15:31:26 +0000 UTC FinishedAt: 2026-08-03 18:33:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9504366-1694-45a9-92a7-86bcbd0d6901,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34fdbf75-1ffb-4c13-add3-3263103a2099,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-workflowwcmb9/series-workflowwcmb9-build-action-1188071372/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-workflowwcmb9/series-workflowwcmb9-build-action-1293186853/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-workflowwcmb9/series-workflowwcmb9-convert-artifact-2714195870/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,}