Name: series-workflowqbkhv Phase: Succeeded StartedAt: 2026-09-14 21:31:24 +0000 UTC FinishedAt: 2026-09-15 02:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[0] Phase: Succeeded StartedAt: 2026-09-14 21:31:24 +0000 UTC FinishedAt: 2026-09-14 22:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 21:31:24 +0000 UTC FinishedAt: 2026-09-14 22:27:47 +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": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "5b179425-8a67-407f-81c4-cddd025c0305" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__d_alloc", "d_move", "d_exchange" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "f5d607b8091438d8416d0e3ae02532a18539b48b", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfbW92ZSYjMzQ7LAogICAgJiMzNDtkX2V4Y2hhbmdlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBWRlMgY29kZSBpbiBfX2RfYWxsb2MoKSB0byBmdWxseSB6ZXJvIHRoZSBpbmxpbmUgZGVudHJ5IHNob3J0bmFtZSBidWZmZXIgd2l0aCBtZW1zZXQoKSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvcGFnYXRpb24gYW5kIGRhdGEgcmFjZXMgZHVyaW5nIHJlbmFtZSAoY29weV9uYW1lL3N3YXBfbmFtZXMpIGFuZCBsb2NrbGVzcyBSQ1UgbG9va3VwLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByZWdyZXNzaW9ucywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9ycyBpbiBkZW50cnkgYWxsb2NhdGlvbiBhbmQgcmVuYW1pbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOGMzM2Y0MGFhMWE0NWIyYzZlMTNmYTRhNDI2ZDE5ZWJkNzVkNjU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xuaW5kZXggMWIxYTgxZjEwZGE2Ny4uNzMwNTcxZTkyYWY4MSAxMDA2NDRcbi0tLSBhL2ZzL2RjYWNoZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kY2FjaGUuY1xuQEAgLTE5MTAsMTIgJiM0MzsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbiYjNDM7XHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbiYjNDM7XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuJiM0MztcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4mIzQzO1x0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXG4mIzQzO1x0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXG4mIzQzO1x0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXG4mIzQzO1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuJiM0MztcdG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbiBcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbiBcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4gXHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZF9hbGxvYyYjMzQ7LAogICAgJiMzNDtkX21vdmUmIzM0OywKICAgICYjMzQ7ZF9leGNoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBWRlMgY29kZSBpbiBfX2RfYWxsb2MoKSB0byBmdWxseSB6ZXJvIHRoZSBpbmxpbmUgZGVudHJ5IHNob3J0bmFtZSBidWZmZXIgd2l0aCBtZW1zZXQoKSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvcGFnYXRpb24gYW5kIGRhdGEgcmFjZXMgZHVyaW5nIHJlbmFtZSAoY29weV9uYW1lL3N3YXBfbmFtZXMpIGFuZCBsb2NrbGVzcyBSQ1UgbG9va3VwLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByZWdyZXNzaW9ucywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9ycyBpbiBkZW50cnkgYWxsb2NhdGlvbiBhbmQgcmVuYW1pbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOGMzM2Y0MGFhMWE0NWIyYzZlMTNmYTRhNDI2ZDE5ZWJkNzVkNjU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjczMDU3MWU5MmFmODEgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4KLQkgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lCi0JICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0Ci0JICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlcgomIzQzOwkgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmQKJiM0MzsJICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnkKJiM0MzsJICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmQKJiM0MzsJICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lCiYjNDM7CSAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lCiYjNDM7CSAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLAomIzQzOwkgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuCiAJICovCi0JZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7CiYjNDM7CW1lbXNldChkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQluYW1lID0gJmFtcDtzbGFzaF9uYW1lOwogCQlkbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogRGVudHJ5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSBpbiBgZnMvZGNhY2hlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgcmVwbGFjZW1lbnQgb2YgYSBkaXJlY3QgYXNzaWdubWVudCB3aXRoIGBtZW1zZXRgIG9uIHRoZSBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGJ1ZmZlci4gVGhlIG9sZCBjb21tZW50IG1lbnRpb25lZCBOVUwtdGVybWluYXRpb24gZm9yIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZS4gTm93LCB3aXRoIHRoaXMgbmV3IGFwcHJvYWNoLCB0aGUgY29tbWVudCBzdWdnZXN0cyBhIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuIFRoZSByZWFzb25pbmcgcG9pbnRzIHRvIGBjb3B5X25hbWUoKWAgYW5kIGBzd2FwX25hbWVzKClgIGNvcHlpbmcgdGhlIGBkX3Nob3J0bmFtZWAgZW50aXJlbHkuIEFueSB1bmluaXRpYWxpemVkIHBhcnRzIGNvdWxkIHRoZW4gcHJvcGFnYXRlLiBBbHNvLCBkdXJpbmcgcmVuYW1lIG9wZXJhdGlvbnMsIGBfX2RfbG9va3VwX3JjdSgpYCBtaWdodCB0cmFuc2llbnRseSByZWFkIGJ5dGVzIGZyb20gdGhlIGlubGluZSBuYW1lIHdoaWxlIGl0IGlzIGJlaW5nIHJld3JpdHRlbi4gVGhpcyBtYWtlcyBzZW5zZS4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHNvbWUgbW9yZSBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayB0aGUgR2l0IGxvZyB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBtYXliZSBzb21lIG1vcmUgZXhwbGFuYXRpb25zIGFyb3VuZCB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxOTEwLiBJIHNob3VsZCBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBmaWxlJiMzOTtzIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZSB0byBnZXQgYSBiZXR0ZXIgZmVlbCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gQW5kLCBmaW5hbGx5LCBJJiMzOTtsbCBwcm9iYWJseSBjYWxsIGByZWFkLWZpbGVgIG9uIGBmcy9kY2FjaGUuY2AgYXJvdW5kIGxpbmUgMTkxMCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSBgbWVtc2V0YCBpcyBwcmVmZXJyZWQgbm93IG92ZXIgdGhlIHNpbXBsZSBOVUwgdGVybWluYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5NTpcdCAqXG4xODk2Olx0ICogQWxsb2NhdGVzIGEgZGVudHJ5LiBJdCByZXR1cm5zICVOVUxMIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudCBtZW1vcnlcbjE4OTc6XHQgKiBhdmFpbGFibGUuIE9uIGEgc3VjY2VzcyB0aGUgZGVudHJ5IGlzIHJldHVybmVkLiBUaGUgbmFtZSBwYXNzZWQgaW4gaXNcbjE4OTg6XHQgKiBjb3BpZWQgYW5kIHRoZSBjb3B5IHBhc3NlZCBpbiBtYXkgYmUgcmV1c2VkIGFmdGVyIHRoaXMgY2FsbC5cbjE4OTk6XHQgKi9cbjE5MDA6XHQgXG4xOTAxOlx0c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbjE5MDI6XHR7XG4xOTAzOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4xOTA0Olx0XHRjaGFyICpkbmFtZTtcbjE5MDU6XHRcdGludCBlcnI7XG4xOTA2Olx0XG4xOTA3Olx0XHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSxcbjE5MDg6XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuMTkwOTpcdFx0aWYgKCFkZW50cnkpXG4xOTEwOlx0XHRcdHJldHVybiBOVUxMO1xuMTkxMTpcdFxuMTkxMjpcdFx0LypcbjE5MTM6XHRcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuMTkxNDpcdFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbjE5MTU6XHRcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4xOTE2Olx0XHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbjE5MTc6XHRcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4xOTE4Olx0XHQgKlxuMTkxOTpcdFx0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbjE5MjA6XHRcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuMTkyMTpcdFx0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuMTkyMjpcdFx0ICovXG4xOTIzOlx0XHRtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XG4xOTI0Olx0XHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4xOTI1Olx0XHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuMTkyNjpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTI3Olx0XHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbjE5Mjg6XHRcdFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XG4xOTI5Olx0XG4xOTMwOlx0XHRcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXHUwMDNlbGVuICYjNDM7IDEsXG4xOTMxOlx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xuMTkzMjpcdFx0XHRpZiAoIXApIHtcbjE5MzM6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcbjE5MzQ6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MzU6XHRcdFx0fVxuMTkzNjpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlY291bnQsIDEpO1xuMTkzNzpcdFx0XHRkbmFtZSA9IHAtXHUwMDNlbmFtZTtcbjE5Mzg6XHRcdH0gZWxzZSAge1xuMTkzOTpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTQwOlx0XHR9XHRcbjE5NDE6XHRcbjE5NDI6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDM6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0NDpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgZGVudHJ5YCBTaG9ydG5hbWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgaG93IHRoZSBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGJ1ZmZlciBpcyBpbml0aWFsaXplZC4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBvbmx5IHRoZSBsYXN0IGJ5dGUgd2FzIGV4cGxpY2l0bHkgemVyb2VkIChgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCksIGJ1dCBub3cgdGhlIGVudGlyZSBidWZmZXIgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGlzc3VlcyBsaWtlIEtNU0FOL2RhdGEgcmFjZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGxlYWRpbmcgdG8gaW5mbyBsZWFrcywgZXNwZWNpYWxseSBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgX19kX2xvb2t1cF9yY3VgIGR1cmluZyByZW5hbWVzLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmcgd2l0aCBzeXprYWxsZXI/ICBMZXQmIzM5O3MgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4KClRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmUuIFdlJiMzOTtyZSB0b3VjaGluZyBgZnMvZGNhY2hlLmNgLCB3aGljaCBpcyBjb3JlIFZGUyBkY2FjaGUgc3Vic3lzdGVtIGNvZGUuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fZF9hbGxvY2AuICBGcm9tIHRoZSBmaXJzdCBnbGFuY2UsIHRoZSBjaGFuZ2UgaW4gYF9fZF9hbGxvY2AgaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtLiBJdCBkb2VzbiYjMzk7dCBmYWxsIGludG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIOKAkyBpdCYjMzk7cyBub3QgZG9jdW1lbnRhdGlvbiwgbm90IHVzZXJzcGFjZSwgbm90IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBkcml2ZXIgdGVhcmRvd24uICBTbywgYmFzZWQgb24gdGhlIGhpZ2gtbGV2ZWwgY3JpdGVyaWEsIEkmIzM5O2Qgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpCdXQgbGV0JiMzOTtzIG5vdCBqdW1wIHRoZSBndW4uIFNlY3Rpb24gNCBpcyBjcnVjaWFsIOKAkyBwcmV2ZW50aW5nIGRpbHV0aW9uLiAgV2UgbmVlZCB0byBleHRyYWN0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXMgYEZvY3VzU3ltYm9sc2AuIFRoZSBrZXkgaGVyZSBpcyB0byAqYXZvaWQqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gSXMgYF9fZF9hbGxvY2Agb3IgYGRfYWxsb2NgIGEgZ2VuZXJpYywgdWJpcXVpdG91cyBtZW1vcnkgYWxsb2NhdG9yIG9yIHNvbWV0aGluZyBlbHNlIHRoYXQmIzM5O3MgY2FsbGVkIGV2ZXJ5d2hlcmU/IFByb2JhYmx5ISAgVGhlIGlzc3VlIGZvY3VzZXMgb24gdGhlIGRlbnRyeSBuYW1lLiBUaGUgY29tbWVudCBjbGVhcmx5IG1lbnRpb25zIHRoZSBjb25jZXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgX19kX2xvb2t1cF9yY3VgLiBTbywgdGhvc2UgZnVuY3Rpb25zIG9yIHRoZWlyIGNhbGxlcnMgYXJlIHByb2JhYmx5IG1vcmUgcmVsZXZhbnQgYXMgZm9jdXMgc3ltYm9scyB0aGFuIGBfX2RfYWxsb2NgIG9uIGl0cyBvd24uIEl0IG1lbnRpb25zIHRoYXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYCBjb3B5IHRoZSBlbnRpcmUgZF9zaG9ydG5hbWUsIGFuZCB0aGF0IGBfX2RfbG9va3VwX3JjdWAgbWF5IHJlYWQgdW5pbml0aWFsaXplZCBieXRlcyB3aGVuIHJlbmFtZSgpIHJld3JpdGVzIGluIHBsYWNlLgoKSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCBgZnMvZGNhY2hlLmNgIGZvciBgY29weV9uYW1lYCBhbmQgYHN3YXBfbmFtZXNgIHRvIHVuZGVyc3RhbmQgd2hhdCBjYWxscyB0aGVtIGFuZCBpZiB0aGV5IGFyZSBnb29kIGZvY3VzIHN5bWJvbHMuICBJIGFsc28gbmVlZCB0byBzZWUgd2hhdCBgX19kX2FsbG9jYCBkb2VzLCBvciB3aGF0IGNhbGxzIGBkX2FsbG9jYC4gTXkgaHVuY2ggaXMgdGhhdCBsaXN0aW5nIG9ubHkgYF9fZF9hbGxvY2AgbWlnaHQgYmUgdG9vIGJyb2FkOyB3ZSB3YW50IHRoZSBtb3JlIHNwZWNpZmljIGVudHJ5cG9pbnRzIHRvIHRoZSBsb2dpYyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIFRoZSBmdXp6aW5nIGVmZm9ydCBuZWVkcyB0byB0YXJnZXQgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBkZW50cnkgc2hvcnRuYW1lIGluaXRpYWxpemF0aW9uIGFuZCBpdHMgdXNhZ2UgZHVyaW5nIGNvcHlpbmcsIHN3YXBwaW5nLCBvciBsb29rdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGNvcHlfbmFtZXxzd2FwX25hbWVzKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9kY2FjaGUuYy0xOTEyLVx0LypcbmZzL2RjYWNoZS5jOjE5MTM6XHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbmZzL2RjYWNoZS5jOjE5MTQ6XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuZnMvZGNhY2hlLmMtMTkxNS1cdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4tLVxuZnMvZGNhY2hlLmM9Mjk5Mj1FWFBPUlRfU1lNQk9MKGRfbWFrZV9wZXJzaXN0ZW50KTtcbmZzL2RjYWNoZS5jLTI5OTMtXG5mcy9kY2FjaGUuYzoyOTk0OnN0YXRpYyB2b2lkIHN3YXBfbmFtZXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG5mcy9kY2FjaGUuYy0yOTk1LXtcbi0tXG5mcy9kY2FjaGUuYy0zMDMxLVxuZnMvZGNhY2hlLmM6MzAzMjpzdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG5mcy9kY2FjaGUuYy0zMDMzLXtcbi0tXG5mcy9kY2FjaGUuYz0zMDYwPXN0YXRpYyB2b2lkIF9fZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0LFxuLS1cbmZzL2RjYWNoZS5jLTMxMDgtXHRpZiAoIWV4Y2hhbmdlKSB7XG5mcy9kY2FjaGUuYzozMTA5Olx0XHRjb3B5X25hbWUoZGVudHJ5LCB0YXJnZXQpO1xuZnMvZGNhY2hlLmMtMzExMC1cdFx0dGFyZ2V0LVx1MDAzZWRfaGFzaC5wcHJldiA9IE5VTEw7XG4tLVxuZnMvZGNhY2hlLmMtMzExNS1cdFx0dGFyZ2V0LVx1MDAzZWRfcGFyZW50ID0gb2xkX3BhcmVudDtcbmZzL2RjYWNoZS5jOjMxMTY6XHRcdHN3YXBfbmFtZXMoZGVudHJ5LCB0YXJnZXQpO1xuZnMvZGNhY2hlLmMtMzExNy1cdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ0YXJnZXQtXHUwMDNlZF9zaWIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgRmlsZSBTeXN0ZW0gTmFtaW5nIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBzb21lIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgZmlsZSBzeXN0ZW0gaGFuZGxlcyBuYW1lcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgc3dhcF9uYW1lc2AsIGBjb3B5X25hbWVgLCBhbmQgdGhhdCBpbnRyaWd1aW5nIGBfX2RfbW92ZWAgZnVuY3Rpb24uIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byByZW5hbWluZyBvciBtb3ZpbmcgZGlyZWN0b3J5IGVudHJpZXMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgZnVuZGFtZW50YWwgYW5kIG9mdGVuIHBlcmZvcm1hbmNlLWNyaXRpY2FsIG9wZXJhdGlvbnMgd2l0aGluIGEgZmlsZSBzeXN0ZW0uIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgYmVoYXZpb3IuCgpTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGV4YW1pbmluZyBgc3dhcF9uYW1lc2AgYW5kIGBjb3B5X25hbWVgIGluIGBmcy9kY2FjaGUuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCB0aGVzZSB3aWxsIHByb3ZpZGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIsIGFuZCBJJiMzOTtsbCBsaWtlbHkgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIHN0cmF0ZWdpZXMsIGFuZCBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcgYW5kIHdoYXQgaGFwcGVucyBpZiB0aGVzZSBvcGVyYXRpb25zIGZhaWwgbWlkd2F5LiBUaGlzIGluaXRpYWwgYW5hbHlzaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk5NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTk0Olx0c3RhdGljIHZvaWQgc3dhcF9uYW1lcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcbjI5OTU6XHR7XG4yOTk2Olx0XHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwodGFyZ2V0KSkpIHtcbjI5OTc6XHRcdFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKGRlbnRyeSkpKSB7XG4yOTk4Olx0XHRcdFx0LypcbjI5OTk6XHRcdFx0XHQgKiBCb3RoIGV4dGVybmFsOiBzd2FwIHRoZSBwb2ludGVyc1xuMzAwMDpcdFx0XHRcdCAqL1xuMzAwMTpcdFx0XHRcdHN3YXAodGFyZ2V0LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lKTtcbjMwMDI6XHRcdFx0fSBlbHNlIHtcbjMwMDM6XHRcdFx0XHQvKlxuMzAwNDpcdFx0XHRcdCAqIGRlbnRyeTppbnRlcm5hbCwgdGFyZ2V0OmV4dGVybmFsLiAgU3RlYWwgdGFyZ2V0JiMzOTtzXG4zMDA1Olx0XHRcdFx0ICogc3RvcmFnZSBhbmQgbWFrZSB0YXJnZXQgaW50ZXJuYWwuXG4zMDA2Olx0XHRcdFx0ICovXG4zMDA3Olx0XHRcdFx0ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZTtcbjMwMDg6XHRcdFx0XHR0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWU7XG4zMDA5Olx0XHRcdFx0dGFyZ2V0LVx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuMzAxMDpcdFx0XHR9XG4zMDExOlx0XHR9IGVsc2Uge1xuMzAxMjpcdFx0XHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpIHtcbjMwMTM6XHRcdFx0XHQvKlxuMzAxNDpcdFx0XHRcdCAqIGRlbnRyeTpleHRlcm5hbCwgdGFyZ2V0OmludGVybmFsLiAgR2l2ZSBkZW50cnkmIzM5O3NcbjMwMTU6XHRcdFx0XHQgKiBzdG9yYWdlIHRvIHRhcmdldCBhbmQgbWFrZSBkZW50cnkgaW50ZXJuYWxcbjMwMTY6XHRcdFx0XHQgKi9cbjMwMTc6XHRcdFx0XHR0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lO1xuMzAxODpcdFx0XHRcdGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZSA9IHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZTtcbjMwMTk6XHRcdFx0XHRkZW50cnktXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4zMDIwOlx0XHRcdH0gZWxzZSB7XG4zMDIxOlx0XHRcdFx0LypcbjMwMjI6XHRcdFx0XHQgKiBCb3RoIGFyZSBpbnRlcm5hbC5cbjMwMjM6XHRcdFx0XHQgKi9cbjMwMjQ6XHRcdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpJiM0MzsmIzQzOylcbjMwMjU6XHRcdFx0XHRcdHN3YXAoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLndvcmRzW2ldLFxuMzAyNjpcdFx0XHRcdFx0ICAgICB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0pO1xuMzAyNzpcdFx0XHR9XG4zMDI4Olx0XHR9XG4zMDI5Olx0XHRzd2FwKGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoX2xlbiwgdGFyZ2V0LVx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuKTtcbjMwMzA6XHR9XG4zMDMxOlx0XG4zMDMyOlx0c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuMzAzMzpcdHtcbjMwMzQ6XHRcdHN0cnVjdCBleHRlcm5hbF9uYW1lICpvbGRfbmFtZSA9IE5VTEw7XG4zMDM1Olx0XHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpXG4zMDM2Olx0XHRcdG9sZF9uYW1lID0gZXh0ZXJuYWxfbmFtZShkZW50cnkpO1xuMzAzNzpcdFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKHRhcmdldCkpKSB7XG4zMDM4Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2ZXh0ZXJuYWxfbmFtZSh0YXJnZXQpLVx1MDAzZWNvdW50KTtcbjMwMzk6XHRcdFx0ZGVudHJ5LVx1MDAzZV9fZF9uYW1lID0gdGFyZ2V0LVx1MDAzZV9fZF9uYW1lO1xuMzA0MDpcdFx0fSBlbHNlIHtcbjMwNDE6XHRcdFx0ZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lID0gdGFyZ2V0LVx1MDAzZWRfc2hvcnRuYW1lO1xuMzA0MjpcdFx0XHRkZW50cnktXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4zMDQzOlx0XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoX2xlbiA9IHRhcmdldC1cdTAwM2VfX2RfbmFtZS5oYXNoX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDMwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOYW1lIFN3YXBwaW5nIGluIHRoZSBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuYW1lIGhhbmRsaW5nIGNvZGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIHNuaXBwZXRzOiBgY29weV9uYW1lYCwgc3BlY2lmaWNhbGx5IHRoZSBsaW5lIHdoZXJlIGBkZW50cnktJmd0O2Rfc2hvcnRuYW1lYCBnZXRzIGFzc2lnbmVkIGZyb20gYHRhcmdldC0mZ3Q7ZF9zaG9ydG5hbWVgLCBhbmQgdGhlbiB0aGUgYHN3YXBfbmFtZXNgIGZ1bmN0aW9uLCB3aGVyZSB0aGVyZSYjMzk7cyB0aGF0IHN3YXAgb3BlcmF0aW9uIGhhcHBlbmluZyBkaXJlY3RseSBiZXR3ZWVuIGBkZW50cnktJmd0O2Rfc2hvcnRuYW1lYCBhbmQgYHRhcmdldC0mZ3Q7ZF9zaG9ydG5hbWVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhYm91dCBvcHRpbWl6aW5nIG5hbWUgaGFuZGxpbmcsIG1heWJlIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNvcGllcy4gVGhlIGNvcmUgbG9naWMgaGluZ2VzIG9uIHdoZXJlIGBfX2RfbW92ZWAgaXMgYWN0dWFsbHkgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIGFuZCB3aGF0JiMzOTtzIGRyaXZpbmcgdGhpcyBuYW1pbmcgc3RyYXRlZ3kuIFRpbWUgdG8gc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBtYXAgaXRzIGNhbGxlcnMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggYGRlbnRyeWAgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kX21vdmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMtNDYtICogc19yb290c19sb2NrIHByb3RlY3RzOlxuZnMvZGNhY2hlLmM6NDc6ICogICAtIHRoZSBzX3Jvb3RzIGxpc3QgKHNlZSBfX2RfbW92ZSgpL2RlbnRyeV91bmxpc3QoKS9kX29idGFpbl9yb290KCkpXG5mcy9kY2FjaGUuYy00OC0gKiBkZW50cnktXHUwMDNlZF9zYi1cdTAwM2VzX2RlbnRyeV9scnVfbG9jayBwcm90ZWN0czpcbi0tXG5mcy9kY2FjaGUuYz0zMDMyPXN0YXRpYyB2b2lkIGNvcHlfbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcbi0tXG5mcy9kY2FjaGUuYy0zMDU5LSAqL1xuZnMvZGNhY2hlLmM6MzA2MDpzdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcbmZzL2RjYWNoZS5jLTMwNjEtXHRcdCAgICAgYm9vbCBleGNoYW5nZSlcbi0tXG5mcy9kY2FjaGUuYz0zMTU0PXZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuLS1cbmZzL2RjYWNoZS5jLTMxNTYtXHR3cml0ZV9zZXFsb2NrKFx1MDAyNnJlbmFtZV9sb2NrKTtcbmZzL2RjYWNoZS5jOjMxNTc6XHRfX2RfbW92ZShkZW50cnksIHRhcmdldCwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMzE1OC1cdHdyaXRlX3NlcXVubG9jayhcdTAwMjZyZW5hbWVfbG9jayk7XG4tLVxuZnMvZGNhY2hlLmM9MzE2Nz12b2lkIGRfZXhjaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5MSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5Milcbi0tXG5mcy9kY2FjaGUuYy0zMTc1LVxuZnMvZGNhY2hlLmM6MzE3NjpcdF9fZF9tb3ZlKGRlbnRyeTEsIGRlbnRyeTIsIHRydWUpO1xuZnMvZGNhY2hlLmMtMzE3Ny1cbi0tXG5mcy9kY2FjaGUuYz0zMjEwPXN0YXRpYyBpbnQgX19kX3VuYWxpYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICphbGlhcylcbi0tXG5mcy9kY2FjaGUuYy0zMjMwLVx0XHRnb3RvIG91dF9lcnI7XG5mcy9kY2FjaGUuYzozMjMxOlx0X19kX21vdmUoYWxpYXMsIGRlbnRyeSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMzIzMi1cdGlmIChhbGlhcy1cdTAwM2VkX29wIFx1MDAyNlx1MDAyNiBhbGlhcy1cdTAwM2VkX29wLVx1MDAzZWRfdW5hbGlhc191bmxvY2spXG4tLVxuZnMvZGNhY2hlLmM9MzI0Mz1zdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2RjYWNoZS5jLTMyODctXHRcdFx0XHR9XG5mcy9kY2FjaGUuYzozMjg4Olx0XHRcdFx0X19kX21vdmUobmV3LCBkZW50cnksIGZhbHNlKTtcbmZzL2RjYWNoZS5jLTMyODktXHRcdFx0XHR3cml0ZV9zZXF1bmxvY2soXHUwMDI2cmVuYW1lX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBkY2FjaGUuYyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgYG1lbXNldGAgaW50cm9kdWN0aW9uLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBmdXp6YWJpbGl0eSAqZmlyc3QqLiBMZXQmIzM5O3Mgc3RpY2sgdG8gdGhlIGZ1enppbmcgY3JpdGVyaWEuIEkgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBndWlkZWxpbmVzLgoKUmVhZGluZyB0aGUgZ3VpZGVsaW5lcyBjYXJlZnVsbHksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhYm91dCByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvZGNhY2hlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGlzIGlzIHBhcnQgb2YgdGhlIFZGUyBkY2FjaGUgc3Vic3lzdGVtLCBzbyBkZWZpbml0ZWx5ICpub3QqIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3Igb3RoZXIgbmVnYXRpdmUgY3JpdGVyaWEuIFNpbmNlIHRoZSBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSwgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gdGhlcmVmb3JlIGNvbmNsdWRlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgbmV4dCBwYXJ0IGlzIGFib3V0IGlkZW50aWZ5aW5nICpGb2N1c1N5bWJvbHMqIHRvIHByZXZlbnQgZGlsdXRpb24gb2YgZnV6emluZyBlZmZvcnQuIFRoZSBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGFuZCBpbnN0ZWFkIGZvY3VzIG9uIGVudHJ5cG9pbnRzIG9yIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byB0aGUgbG9naWMgYmVpbmcgYWx0ZXJlZC4gTm93LCBgX19kX2FsbG9jYCBpdHNlbGYgaXMgcG90ZW50aWFsbHkgdWJpcXVpdG91cywgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiAqZXZlcnkqIHBhdGggcmVzb2x1dGlvbiBhbmQgZmlsZSBjcmVhdGlvbi4gSG93ZXZlciwgdGhlIHBhdGNoJiMzOTtzIGNvbW1lbnQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCByZW5hbWUgb3BlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aG9zZS4gSSBhbSBnb2luZyB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggd291bGQgaW5kaWNhdGUgdGhleSBhcmUgaW50ZXJuYWwsIGFuZCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgbG9naWMgY2hhbmdlZCBoZXJlLgoKT2theSwgSSBjb25maXJtZWQgdGhhdCBgY29weV9uYW1lYCBhbmQgYHN3YXBfbmFtZXNgIGFyZSBgc3RhdGljYCBmdW5jdGlvbnMgaW4gYGZzL2RjYWNoZS5jYC4gQW5kIGBfX2RfbW92ZWAgY2FsbHMgYGRfbW92ZWAgYW5kIGBkX2V4Y2hhbmdlYCB3aGljaCBpbiB0dXJuIGFyZSBjYWxsZWQgYnkgdGhlIGByZW5hbWVgIHN5c2NhbGwuCgpTbyBJIHRoaW5rIHRoZSAqZm9jdXMgc3ltYm9scyogc2hvdWxkIGJlOgoKYF9fZF9hbGxvY2AsIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgZF9tb3ZlYCwgb3IgYHJlbmFtZWAgaWYgcG9zc2libGUuIFRoaXMgc2hvdWxkIGhlbHAgZGlyZWN0IHRoZSBmdXp6ZXIgdG8gdGhlIGFmZmVjdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHByZXZlbnQgaXQgZnJvbSBmb2N1c2luZyBvbiBnZW5lcmljIG1lbW9yeSBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoZF9tb3ZlfGRfZXhjaGFuZ2UpXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jPTg2ND12OWZzX3Zmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi0tXG5mcy85cC92ZnNfaW5vZGUuYy05NDktXHRcdC8qIHN1Y2Nlc3NmdWwgcmVuYW1lICovXG5mcy85cC92ZnNfaW5vZGUuYzo5NTA6XHRcdGRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbmZzLzlwL3Zmc19pbm9kZS5jLTk1MS1cdH1cbi0tXG5mcy9hZnMvZGlyLmM9MTg4OD1zdGF0aWMgdm9pZCBhZnNfcmVuYW1lX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTk1My1cbmZzL2Fmcy9kaXIuYzoxOTU0Olx0ZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuZnMvYWZzL2Rpci5jLTE5NTUtXG4tLVxuZnMvYWZzL2Rpci5jPTE5NjI9c3RhdGljIHZvaWQgYWZzX3JlbmFtZV9leGNoYW5nZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpci5jLTE5ODQtXG5mcy9hZnMvZGlyLmM6MTk4NTpcdFx0ZF9leGNoYW5nZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbmZzL2Fmcy9kaXIuYy0xOTg2LVx0XHR1cF93cml0ZShcdTAwMjZvcmlnX2R2bm9kZS1cdTAwM2V2YWxpZGF0ZV9sb2NrKTtcbi0tXG5mcy9hZnMvZGlyLmMtMjAxNy1cbmZzL2Fmcy9kaXIuYzoyMDE4Olx0XHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuZnMvYWZzL2Rpci5jLTIwMTktXHRcdHVwX3dyaXRlKFx1MDAyNm5ld19kdm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTExMT1pbnQgYWZzX3NpbGx5cmVuYW1lKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE0OS1cdFx0c2V0X2JpdChBRlNfVk5PREVfU0lMTFlfREVMRVRFRCwgXHUwMDI2dm5vZGUtXHUwMDNlZmxhZ3MpO1xuZnMvYWZzL2Rpcl9zaWxseS5jOjE1MDpcdFx0ZF9tb3ZlKGRlbnRyeSwgc2RlbnRyeSk7XG5mcy9hZnMvZGlyX3NpbGx5LmMtMTUxLVx0XHRicmVhaztcbi0tXG5mcy9jZXBoL2Rpci5jPTE0ODE9c3RhdGljIGludCBjZXBoX3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2NlcGgvZGlyLmMtMTU0Mi1cdFx0LypcbmZzL2NlcGgvZGlyLmM6MTU0MzpcdFx0ICogTm9ybWFsbHkgZF9tb3ZlKCkgaXMgZG9uZSBieSBmaWxsX3RyYWNlIChjYWxsZWQgYnlcbmZzL2NlcGgvZGlyLmMtMTU0NC1cdFx0ICogZG9fcmVxdWVzdCwgYWJvdmUpLiAgSWYgdGhlcmUgaXMgbm8gdHJhY2UsIHdlIG5lZWRcbi0tXG5mcy9jZXBoL2Rpci5jLTE1NDYtXHRcdCAqL1xuZnMvY2VwaC9kaXIuYzoxNTQ3Olx0XHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XG5mcy9jZXBoL2Rpci5jLTE1NDgtXHR9XG4tLVxuZnMvY2VwaC9pbm9kZS5jPTE1OTM9aW50IGNlcGhfZmlsbF90cmFjZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2VwaF9tZHNfcmVxdWVzdCAqcmVxKVxuLS1cbmZzL2NlcGgvaW5vZGUuYy0xNzg4LVxuZnMvY2VwaC9pbm9kZS5jOjE3ODk6XHRcdFx0ZF9tb3ZlKHJlcS1cdTAwM2VyX29sZF9kZW50cnksIGRuKTtcbmZzL2NlcGgvaW5vZGUuYy0xNzkwLVx0XHRcdGRvdXRjKGNsLCBcJiMzNDsgc3JjICVwICYjMzk7JXBkJiMzOTsgZHN0ICVwICYjMzk7JXBkJiMzOTtcXG5cJiMzNDssXG4tLVxuZnMvZF9wYXRoLmM9NTc9c3RhdGljIGJvb2wgcHJlcGVuZChzdHJ1Y3QgcHJlcGVuZF9idWZmZXIgKnAsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG5hbWVsZW4pXG4tLVxuZnMvZF9wYXRoLmMtODMtICpcbmZzL2RfcGF0aC5jOjg0OiAqIFdpdGggUkNVIHBhdGggdHJhY2luZywgaXQgbWF5IHJhY2Ugd2l0aCBkX21vdmUoKS4gVXNlIFJFQURfT05DRSgpIHRvXG5mcy9kX3BhdGguYy04NS0gKiBtYWtlIHN1cmUgdGhhdCBlaXRoZXIgdGhlIG9sZCBvciB0aGUgbmV3IG5hbWUgcG9pbnRlciBhbmQgbGVuZ3RoIGFyZVxuLS1cbmZzL2RfcGF0aC5jLTg5LSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5hbWUuIFRoZSBzZXF1ZW5jZSBudW1iZXIgY2hlY2sgYXQgdGhlIGNhbGxlciB3aWxsXG5mcy9kX3BhdGguYzo5MDogKiByZXRyeSBpdCBhZ2FpbiB3aGVuIGEgZF9tb3ZlKCkgZG9lcyBoYXBwZW4uIFNvIGFueSBnYXJiYWdlIGluIHRoZSBidWZmZXJcbmZzL2RfcGF0aC5jLTkxLSAqIGR1ZSB0byBtaXNtYXRjaGVkIHBvaW50ZXIgYW5kIGxlbmd0aCB3aWxsIGJlIGRpc2NhcmRlZC5cbi0tXG5mcy9kY2FjaGUuYy00Ni0gKiBzX3Jvb3RzX2xvY2sgcHJvdGVjdHM6XG5mcy9kY2FjaGUuYzo0NzogKiAgIC0gdGhlIHNfcm9vdHMgbGlzdCAoc2VlIF9fZF9tb3ZlKCkvZGVudHJ5X3VubGlzdCgpL2Rfb2J0YWluX3Jvb3QoKSlcbmZzL2RjYWNoZS5jLTQ4LSAqIGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfZGVudHJ5X2xydV9sb2NrIHByb3RlY3RzOlxuLS1cbmZzL2RjYWNoZS5jPTI0NzQ9c3RydWN0IGRlbnRyeSAqX19kX2xvb2t1cF9yY3UoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2RjYWNoZS5jLTI0OTctXHQgKiBDYXJlZnVsbHkgdXNlIGRfc2VxIHdoZW4gY29tcGFyaW5nIGEgY2FuZGlkYXRlIGRlbnRyeSwgdG8gYXZvaWRcbmZzL2RjYWNoZS5jOjI0OTg6XHQgKiByYWNlcyB3aXRoIGRfbW92ZSgpLlxuZnMvZGNhY2hlLmMtMjQ5OS1cdCAqXG4tLVxuZnMvZGNhY2hlLmM9MjU5Mj1zdHJ1Y3QgZGVudHJ5ICpfX2RfbG9va3VwKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMjYxMC1cdCAqIFRha2UgZF9sb2NrIHdoZW4gY29tcGFyaW5nIGEgY2FuZGlkYXRlIGRlbnRyeSwgdG8gYXZvaWQgcmFjZXNcbmZzL2RjYWNoZS5jOjI2MTE6XHQgKiB3aXRoIGRfbW92ZSgpLlxuZnMvZGNhY2hlLmMtMjYxMi1cdCAqXG4tLVxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG4tLVxuZnMvZGNhY2hlLmMtMzA1OS0gKi9cbmZzL2RjYWNoZS5jOjMwNjA6c3RhdGljIHZvaWQgX19kX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQsXG5mcy9kY2FjaGUuYy0zMDYxLVx0XHQgICAgIGJvb2wgZXhjaGFuZ2UpXG4tLVxuZnMvZGNhY2hlLmMtMzEyNy1cdGZzbm90aWZ5X3VwZGF0ZV9mbGFncyhkZW50cnkpO1xuZnMvZGNhY2hlLmM6MzEyODpcdGZzY3J5cHRfaGFuZGxlX2RfbW92ZShkZW50cnkpO1xuZnMvZGNhY2hlLmMtMzEyOS1cbi0tXG5mcy9kY2FjaGUuYy0zMTUzLSAqL1xuZnMvZGNhY2hlLmM6MzE1NDp2b2lkIGRfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcbmZzL2RjYWNoZS5jLTMxNTUte1xuZnMvZGNhY2hlLmMtMzE1Ni1cdHdyaXRlX3NlcWxvY2soXHUwMDI2cmVuYW1lX2xvY2spO1xuZnMvZGNhY2hlLmM6MzE1NzpcdF9fZF9tb3ZlKGRlbnRyeSwgdGFyZ2V0LCBmYWxzZSk7XG5mcy9kY2FjaGUuYy0zMTU4LVx0d3JpdGVfc2VxdW5sb2NrKFx1MDAyNnJlbmFtZV9sb2NrKTtcbi0tXG5mcy9kY2FjaGUuYz0zMTYwPUVYUE9SVF9TWU1CT0woZF9tb3ZlKTtcbi0tXG5mcy9kY2FjaGUuYy0zMTY2LSAqL1xuZnMvZGNhY2hlLmM6MzE2Nzp2b2lkIGRfZXhjaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5MSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5MilcbmZzL2RjYWNoZS5jLTMxNjgte1xuLS1cbmZzL2RjYWNoZS5jLTMxNzUtXG5mcy9kY2FjaGUuYzozMTc2Olx0X19kX21vdmUoZGVudHJ5MSwgZGVudHJ5MiwgdHJ1ZSk7XG5mcy9kY2FjaGUuYy0zMTc3LVxuLS1cbmZzL2RjYWNoZS5jPTMyMTA9c3RhdGljIGludCBfX2RfdW5hbGlhcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKmFsaWFzKVxuLS1cbmZzL2RjYWNoZS5jLTMyMzAtXHRcdGdvdG8gb3V0X2VycjtcbmZzL2RjYWNoZS5jOjMyMzE6XHRfX2RfbW92ZShhbGlhcywgZGVudHJ5LCBmYWxzZSk7XG5mcy9kY2FjaGUuYy0zMjMyLVx0aWYgKGFsaWFzLVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGFsaWFzLVx1MDAzZWRfb3AtXHUwMDNlZF91bmFsaWFzX3VubG9jaylcbi0tXG5mcy9kY2FjaGUuYz0zMjQzPXN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZGNhY2hlLmMtMzI4Ny1cdFx0XHRcdH1cbmZzL2RjYWNoZS5jOjMyODg6XHRcdFx0XHRfX2RfbW92ZShuZXcsIGRlbnRyeSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMzI4OS1cdFx0XHRcdHdyaXRlX3NlcXVubG9jayhcdTAwMjZyZW5hbWVfbG9jayk7XG4tLVxuZnMvZGNhY2hlLmM9MzM0NT1ib29sIGlzX3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTMzNTItXG5mcy9kY2FjaGUuYzozMzUzOlx0LyogQWNjZXNzIGRfcGFyZW50IHVuZGVyIHJjdSBhcyBkX21vdmUoKSBtYXkgY2hhbmdlIGl0LiAqL1xuZnMvZGNhY2hlLmMtMzM1NC1cdHJjdV9yZWFkX2xvY2soKTtcbi0tXG5mcy9kZWJ1Z2ZzL2lub2RlLmM9ODI0PWludCBfX3ByaW50ZigyLCAzKSBkZWJ1Z2ZzX2NoYW5nZV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuZnMvZGVidWdmcy9pbm9kZS5jLTg2Mi1cdHNpbXBsZV9yZW5hbWVfdGltZXN0YW1wKGRpciwgZGVudHJ5LCBkaXIsIHJkLm5ld19kZW50cnkpO1xuZnMvZGVidWdmcy9pbm9kZS5jOjg2MzpcdGRfbW92ZShkZW50cnksIHJkLm5ld19kZW50cnkpO1xuZnMvZGVidWdmcy9pbm9kZS5jLTg2NC1cdGZzbm90aWZ5X21vdmUoZGlyLCBkaXIsIFx1MDAyNm9sZF9uYW1lLm5hbWUsIGRfaXNfZGlyKGRlbnRyeSksIE5VTEwsIGRlbnRyeSk7XG4tLVxuZnMvZXhmYXQvbmFtZWkuYz03MjU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4ZmF0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4ZmF0L25hbWVpLmMtNzYxLVx0XHQgKi9cbmZzL2V4ZmF0L25hbWVpLmM6NzYyOlx0XHRkX21vdmUoYWxpYXMsIGRlbnRyeSk7XG5mcy9leGZhdC9uYW1laS5jLTc2My1cdFx0aXB1dChpbm9kZSk7XG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYz02OTg9c3RhdGljIHN0cnVjdCBkZW50cnkgKnZmYXRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYy03MzgtXHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuZnMvZmF0L25hbWVpX3ZmYXQuYzo3Mzk6XHRcdFx0ZF9tb3ZlKGFsaWFzLCBkZW50cnkpO1xuZnMvZmF0L25hbWVpX3ZmYXQuYy03NDAtXHRcdGlwdXQoaW5vZGUpO1xuLS1cbmZzL25hbWVpLmM9NjE2OD1pbnQgdmZzX3JlbmFtZShzdHJ1Y3QgcmVuYW1lZGF0YSAqcmQpXG4tLVxuZnMvbmFtZWkuYy02MzE1LVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSlcbmZzL25hbWVpLmM6NjMxNjpcdFx0XHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XG5mcy9uYW1laS5jLTYzMTctXHRcdGVsc2VcbmZzL25hbWVpLmM6NjMxODpcdFx0XHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuZnMvbmFtZWkuYy02MzE5LVx0fVxuLS1cbmZzL25mcy9kaXIuYz0yNzgwPWludCBuZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvbmZzL2Rpci5jLTI4ODAtXHRcdC8qXG5mcy9uZnMvZGlyLmM6Mjg4MTpcdFx0ICogVGhlIGRfbW92ZSgpIHNob3VsZCBiZSBoZXJlIGluc3RlYWQgb2YgaW4gYW4gYXN5bmMgUlBDIGNvbXBsZXRpb25cbmZzL25mcy9kaXIuYy0yODgyLVx0XHQgKiBoYW5kbGVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgcHJvcGVyIGxvY2tzIHRvIG1vdmUgdGhlIGRlbnRyeS4gIElmXG4tLVxuZnMvbmZzL2Rpci5jLTI4ODUtXHRcdCAqL1xuZnMvbmZzL2Rpci5jOjI4ODY6XHRcdGRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbmZzL25mcy9kaXIuYy0yODg3LVx0XHRuZnNfc2V0X3ZlcmlmaWVyKG9sZF9kZW50cnksXG4tLVxuZnMvbmZzL3VubGluay5jPTQ0Mz1uZnNfc2lsbHlyZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9uZnMvdW5saW5rLmMtNTE3LVx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuZnMvbmZzL3VubGluay5jOjUxODpcdFx0ZF9tb3ZlKGRlbnRyeSwgc2RlbnRyeSk7XG5mcy9uZnMvdW5saW5rLmMtNTE5LVx0XHRicmVhaztcbi0tXG5mcy9vY2ZzMi9kY2FjaGUuYz0zNzk9c3RhdGljIHZvaWQgb2NmczJfZGVudHJ5X2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL29jZnMyL2RjYWNoZS5jLTQxMC0vKlxuZnMvb2NmczIvZGNhY2hlLmM6NDExOiAqIGRfbW92ZSgpLCBidXQga2VlcCB0aGUgbG9ja3MgaW4gc3luYy5cbmZzL29jZnMyL2RjYWNoZS5jLTQxMi0gKlxuLS1cbmZzL29jZnMyL2RjYWNoZS5jLTQyNC0gKlxuZnMvb2NmczIvZGNhY2hlLmM6NDI1OiAqIE5vcm1hbGx5LCB0aGUgVkZTIGhhbmRsZXMgdGhlIGRfbW92ZSgpIGZvciB0aGUgZmlsZSBzeXN0ZW0sIGFmdGVyXG5mcy9vY2ZzMi9kY2FjaGUuYy00MjYtICogdGhlIC1cdTAwM2VyZW5hbWUoKSBjYWxsYmFjay4gT0NGUzIgd2FudHMgdG8gaGFuZGxlIHRoaXMgaW50ZXJuYWxseSwgc29cbi0tXG5mcy9vY2ZzMi9kY2FjaGUuYz00Mjk9dm9pZCBvY2ZzMl9kZW50cnlfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcbi0tXG5mcy9vY2ZzMi9kY2FjaGUuYy00NTItb3V0X21vdmU6XG5mcy9vY2ZzMi9kY2FjaGUuYzo0NTM6XHRkX21vdmUoZGVudHJ5LCB0YXJnZXQpO1xuZnMvb2NmczIvZGNhY2hlLmMtNDU0LX1cbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE1MS1cdFx0ICogSWYgZF9zcGxpY2VfYWxpYXMoKSBmaW5kcyBhIERDQUNIRV9ESVNDT05ORUNURURcbmZzL29jZnMyL25hbWVpLmM6MTUyOlx0XHQgKiBkZW50cnksIGl0IHdpbGwgZF9tb3ZlKCkgaXQgb24gdG9wIG9mIG91cnNlLiBUaGVcbmZzL29jZnMyL25hbWVpLmMtMTUzLVx0XHQgKiByZXR1cm4gdmFsdWUgd2lsbCBpbmRpY2F0ZSB0aGlzIGhvd2V2ZXIsIHNvIGluXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI0NDg9Y2lmc19kb19yZW5hbWUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZnJvbV9kZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTI1MjItXHRpZiAocmMgPT0gMClcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoyNTIzOlx0XHRkX21vdmUoZnJvbV9kZW50cnksIHRvX2RlbnRyeSk7XG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMjUyNC1cdGNpZnNfcHV0X3RsaW5rKHRsaW5rKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBEaXJlY3QgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiB0byBgX19kX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMuIEl04oCZcyBjcml0aWNhbCB0byBrbm93IHRoZSBzY29wZSBvZiBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhlIGRlbnRyeSBjYWNoZS4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGxpbmUgMTkwMS4uLiBZZXAsIGl0ICppcyogZGVjbGFyZWQgc3RhdGljOiBgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbiAqY291bGQqIGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIGBmcy9kY2FjaGUuY2AsIGJ1dCBpdCYjMzk7cyBtb3JlIGxvY2FsaXplZCB0aGFuIGlmIGl0IHdlcmUgYSBnbG9iYWwgb3IgZXhwb3J0ZWQgZnVuY3Rpb24uIE5vdywgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBtb2RpZmljYXRpb24sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgX19kX2FsbG9jYCB3aXRoaW4gYGZzL2RjYWNoZS5jYC4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgY2FsbGluZyB0aGlzIHRoaW5nIGFuZCBob3cuIFRpbWUgdG8gZGlnIGludG8gdGhvc2UgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTg4OT1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7XG4tLVxuZnMvZGNhY2hlLmMtMTkwMC0gXG5mcy9kY2FjaGUuYzoxOTAxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTAyLXtcbi0tXG5mcy9kY2FjaGUuYz0xOTg5PXN0cnVjdCBkZW50cnkgKmRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTkwLXtcbmZzL2RjYWNoZS5jOjE5OTE6XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMTk5Mi1cdGlmICghZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9kY2FjaGUuYy0yMDA4LXtcbmZzL2RjYWNoZS5jOjIwMDk6XHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcbmZzL2RjYWNoZS5jLTIwMTAtfVxuLS1cbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMjA0Mi1cdH07XG5mcy9kY2FjaGUuYzoyMDQzOlx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHNiLCBuYW1lKTtcbmZzL2RjYWNoZS5jLTIwNDQtXHRpZiAobGlrZWx5KGRlbnRyeSkpIHtcbi0tXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2RjYWNoZS5jLTI3NzAtXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcbmZzL2RjYWNoZS5jOjI3NzE6XHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMjc3Mi1cdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6ZXI6IEEgRGVlcCBEaXZlIGludG8gZGVudHJ5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyBmdXp6ZXIgcnVuLiBUaGUgZ29hbCBpcyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgc3BlY2lmaWMgY2hhbmdlIG1hZGUgYnkgdGhpcyBwYXRjaCwgd2hpY2ggaXMgYWJvdXQgaW5pdGlhbGl6aW5nIHRoZSBgZF9zaG9ydG5hbWVgIGJ1ZmZlciBvZiBhIGBkZW50cnlgLiBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWM6IEkgbmVlZCB0byBhdm9pZCAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGFuZCBpbnN0ZWFkIHRhcmdldCAmIzM0O3NwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiYjMzQ7CgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYF9fZF9hbGxvY2AgKGNhbGxlZCBieSBgZF9hbGxvY2AgYW5kIG90aGVycykgc2VlbXMgbGlrZSBhIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gQnV0IGFtIEkgcmlnaHQ/IElzIGBfX2RfYWxsb2NgIG9uZSBvZiB0aG9zZSBnZW5lcmljLCB1YmlxdWl0b3VzIHRoaW5ncyB0aGUgcHJvbXB0IGlzIHdhcm5pbmcgbWUgYWJvdXQ/IExldCYjMzk7cyBjaGVjayB0aGUgcGF0Y2g6IGl0IHplcm9lcyB0aGUgc2hvcnRuYW1lIGJ1ZmZlciBkdXJpbmcgZGVudHJ5IGFsbG9jYXRpb24gdXNpbmcgYG1lbXNldGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBlZmZvcnQgaXMgd2VsbC1kaXJlY3RlZCBieSBwcm92aWRpbmcgdGhlIGNvcnJlY3QgYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHBhdGNoIHdhcyB3cml0dGVuLiBSZWFkaW5nIHRocm91Z2ggdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgdnVsbmVyYWJpbGl0eSBjb25jZXJucyBob3cgbmFtZSBjb3BpZXMgZHVyaW5nIGByZW5hbWVgIG9wZXJhdGlvbnMgbWlnaHQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpc3N1ZXMgd2l0aCBgS01TQU5gIG9yIGBLQVNBTmAuIEVzc2VudGlhbGx5LCBpZiB0aGUgYGRlbnRyeWAgaGFzIGEgc2hvcnQgbmFtZSB0aGF0JiMzOTtzIG5vdCBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgYGRfc2hvcnRuYW1lLnN0cmluZ2AgaXMgemVyby1pbml0aWFsaXplZCB3aXRoIGBtZW1zZXRgLCB0byBwcmV2ZW50IEtNU0FOIHJlcG9ydHMgb3IgbGVha2FnZS4KClNvLCB0aGUgaXNzdWUgaXMgYWJvdXQgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBpbiBgX19kX2FsbG9jYC4gVGhlIGNvbW1lbnQgbGlzdHMgYGNvcHlfbmFtZWAsIGBzd2FwX25hbWVzYCwgYW5kIGBfX2RfbG9va3VwX3JjdWAgYXMgcmVsYXRlZCBmdW5jdGlvbnMgd2hlcmUgdGhpcyBpbml0aWFsaXphdGlvbiBtYXR0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgd29uZGVyaW5nIGlmIGBfX2RfYWxsb2NgIGlzIHViaXF1aXRvdXMuIElzIGl0IGNhbGxlZCBieSBFVkVSWSBwcm9ncmFtLCBhbmQgd2lsbCBpdCBkaWx1dGUgbXkgZWZmb3J0cz8gTm8sIGBfX2RfYWxsb2NgIGlzIG5vdCBhIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvciBsaWtlIGBrbWFsbG9jYCBhbmQgYGtmcmVlYC4gSXQmIzM5O3MgYSBzcGVjaWZpYyBWRlMgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGxpdGVyYWxseSB0aGUgZnVuY3Rpb24gdGhhdCAqd2FzIG1vZGlmaWVkKiBpbiB0aGUgcGF0Y2guIFRoZSBvdGhlciBvcGVyYXRpb25zIGFyZSByZWxhdGVkIHRvIGRlbnRyeSBtYW5pcHVsYXRpb246IGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGBfX2RfbG9va3VwX3JjdWAgYW5kIGBkX21vdmVgIG9yIGBkX2V4Y2hhbmdlYCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB5b3UgcmVuYW1lIG9yIG1vdmUgZmlsZXMuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCBhZ2FpbjogJiMzNDtMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQmIzM0Oy4gQWhhISBUaGUgKm9ubHkqIGZ1bmN0aW9uIG1vZGlmaWVkIGluIHRoZSBwYXRjaCBpcyBgX19kX2FsbG9jYC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBoYWQgYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO2AgYW5kIG5vdyBpdCYjMzk7cyBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0IHNlZW1zIHZlcnkgc3BlY2lmaWMuIFRoZXJlZm9yZSwgYF9fZF9hbGxvY2AgKm11c3QqIGJlIGluY2x1ZGVkLiBUaGF0IHNlZW1zIGxpa2UgYSBuby1icmFpbmVyLiBUaGlzIGNoYW5nZSBpcyBkaXJlY3RseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVzZS1vZi11bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgYGRlbnRyeWAuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGUgY2hhbmdlLiBgX19kX2FsbG9jYCBpc24mIzM5O3QgYSAqZ2VuZXJhbCogbWVtb3J5IGFsbG9jYXRvci4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgYWxsb2NhdGVzIGRlbnRyaWVzIHdpdGhpbiB0aGUgZGNhY2hlLCBhbmQgaXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIHBhdGNoIGhhcyBtb2RpZmllZC4gCgpXaGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlPyBgZF9tb3ZlYCwgYGRfZXhjaGFuZ2VgLCBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgIGFuZCBgX19kX2xvb2t1cF9yY3VgPyBUaG9zZSBhcmUgYWxsIG9wZXJhdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBkZW50cnkgc2hvcnQgbmFtZSBhbmQgdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgYW0gSSB0cnlpbmcgdG8gcmVwcm9kdWNlIGEgY3Jhc2ggZHVyaW5nIGEgbW92ZSBvcGVyYXRpb24gb3IgYSBsb29rdXA/IFRoZSBwYXRjaCYjMzk7cyAqZ29hbCogaXMgdG8gcHJldmVudCBwcm9ibGVtcyBpbiB0aG9zZSBsYXRlciBvcGVyYXRpb25zLiBUaGVyZWZvcmUsIHBlcmhhcHMgaW5jbHVkaW5nIHRoZXNlIGlzIHVzZWZ1bCB0byB2ZXJpZnkgdGhlIG92ZXJhbGwgZml4LgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgaXQgZnJvbSBhbm90aGVyIGFuZ2xlOiB0aGUgZ29hbCBpcyB0byAqdGVzdCogd2hldGhlciB0aGlzIGNoYW5nZSAodGhlIGBtZW1zZXRgKSAqd29ya3MqLiBTeXprYWxsZXIgY2FuIHRlc3QgYWxsIHRoZSBvcGVyYXRpb25zIHRvIHNlZSBpZiBpdCBmaXhlcyBLTVNBTiByZXBvcnRzLiBTbywgaW5jbHVkaW5nIGBfX2RfYWxsb2NgLCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBwYXRjaCYjMzk7cyBjZW50cmFsIG1vZGlmaWNhdGlvbi4gSXQgaXMgdGhlIHRhcmdldC4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBhZGQgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGUgdW5pbml0aWFsaXplZCBuYW1lOiBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgLCBgX19kX2xvb2t1cF9yY3VgLCBgZF9tb3ZlYCwgYW5kIGBkX2V4Y2hhbmdlYCB0byBlbnN1cmUgYWxsIHBhdGhzIGFyZSB2ZXJpZmllZC4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBmdW5jdGlvbnMsIHdoaWNoIGhhdmUgcHJldmlvdXNseSByZXBvcnRlZCBLTVNBTiBpc3N1ZXMsIGFyZSBub3cgc2FmZS4KClNvLCBnaXZlbiB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jYCBkaXJlY3RseSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBfX2RfYWxsb2NgLCBhbG9uZyB3aXRoIHJlbGF0ZWQgb3BlcmF0aW9ucyBsaWtlIGBkX21vdmVgLCBhbmQgYGRfZXhjaGFuZ2VgIGFyZSB0aGUgbW9zdCByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEROQU1FX0lOTElORV9MRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU5MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGBETkFNRV9JTkxJTkVfTEVOYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdmFsdWUgb2YgYEROQU1FX0lOTElORV9MRU5gLiBUaGlzIHZhcmlhYmxlIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIHNvbWUgb3B0aW1pemF0aW9uIG9yIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGlzIGNvZGUsIGp1ZGdpbmcgZnJvbSBpdHMgbmFtZS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBsaWtlbHkgYSBjb25zdGFudCB0aGF0IGRlZmluZXMgc29tZSBsaW1pdCBvciBsZW5ndGgsIEkgc3VzcGVjdCBpdCYjMzk7cyB1c2VkIGluIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIHBlcmhhcHMgaW4gaGFuZGxpbmcgaW5saW5lIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIEROUyBuYW1lcy4gCgpNeSBpbW1lZGlhdGUgc3RyYXRlZ3kgaXMgdG8gdXNlIHRoZSBmdWxsIHRleHQgc2VhcmNoIHRvIHRyYWNrIGl0IGRvd24gYWNyb3NzIHRoZSBlbnRpcmUgY29kZSBiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGRlZmluaXRpb24sIHdoaWNoIGxpa2VseSB1c2VzIGEgYCNkZWZpbmVgIG9yIGEgYGNvbnN0YCBkZWNsYXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgKndoZXJlKiBpdCYjMzk7cyBkZWZpbmVkIGFuZCAqaG93KiBpdCYjMzk7cyB1c2VkLiBUaGlzIG1pZ2h0IGludm9sdmUgZGl2aW5nIGludG8gaGVhZGVyIGZpbGVzLCBtYWNybyBkZWZpbml0aW9ucywgYW5kIHRoZW4gdHJhY2luZyB0aG9zZSB1c2VzIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMuCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNvbnN0YW50IGluZmx1ZW5jZXMgYnVmZmVyIHNpemVzLCBsb29wIGJvdW5kYXJpZXMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgY29udGV4dCBhcm91bmQgaXRzIHVzYWdlIHdpbGwgcHJvdmlkZSBjbHVlcyBhcyB0byB3aGF0IGl0JiMzOTtzIG9wdGltaXppbmcuIFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaXQgaW5mbHVlbmNlcyBhbmQgd2hlcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbnMgY291bGQgYmUgcmVhbGl6ZWQuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIG91dCB0byB1bmRlcnN0YW5kIHRoZSAqbWVhbmluZyogb2YgYEROQU1FX0lOTElORV9MRU5gIGluIHRoaXMgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ROQU1FX0lOTElORV9MRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTY1PWV4dGVybiBjb25zdCBzdHJ1Y3QgcXN0ciBkb3Rkb3RfbmFtZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTgxLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaDo4MjojZGVmaW5lIEROQU1FX0lOTElORV9MRU4gKEROQU1FX0lOTElORV9XT1JEUypzaXplb2YodW5zaWduZWQgbG9uZykpXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTgzLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD04ND11bmlvbiBzaG9ydG5hbWVfc3RvcmUge1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaDo4NTpcdHVuc2lnbmVkIGNoYXIgc3RyaW5nW0ROQU1FX0lOTElORV9MRU5dO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC04Ni1cdHVuc2lnbmVkIGxvbmcgd29yZHNbRE5BTUVfSU5MSU5FX1dPUkRTXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwOTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERlbnRyeSBTaG9ydG5hbWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nYCBoYXMgYSBmaXhlZCBzaXplLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGlzIGRlZmluZWQgYnkgYEROQU1FX0lOTElORV9MRU5gLiBUaGUgc3Vic2VxdWVudCBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IHplcm9pbmcgb3V0IHRoZSBlbnRpcmUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hvcnQgbmFtZSBzdHJpbmcuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uLCBjbGVhbmluZyB1cCBsZWZ0b3ZlciBkYXRhLiAKCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBLY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyBjb2RlIHBhdGguIFNpbmNlIHRoaXMgc2VlbXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGRlbnRyeSBvcGVyYXRpb25zLCBhbmQgYGZzL2RjYWNoZS5jYCBpcyBwYXJ0IG9mIGNvcmUgVkZT4oCUSSBhbHJlYWR5IGtub3cgaXQmIzM5O3MgY29tcGlsZWQgYXMgcGFydCBvZiBgZGNhY2hlLm9gIGZyb20gbG9va2luZyBhdCB0aGUgYGZzL01ha2VmaWxlYCAtIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2hvdWxkIGJlIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIEkgdGhpbmsgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAgaXRzZWxmIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGFsd2F5cyBpbmNsdWRlZCBvciBkZXBlbmRzIG9uIHNvbWUgc3VidGxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGNhY2hlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuZnMvTWFrZWZpbGUtMTEtXHRcdGNoYXJfZGV2Lm8gc3RhdC5vIGV4ZWMubyBwaXBlLm8gbmFtZWkubyBmY250bC5vIFxcXG5mcy9NYWtlZmlsZToxMjpcdFx0aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZGNhY2hlLm8gaW5vZGUubyBcXFxuZnMvTWFrZWZpbGUtMTMtXHRcdGF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcXFxuLS1cbmZzL29jZnMyL01ha2VmaWxlPTExPW9jZnMyLW9ianMgOj0gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZS0xNS1cdGJ1ZmZlcl9oZWFkX2lvLm9cdFxcXG5mcy9vY2ZzMi9NYWtlZmlsZToxNjpcdGRjYWNoZS5vIFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGUtMTctXHRkaXIubyBcdFx0XHRcXFxuLS1cbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XHRcdCBkY2FjaGUubyBpbm9kZS5vIG9yYW5nZWZzLXN5c2ZzLm8gb3JhbmdlZnMtbW9kLm8gc3VwZXIubyBcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGUtMTAtXHRcdCBkZXZvcmFuZ2Vmcy1yZXEubyBuYW1laS5vIHN5bWxpbmsubyBkaXIubyBvcmFuZ2Vmcy1idWZtYXAubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc2MwoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAzNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXMgU3VtbWFyeSoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQuIEdpdmVuIHRoYXQgYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBjYW4gcmVtYWluIGVtcHR5LiBOb3csIEkmIzM5O20gZXhhbWluaW5nIGBXb3J0aEZ1enppbmdgLiBUaGlzIHBhdGNoIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVt4oCUc3BlY2lmaWNhbGx5LCBgZnMvZGNhY2hlLmNgLiBUaGUgbW9kaWZpY2F0aW9uIGZvY3VzZXMgb24gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgd2l0aGluIGBfX2RfYWxsb2MoKWAsIGFuZCBpdCYjMzk7cyBpbnRlbmRlZCB0byBwcmV2ZW50IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBkdXJpbmcgcmVuYW1lIG9wZXJhdGlvbnMgYW5kIFJDVSBsb29rdXBzLiBUaGlzIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsuIEl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZmlsZSBzeXN0ZW0gbG9naWMsIGFuZCB0aHVzIHRyaWdnZXJzIGZ1enppbmcuCgpOb3csIHJlZ2FyZGluZyBgRm9jdXNTeW1ib2xzYCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvIGd1aWRlIHRoZSBmdXp6ZXIuIEl0IGlzIHBhcmFtb3VudCB0aGF0IEkgYXZvaWQgb3Zlcmx5LXViaXF1aXRvdXMgZnVuY3Rpb25zLiBJIG11c3Qgc3BlY2lmaWNhbGx5IHRhcmdldCBmdW5jdGlvbnMgcmVsZXZhbnQgdG8gKnRoaXMqIGNoYW5nZS4gQWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBhbmQgcmVmZXJyaW5nIHRvIHRoZSBwcm92aWRlZCBndWlkYW5jZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBtb2RpZmllZCBieSB0aGlzIHBhdGNoIGlzIGBfX2RfYWxsb2NgLCB3aGljaCBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIGRlbnRyeSBhbGxvY2F0aW9uIGxvZ2ljLiBJdCYjMzk7cyAqbm90KiBhICYjMzQ7Z2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yLCYjMzQ7IGFzIGl0IHNwZWNpZmljYWxseSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgZGVudHJ5IHN0cnVjdHVyZS4gQmVjYXVzZSBpdCYjMzk7cyB3aGVyZSB0aGUgcGF0Y2ggbW9kaWZpZXMgaW5pdGlhbGl6YXRpb24sIGl0IG11c3QgYmUgaW5jbHVkZWQuIFRvIGZvY3VzIHRoZSBmdXp6aW5nIG9uICpob3cqIHRoZSBwYXRjaCB3aWxsIHdvcmsgaW4gcHJhY3RpY2UsIGdpdmVuIHRoYXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYCBhcmUgbm90IGV4cG9ydGVkLCBJIHdpbGwgYWxzbyBpbmNsdWRlIGBkX21vdmVgIGFuZCBgZF9leGNoYW5nZWAgc2luY2UgdGhleSBhcmUgZW50cnlwb2ludHMgaW50byBmdW5jdGlvbmFsaXR5IHdoZXJlIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaXMgY29waWVkL3N3YXBwZWQuIEFuZCwgZ2l2ZW4gdGhhdCBgZF9hbGxvY2AgaXMgdGhlIHByaW1hcnkgY2FsbGVyIG9mIGBfX2RfYWxsb2NgIEkgd2lsbCBpbmNsdWRlIGl0LgoKVGhlcmVmb3JlLCBteSBmaW5hbCBkZWNpc2lvbnMgYXJlOgoKKiAgIGBXb3J0aEZ1enppbmc9dHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgd2l0aGluIGNvcmUgVkZTIGNvZGUuIEl0IHRhcmdldHMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2xlYWtzIGR1cmluZyByZW5hbWUvUkNVIGxvb2t1cCwgd2hpY2ggaXMgd29ydGggZnV6emluZy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19kX2FsbG9jJiMzNDssICYjMzQ7ZF9tb3ZlJiMzNDssICYjMzQ7ZF9leGNoYW5nZSYjMzQ7XWAgKEkgd291bGQgYWxzbyBjb25zaWRlciBgZF9hbGxvY2AgaWYgSSBoYWQgZG91YnRzIGFib3V0IHRoZSBpbmxpbmluZyBvZiBgX19kX2FsbG9jYCkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoKSSBhbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGFuYWx5c2lzIGlzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSwgc28gSSBhbSBjb25maWRlbnQgaW4gbXkgcmVjb21tZW5kYXRpb24uIEkgYW0gcmVhZHkgdG8gc3VibWl0IHRoaXMgYXNzZXNzbWVudCB0byB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfbW92ZSYjMzQ7LAogICAgJiMzNDtkX2V4Y2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFZGUyBjb2RlIGluIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGlubGluZSBkZW50cnkgc2hvcnRuYW1lIGJ1ZmZlciB3aXRoIG1lbXNldCgpLCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9wYWdhdGlvbiBhbmQgZGF0YSByYWNlcyBkdXJpbmcgcmVuYW1lIChjb3B5X25hbWUvc3dhcF9uYW1lcykgYW5kIGxvY2tsZXNzIFJDVSBsb29rdXAuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3JzIGluIGRlbnRyeSBhbGxvY2F0aW9uIGFuZCByZW5hbWluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RfYWxsb2MmIzM0OywKICAgICYjMzQ7ZF9tb3ZlJiMzNDssCiAgICAmIzM0O2RfZXhjaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVkZTIGNvZGUgaW4gX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgaW5saW5lIGRlbnRyeSBzaG9ydG5hbWUgYnVmZmVyIHdpdGggbWVtc2V0KCksIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb3BhZ2F0aW9uIGFuZCBkYXRhIHJhY2VzIGR1cmluZyByZW5hbWUgKGNvcHlfbmFtZS9zd2FwX25hbWVzKSBhbmQgbG9ja2xlc3MgUkNVIGxvb2t1cC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcmVncmVzc2lvbnMsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvcnMgaW4gZGVudHJ5IGFsbG9jYXRpb24gYW5kIHJlbmFtaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzhjMzNmNDBhYTFhNDViMmM2ZTEzZmE0YTQyNmQxOWViZDc1ZDY1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDIyOjI0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAxYjFhODFmMTBkYTY3Li43MzA1NzFlOTJhZjgxIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kY2FjaGUuYwpAQCAtMTkxMCwxMiAmIzQzOzE5MTAsMTcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuCi0JICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZQotCSAqIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCwgZXZlbiBpZiB3ZSBtaWdodAotCSAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIKJiM0MzsJICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kCiYjNDM7CSAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55CiYjNDM7CSAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kCiYjNDM7CSAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZQomIzQzOwkgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZQomIzQzOwkgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCwKJiM0MzsJICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLgogCSAqLwotCWRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwOwomIzQzOwltZW1zZXQoZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pOwogCWlmICh1bmxpa2VseSghbmFtZSkpIHsKIAkJbmFtZSA9ICZhbXA7c2xhc2hfbmFtZTsKIAkJZG5hbWUgPSBkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVudHJ5IEluaXRpYWxpemF0aW9uOiBBIENsb3NlciBMb29rKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRjYWNoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0LCBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCwgb25seSBndWFyYW50ZWVzIHRoYXQgdGhlICpsYXN0KiBieXRlIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaXMgbnVsbC10ZXJtaW5hdGVkLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgYW5kIGhlcmUmIzM5O3Mgd2h5LgoKVGhlIGNvZGUmIzM5O3MgY29tbWVudCBtZW50aW9ucyByZW5hbWUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyBgbWVtY3B5YCBpcyB1c2VkIHRvIGRvIGEgbmFtZSBzd2l0Y2guIFRoZSBjcml0aWNhbCBjb25jZXJuIGlzIHRoYXQgaWYgdGhlICp3aG9sZSogaW5saW5lIGJ1ZmZlciBpc24mIzM5O3QgaW5pdGlhbGl6ZWQsIHdlIGNvdWxkIGVuZCB1cCBwcm9wYWdhdGluZyBnYXJiYWdlIGRhdGEgZHVyaW5nIGEgYHJlbmFtZWAgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYm90aCBgY29weV9uYW1lKClgIGFuZCBgc3dhcF9uYW1lcygpYCBjb3B5IHRoZSB3aG9sZSBgZF9zaG9ydG5hbWVgIGZpZWxkLCBhbmQgYF9fZF9sb29rdXBfcmN1KClgIG1pZ2h0IHRyYW5zaWVudGx5IHJlYWQgYnl0ZXMgZnJvbSBpdCBhcyB3ZWxsLCBlc3BlY2lhbGx5IHdoaWxlIGEgYHJlbmFtZSgpYCBpcyByZXdyaXRpbmcgaXQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzLgoKVGhlIHBhdGNoJiMzOTtzIHJlcGxhY2VtZW50LCBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLCBub3cgKmZ1bGx5KiBpbml0aWFsaXplcyB0aGUgYGRfc2hvcnRuYW1lYCBidWZmZXIgdG8gemVyby4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZG9uJiMzOTt0IGxlYWsgb3V0IGR1cmluZyByZW5hbWUgb3BlcmF0aW9ucy4gSXQgZWZmZWN0aXZlbHkgcHJvdmlkZXMgYSBndWFyYW50ZWVkIG51bGwtdGVybWluYXRpb24gYXQgdGhlIGVuZCAoYnV0IGJldHRlciksIHJlZ2FyZGxlc3Mgb2YgaW50ZXJuYWwgbnVsbCBjaGFyYWN0ZXJzLCBhbmQgc2FmZWd1YXJkcyBhZ2FpbnN0IHVuZXhwZWN0ZWQgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm93IHRoZSBjb2RlIGlzIG11Y2ggc2FmZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MDA6XHQgXG4xOTAxOlx0c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbjE5MDI6XHR7XG4xOTAzOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4xOTA0Olx0XHRjaGFyICpkbmFtZTtcbjE5MDU6XHRcdGludCBlcnI7XG4xOTA2Olx0XG4xOTA3Olx0XHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSxcbjE5MDg6XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuMTkwOTpcdFx0aWYgKCFkZW50cnkpXG4xOTEwOlx0XHRcdHJldHVybiBOVUxMO1xuMTkxMTpcdFxuMTkxMjpcdFx0LypcbjE5MTM6XHRcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuMTkxNDpcdFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbjE5MTU6XHRcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4xOTE2Olx0XHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbjE5MTc6XHRcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4xOTE4Olx0XHQgKlxuMTkxOTpcdFx0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbjE5MjA6XHRcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuMTkyMTpcdFx0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuMTkyMjpcdFx0ICovXG4xOTIzOlx0XHRtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XG4xOTI0Olx0XHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4xOTI1Olx0XHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuMTkyNjpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTI3Olx0XHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbjE5Mjg6XHRcdFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XG4xOTI5Olx0XG4xOTMwOlx0XHRcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXHUwMDNlbGVuICYjNDM7IDEsXG4xOTMxOlx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xuMTkzMjpcdFx0XHRpZiAoIXApIHtcbjE5MzM6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcbjE5MzQ6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MzU6XHRcdFx0fVxuMTkzNjpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlY291bnQsIDEpO1xuMTkzNzpcdFx0XHRkbmFtZSA9IHAtXHUwMDNlbmFtZTtcbjE5Mzg6XHRcdH0gZWxzZSAge1xuMTkzOTpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTQwOlx0XHR9XHRcbjE5NDE6XHRcbjE5NDI6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDM6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0NDpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbjE5NDU6XHRcdGRuYW1lW25hbWUtXHUwMDNlbGVuXSA9IDA7XG4xOTQ2Olx0XG4xOTQ3Olx0XHQvKiBNYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciAqL1xuMTk0ODpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXG4xOTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgTmVlZCBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBgX19kX2FsbG9jYCBwdWxscyBhIGBkZW50cnlgIGZyb20gdGhlIGBkZW50cnlfY2FjaGVgIHVzaW5nIGBrbWVtX2NhY2hlX2FsbG9jX2xydWAuIEJ1dCB0aGF0IGNhY2hlIGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHplcm8gbWVtb3J5LCByaWdodD8gSXQgdXNlcyBmbGFncywgYnV0IEkmIzM5O20gbm90IHN1cmUgaWYgYGRfc2hvcnRuYW1lYCBpcyBhbHdheXMgemVyb2VkLiBUaGVuLCB3YWl0LCB0aGlzIHBhdGNoISBJdCYjMzk7cyBjaGFuZ2luZyBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCB0byBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBTbywgaXQmIzM5O3MgZml4aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIQoKQnV0IHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgYSBLTVNBTiBzZXNzaW9uPyBMZXQmIzM5O3MgY2xhcmlmeSEgS01TQU4gaXMgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMsIHdoaWNoIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgdG9vbHMgZG9uJiMzOTt0IGNhdGNoLiBUaGUgcnVsZSBpcywgJiMzNDtOTyBLTVNBTiBJRiBLQVNBTiBDQVRDSEVTIElUISYjMzQ7CgpOb3cgdGhlIGNyaXRlcmlhIGFyZSBrZXk6IEkgbmVlZCB0byBjb25zaWRlciBgTmVlZHNLTVNBTj10cnVlYCBvbmx5IGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJpc2tzIGxpa2U6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy4KNC4gQm91bmRzIGNoZWNrcyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3MuCgpDb252ZXJzZWx5LCBJIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWY6Ci0gSXQmIzM5O3MgbWFpbmx5IGFib3V0IG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBkZXJlZmVyZW5jZXMsIGV0Yy4gKEtBU0FOIGNhdGNoZXMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZCAodXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykuCi0gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuCgpXYWl0LCB0aGlzIHBhdGNoICpmaXhlcyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZ2AgYnkgYWRkaW5nIGBtZW1zZXRgLiBTbywgZG9lcyB0aGUgcGF0Y2ggaXRzZWxmICppbnRyb2R1Y2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyEgUXVpdGUgdGhlIG9wcG9zaXRlLCBpdCAqZWxpbWluYXRlcyogYSBwb3RlbnRpYWwgc291cmNlIG9mIGl0LiBOb3csIHdoeSB3YXMgdGhpcyBwYXRjaCBzdWJtaXR0ZWQ/IFdhcyB0aGUgcHJldmlvdXMgY29kZSB0cmlnZ2VyaW5nIGEgS01TQU4gaXNzdWUsIG9yIHdhcyB0aGlzIGEgcHJvYWN0aXZlIGZpeD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSW4gYW55IGNhc2UsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBjcml0ZXJpYSwgSSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTE5MTItXHQvKlxuZnMvZGNhY2hlLmM6MTkxMzpcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuZnMvZGNhY2hlLmMtMTkxNC1cdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIGluIGBmcy9kY2FjaGUuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYGdpdCBsb2dgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugb3IgbWF5YmUgbG9vayBmb3IgcmVsYXRlZCBjb21taXRzLCBidXQgc2luY2UgSSBoYXZlIHRoZSBwYXRjaCBpdHNlbGYsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtsbCBkby4gVGhlIGNvZGUgbW9kaWZpZXMgYF9fZF9hbGxvY2AgaW4gYGZzL2RjYWNoZS5jYC4gSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBndWlkaW5nIHByaW5jaXBsZSBoZXJlIGlzIHRvICphdm9pZCogYSBLTVNBTiBzZXNzaW9uIGlmIGV4aXN0aW5nIGNoZWNrcywgc3VjaCBhcyBLQVNBTiwgd291bGQgYWxyZWFkeSBjYXRjaCB0aGUgYnVnLiBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmUsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yICp1bmlxdWUqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKQW5hbHl6aW5nIHRoZSBkaWZmLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGlzIGluaXRpYWxpemVkLiBQcmV2aW91c2x5LCBvbmx5IHRoZSBsYXN0IGJ5dGUgd2FzIGV4cGxpY2l0bHkgemVyb2VkLiBUaGUgcmVzdCB3YXMgbGVmdCBhcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWxsb2NhdGVkIGZyb20gdGhlIHNsYWIgY2FjaGUuIFRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgYWNjZXNzZWQgYnkgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAgZHVyaW5nIHJlbmFtZSwgb3IgcG90ZW50aWFsbHkgYnkgYF9fZF9sb29rdXBfcmN1KClgLiBUaGlzIGlzIHRleHRib29rIEtNU0FOIG1hdGVyaWFsLCBhcyB0aGVzZSBhY2Nlc3NlcyB3ZXJlIHRyaWdnZXJpbmcgS01TQU4gZmFpbHVyZXMuIFRoZSBwYXRjaCByZXBsYWNlcyB0aGF0IHNpbmdsZS1ieXRlIHplcm9pbmcgd2l0aCBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAsIGluaXRpYWxpemluZyB0aGUgKmVudGlyZSogYnVmZmVyIHRvIHplcm8uCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgbm90IGlmIHRoZSAqcHJldmlvdXMqIGNvZGUgaGFkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIGJ1dCB3aGV0aGVyIHRoaXMgcGF0Y2ggKmludHJvZHVjZXMqIG5ldyByaXNrcyBvciBleHBvc2VzIGFueSB0aGF0IGFyZSBvbmx5IGRldGVjdGFibGUgYnkgS01TQU4uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIHBhdGNo4oCZcyBpbXBhY3QuCgpOb3csIGxldCYjMzk7cyBjYXJlZnVsbHkgcmV2aWV3IHRoZSBLTVNBTiBjcml0ZXJpYS4gTXkgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJpc2tzOgoKKiAgIEkmIzM5O20gbG9va2luZyBmb3Iga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLiBUaGlzIGlzbiYjMzk7dCBzZW5kaW5nIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuCiogICBJJiMzOTttIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgc2VlbXMgc2ltcGxlLiBUaGUgcGF0Y2ggaXRzZWxmIGluaXRpYWxpemVzIHRoZSBkYXRhIHN0cnVjdHVyZSAqYmVmb3JlKiBhbnkgcmVhZHMgaGFwcGVuLgoqICAgSSYjMzk7bSBsb29raW5nIGZvciBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuZCBjb3JyZWN0cyB0aGUgaXNzdWUgd2l0aCB0aGUgb2xkIGNvZGUsIGVuc3VyaW5nIHRoZSBpbmxpbmUgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZC4gSXQgKnByZXZlbnRzKiB0aGF0IHNpdHVhdGlvbi4KKiAgIEkmIzM5O20gbG9va2luZyBmb3IgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55IGxvZ2ljIHdoaWNoIHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZW4gbGV0JiMzOTtzIHJldmlldyB0aGUgY2FzZXMgaW4gd2hpY2ggYE5lZWRzS01TQU49ZmFsc2VgCgoqICAgVGhlIHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93LCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWc6IHRoZXNlIGFyZSBhbGwgaGFuZGxlZCBieSBleGlzdGluZyB0b29scy4KKiAgIFRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIG9yIG90aGVyd2lzZSBpbml0aWFsaXplcyBhbGwgc3RydWN0dXJlcyBiZWZvcmUgdGhleSBhcmUgcmVhZCBvciBjb3BpZWQ6IEJpbmdvLiBUaGUgYG1lbXNldGAgZG9lcyBwcmVjaXNlbHkgdGhhdCEKKiAgIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogVGhpcyBzZWVtcyBjb3JyZWN0LiBUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtLgoKVGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRyZXNzZXMgYW5kIGZpeGVzIGEgcHJpb3IgcHJvYmxlbSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnkgdXNpbmcgYG1lbXNldGAuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgYW5kIGl0JiMzOTtzIGEgZGlyZWN0IGZpeCBmb3IgYSBLTVNBTiBpc3N1ZSBpbiB0aGUgcHJldmlvdXMgdmVyc2lvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbWVtc2V0YCBpdHNlbGYgaXNuJiMzOTt0IGEgc291cmNlIG9mIGJ1Z3MsIGJ1dCB0aGUgY29kZSBpbiBjb250ZXh0IGRvZXMgbm90IHRyaWdnZXIgYW55IG9mIHRoZSBzdGFuZGFyZCBtZW1zZXQgcGl0ZmFsbHMgc3VjaCBhcyBzaXplIG1pc2NhbGN1bGF0aW9uIG9yIGJ1ZmZlciBvdmVyZmxvd3MuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIFRoZSBwYXRjaCBpcyBhIGZpeCBmb3IgS01TQU4sIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGV4dGVybmFsX25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RjYWNoZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgZGNhY2hlLmggSGVhZGVyKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBkX3Nob3J0bmFtZWAuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5jbHVkZS9saW51eC9kY2FjaGUuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZGNhY2hlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayB0aHJvdWdoIHRoYXQgZmlsZSBjYXJlZnVsbHksIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yIHRoZSBgZF9zaG9ydG5hbWVgIGlkZW50aWZpZXIuIEhvcGVmdWxseSwgaXQmIzM5O3MgZGVmaW5lZCwgb3IgYXQgbGVhc3QgZGVjbGFyZWQsIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGhlYWRlci4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUsIGl0cyB1c2FnZSwgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZGNhY2hlLXJlbGF0ZWQgZGF0YSBtZW1iZXJzLiBUaGlzIG1pZ2h0IGludm9sdmUgdHJhY2luZyBiYWNrIHRocm91Z2ggYW55IHJlbGF0ZWQgbWFjcm9zIG9yIHR5cGVkZWZzIGlmIHRoZSBkZWNsYXJhdGlvbiBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9zaG9ydG5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RjYWNoZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGNhY2hlLmg9ODQ9dW5pb24gc2hvcnRuYW1lX3N0b3JlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTg5LSNkZWZpbmUgZF9sb2NrXHRkX2xvY2tyZWYubG9ja1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaDo5MDojZGVmaW5lIGRfaW5hbWUgZF9zaG9ydG5hbWUuc3RyaW5nXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTkxLXN0cnVjdCBjb21wbGV0aW9uX2xpc3Q7XG4tLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD05Mz1zdHJ1Y3QgZGVudHJ5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTEwNC1cdFx0XHRcdFx0ICogbmVnYXRpdmUgKi9cbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MTA1Olx0dW5pb24gc2hvcnRuYW1lX3N0b3JlIGRfc2hvcnRuYW1lO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0xMDYtXHQvKiAtLS0gY2FjaGVsaW5lIDEgYm91bmRhcnkgKDY0IGJ5dGVzKSB3YXMgMzIgYnl0ZXMgYWdvIC0tLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgZGNhY2hlLmggZGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA4MCB0aHJvdWdoIDk1IG9mIGBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIGtlcm5lbCBkZWZpbmVzIGFuZCBpbnRlcmFjdHMgd2l0aCBpdHMgZGlyZWN0b3J5IGNhY2hlIGF0IHRoaXMgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxpa2VseSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBwcm90b3R5cGVzIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gZGVudHJ5IG1hbmFnZW1lbnQuIENvbnNpZGVyaW5nIHdoZXJlIHdlIGFyZSBpbiB0aGUgaW5jbHVkZSBoaWVyYXJjaHksIHRoaXMgc2hvdWxkIGJlIHRoZSBsb3ctbGV2ZWwsIGludGVybmFsIGZhY2luZyBkZWNsYXJhdGlvbiBhbmQgbm90IHRoZSBoaWdoLWxldmVsIEFQSS4gVGhpcyBtaWdodCBjb3ZlciB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZGVudHJpZXMsIHRoZWlyIGZsYWdzLCBvciBwZXJoYXBzIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSBjb250cm9sIHdpdGhpbiB0aGUgZGNhY2hlLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBvZiB0aGUgb2xkZXIgbG9ja2luZyBhcHByb2FjaGVzLCBzdWNoIGFzIHRoZSBzcGlubG9ja3MsIGFyZSBlbXBsb3llZCBhdCB0aGlzIGxldmVsLiBJJiMzOTtsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgcmVmZXJlbmNlcyB0byBob3cgZGVudHJpZXMgYXJlIGxpbmtlZCBpbnRvIHRoZSBsYXJnZXIgZmlsZSBzeXN0ZW0gbmFtZXNwYWNlLiBJIGFtIHByZXBhcmVkIHRvIGFuYWx5emUgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGlub2RlIGNhY2hlIGFzIHdlbGwsIGlmIHRoZSBjb2RlIGNvbnRhaW5zIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGNhY2hlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2VuZGlmXG4gIDgxOlx0XG4gIDgyOlx0I2RlZmluZSBETkFNRV9JTkxJTkVfTEVOIChETkFNRV9JTkxJTkVfV09SRFMqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxuICA4MzpcdFxuICA4NDpcdHVuaW9uIHNob3J0bmFtZV9zdG9yZSB7XG4gIDg1Olx0XHR1bnNpZ25lZCBjaGFyIHN0cmluZ1tETkFNRV9JTkxJTkVfTEVOXTtcbiAgODY6XHRcdHVuc2lnbmVkIGxvbmcgd29yZHNbRE5BTUVfSU5MSU5FX1dPUkRTXTtcbiAgODc6XHR9O1xuICA4ODpcdFxuICA4OTpcdCNkZWZpbmUgZF9sb2NrXHRkX2xvY2tyZWYubG9ja1xuICA5MDpcdCNkZWZpbmUgZF9pbmFtZSBkX3Nob3J0bmFtZS5zdHJpbmdcbiAgOTE6XHRzdHJ1Y3QgY29tcGxldGlvbl9saXN0O1xuICA5MjpcdFxuICA5MzpcdHN0cnVjdCBkZW50cnkge1xuICA5NDpcdFx0LyogUkNVIGxvb2t1cCB0b3VjaGVkIGZpZWxkcyAqL1xuICA5NTpcdFx0dW5zaWduZWQgaW50IGRfZmxhZ3M7XHRcdC8qIHByb3RlY3RlZCBieSBkX2xvY2sgKi9cbiAgOTY6XHRcdHNlcWNvdW50X3NwaW5sb2NrX3QgZF9zZXE7XHQvKiBwZXIgZGVudHJ5IHNlcWxvY2sgKi9cbiAgOTc6XHRcdHN0cnVjdCBobGlzdF9ibF9ub2RlIGRfaGFzaDtcdC8qIGxvb2t1cCBoYXNoIGxpc3QgKi9cbiAgOTg6XHRcdHN0cnVjdCBkZW50cnkgKmRfcGFyZW50O1x0LyogcGFyZW50IGRpcmVjdG9yeSAqL1xuICA5OTpcdFx0dW5pb24ge1xuIDEwMDpcdFx0c3RydWN0IHFzdHIgX19kX25hbWU7XHRcdC8qIGZvciB1c2UgT05MWSBpbiBmcy9kY2FjaGUuYyAqL1xuIDEwMTpcdFx0Y29uc3Qgc3RydWN0IHFzdHIgZF9uYW1lO1xuIDEwMjpcdFx0fTtcbiAxMDM6XHRcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcdFx0LyogV2hlcmUgdGhlIG5hbWUgYmVsb25ncyB0byAtIE5VTEwgaXNcbiAxMDQ6XHRcdFx0XHRcdFx0ICogbmVnYXRpdmUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxOQoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWVgIFplcm9pbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGlzICpleGFjdGx5KiBgRE5BTUVfSU5MSU5FX0xFTmAgaW4gc2l6ZS4gVGhpcyBtZWFucyB3aGVuIEkgYG1lbXNldGAgdGhhdCBzdHJpbmcgdG8gemVybywgSSYjMzk7bSBjb21wbGV0ZWx5IHdpcGluZyB0aGUgKmVudGlyZSogYGRfc2hvcnRuYW1lYCB1bmlvbi4gQ3J1Y2lhbGx5LCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgZ29pbmcgb3V0LW9mLWJvdW5kcy4gSXQgemVyb2VzIHRoZSB3aG9sZSB0aGluZzsgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVtYWlucywgYW5kIGRlZmluaXRlbHkgbm8gaW5mb3JtYXRpb24gbGVha2FnZS4gSW4gZmFjdCwgaXQgKmVsaW1pbmF0ZXMqIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdGhhdCBjb3VsZCBoYXZlIGhhcHBlbmVkIGVhcmxpZXIsIGxpa2UgZHVyaW5nIGEgY29weSBvcGVyYXRpb24gb3IgZXZlbiBqdXN0IGEgdHJhbnNpZW50IHJlYWQgb2YgdGhhdCBgZF9zaG9ydG5hbWVgIGZpZWxkLgoKU28sIGJvdHRvbSBsaW5lOiB0aGlzIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBLQVNBTiBhbmQgb3VyIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSBmb3IgcmVncmVzc2lvbiB0ZXN0aW5nLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUgdGhhdCB3YXJyYW50cyBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQgd291bGQgYmUgb3ZlcmtpbGwuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGZvciBteSBvd24gcGVhY2Ugb2YgbWluZCwgdGhhdCBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXM6CgoxLiAgYE5lZWRzS01TQU5gOiBGYWxzZS4gQ2hlY2suCjIuICBgS01TQU5SZWFzb25pbmdgOiBOZWVkIHRvIGluY2x1ZGUgc29tZSBzb2xpZCByZWFzb25pbmcgY29udHJhc3RpbmcgdGhlIG5lZWQgZm9yIEtBU0FOIHZzLiBLTVNBTiBpbiB0aGUgY29kZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBLQVNBTiBpcyBzdWZmaWNpZW50IGluIG15IHJlYXNvbmluZy4gQ2hlY2suCjMuICBOb3cgSSBqdXN0IG5lZWQgdG8gY2FsbCB0aGF0IGBzZXQtcmVzdWx0c2AgdG9vbCB0byBmaW5hbGl6ZSBldmVyeXRoaW5nLgoKQWxyaWdodCwgZXZlcnl0aGluZyBpcyBjbGVhci4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRoaXMgcGF0Y2ggaXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDowOS4wNzkyMzU1OTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY5MTY5MzQ2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX2FsbG9jXCIsXG4gICAgXCJkX21vdmVcIixcbiAgICBcImRfZXhjaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGRlbnRyeSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKSB1c2luZyBtZW1zZXQoLi4uLCAwLCBETkFNRV9JTkxJTkVfTEVOKSBpbnN0ZWFkIG9mIG9ubHkgc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIE5VTC4gVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2hlcmUgY29weV9uYW1lKCksIHN3YXBfbmFtZXMoKSwgb3IgX19kX2xvb2t1cF9yY3UoKSBjb3VsZCByZWFkIG9yIHByb3BhZ2F0ZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gdGhlIHRhaWwgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gQmVjYXVzZSB0aGUgcGF0Y2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3JlZ3Jlc3Npb24gdGVzdGluZyBpcyBzdWZmaWNpZW50IGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBWRlMgY29kZSBpbiBfX2RfYWxsb2MoKSB0byBmdWxseSB6ZXJvIHRoZSBpbmxpbmUgZGVudHJ5IHNob3J0bmFtZSBidWZmZXIgd2l0aCBtZW1zZXQoKSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvcGFnYXRpb24gYW5kIGRhdGEgcmFjZXMgZHVyaW5nIHJlbmFtZSAoY29weV9uYW1lL3N3YXBfbmFtZXMpIGFuZCBsb2NrbGVzcyBSQ1UgbG9va3VwLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByZWdyZXNzaW9ucywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9ycyBpbiBkZW50cnkgYWxsb2NhdGlvbiBhbmQgcmVuYW1pbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjA5LjA3OTI0NDA5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTYwMjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4YzMzZjQwYWExYTQ1YjJjNmUxM2ZhNGE0MjZkMTllYmQ3NWQ2NTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjczMDU3MWU5MmFmODEgMTAwNjQ0XFxuLS0tIGEvZnMvZGNhY2hlLmNcXG4rKysgYi9mcy9kY2FjaGUuY1xcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC5cXG4tXFx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxcbi1cXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcXG4tXFx0ICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlclxcbitcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4rXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG4rXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4rXFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuK1xcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuK1xcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxcbitcXHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXFxuIFxcdCAqL1xcbi1cXHRkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcXG4rXFx0bWVtc2V0KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbiBcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuIFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjEwLjczNTYzMTU1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA0MjQ2NTE4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZF9hbGxvY1wiLFxuICAgIFwiZF9tb3ZlXCIsXG4gICAgXCJkX2V4Y2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVkZTIGNvZGUgaW4gX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgaW5saW5lIGRlbnRyeSBzaG9ydG5hbWUgYnVmZmVyIHdpdGggbWVtc2V0KCksIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb3BhZ2F0aW9uIGFuZCBkYXRhIHJhY2VzIGR1cmluZyByZW5hbWUgKGNvcHlfbmFtZS9zd2FwX25hbWVzKSBhbmQgbG9ja2xlc3MgUkNVIGxvb2t1cC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcmVncmVzc2lvbnMsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvcnMgaW4gZGVudHJ5IGFsbG9jYXRpb24gYW5kIHJlbmFtaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4YzMzZjQwYWExYTQ1YjJjNmUxM2ZhNGE0MjZkMTllYmQ3NWQ2NTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMjoyNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjczMDU3MWU5MmFmODEgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuKysrIGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbitcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuK1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbitcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4rXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbitcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4rXHQgKlxuK1x0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbitcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuK1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuK1x0bWVtc2V0KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xuIFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xuIFx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbiBcdFx0ZG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjQ6MTAuNzM1NjMzNTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg0ODE5MjcyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBEZW50cnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgaW4gYGZzL2RjYWNoZS5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbi4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIHJlcGxhY2VtZW50IG9mIGEgZGlyZWN0IGFzc2lnbm1lbnQgd2l0aCBgbWVtc2V0YCBvbiB0aGUgYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgIGJ1ZmZlci4gVGhlIG9sZCBjb21tZW50IG1lbnRpb25lZCBOVUwtdGVybWluYXRpb24gZm9yIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZS4gTm93LCB3aXRoIHRoaXMgbmV3IGFwcHJvYWNoLCB0aGUgY29tbWVudCBzdWdnZXN0cyBhIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuIFRoZSByZWFzb25pbmcgcG9pbnRzIHRvIGBjb3B5X25hbWUoKWAgYW5kIGBzd2FwX25hbWVzKClgIGNvcHlpbmcgdGhlIGBkX3Nob3J0bmFtZWAgZW50aXJlbHkuIEFueSB1bmluaXRpYWxpemVkIHBhcnRzIGNvdWxkIHRoZW4gcHJvcGFnYXRlLiBBbHNvLCBkdXJpbmcgcmVuYW1lIG9wZXJhdGlvbnMsIGBfX2RfbG9va3VwX3JjdSgpYCBtaWdodCB0cmFuc2llbnRseSByZWFkIGJ5dGVzIGZyb20gdGhlIGlubGluZSBuYW1lIHdoaWxlIGl0IGlzIGJlaW5nIHJld3JpdHRlbi4gVGhpcyBtYWtlcyBzZW5zZS5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbGwgbmVlZCBzb21lIG1vcmUgY29udGV4dC4gSSdsbCBjaGVjayB0aGUgR2l0IGxvZyB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBtYXliZSBzb21lIG1vcmUgZXhwbGFuYXRpb25zIGFyb3VuZCB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxOTEwLiBJIHNob3VsZCBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBmaWxlJ3MgY29udGV4dCBhcm91bmQgdGhhdCBsaW5lIHRvIGdldCBhIGJldHRlciBmZWVsIG9mIHdoYXQncyBoYXBwZW5pbmcuIEFuZCwgZmluYWxseSwgSSdsbCBwcm9iYWJseSBjYWxsIGByZWFkLWZpbGVgIG9uIGBmcy9kY2FjaGUuY2AgYXJvdW5kIGxpbmUgMTkxMCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSBgbWVtc2V0YCBpcyBwcmVmZXJyZWQgbm93IG92ZXIgdGhlIHNpbXBsZSBOVUwgdGVybWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDozOS4yMTc1NjU2ODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg5NTpcXHQgKlxcbjE4OTY6XFx0ICogQWxsb2NhdGVzIGEgZGVudHJ5LiBJdCByZXR1cm5zICVOVUxMIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudCBtZW1vcnlcXG4xODk3OlxcdCAqIGF2YWlsYWJsZS4gT24gYSBzdWNjZXNzIHRoZSBkZW50cnkgaXMgcmV0dXJuZWQuIFRoZSBuYW1lIHBhc3NlZCBpbiBpc1xcbjE4OTg6XFx0ICogY29waWVkIGFuZCB0aGUgY29weSBwYXNzZWQgaW4gbWF5IGJlIHJldXNlZCBhZnRlciB0aGlzIGNhbGwuXFxuMTg5OTpcXHQgKi9cXG4xOTAwOlxcdCBcXG4xOTAxOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuMTkwMjpcXHR7XFxuMTkwMzpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuMTkwNDpcXHRcXHRjaGFyICpkbmFtZTtcXG4xOTA1OlxcdFxcdGludCBlcnI7XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2RlbnRyeV9scnUsXFxuMTkwODpcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4xOTA5OlxcdFxcdGlmICghZGVudHJ5KVxcbjE5MTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdC8qXFxuMTkxMzpcXHRcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4xOTE0OlxcdFxcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XFxuMTkxNTpcXHRcXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxcbjE5MTY6XFx0XFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuMTkxNzpcXHRcXHQgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLlxcbjE5MTg6XFx0XFx0ICpcXG4xOTE5OlxcdFxcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuMTkyMDpcXHRcXHQgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCxcXG4xOTIxOlxcdFxcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cXG4xOTIyOlxcdFxcdCAqL1xcbjE5MjM6XFx0XFx0bWVtc2V0KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4xOTI0OlxcdFxcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcXG4xOTI1OlxcdFxcdFxcdG5hbWUgPSBcXHUwMDI2c2xhc2hfbmFtZTtcXG4xOTI2OlxcdFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMTkyNzpcXHRcXHR9IGVsc2UgaWYgKG5hbWUtXFx1MDAzZWxlbiBcXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xcbjE5Mjg6XFx0XFx0XFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XFxuMTkyOTpcXHRcXG4xOTMwOlxcdFxcdFxcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXFx1MDAzZWxlbiArIDEsXFxuMTkzMTpcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xcbjE5MzI6XFx0XFx0XFx0aWYgKCFwKSB7XFxuMTkzMzpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcXG4xOTM0OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE5MzU6XFx0XFx0XFx0fVxcbjE5MzY6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNlY291bnQsIDEpO1xcbjE5Mzc6XFx0XFx0XFx0ZG5hbWUgPSBwLVxcdTAwM2VuYW1lO1xcbjE5Mzg6XFx0XFx0fSBlbHNlICB7XFxuMTkzOTpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbjE5NDA6XFx0XFx0fVxcdFxcbjE5NDE6XFx0XFxuMTk0MjpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmxlbiA9IG5hbWUtXFx1MDAzZWxlbjtcXG4xOTQzOlxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUuaGFzaCA9IG5hbWUtXFx1MDAzZWhhc2g7XFxuMTk0NDpcXHRcXHRtZW1jcHkoZG5hbWUsIG5hbWUtXFx1MDAzZW5hbWUsIG5hbWUtXFx1MDAzZWxlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjM5LjIxNzczMTM2MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MDMzMzkzMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBkZW50cnlgIFNob3J0bmFtZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgY2hhbmdlcyBob3cgdGhlIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYCBidWZmZXIgaXMgaW5pdGlhbGl6ZWQuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2Ugb25seSB0aGUgbGFzdCBieXRlIHdhcyBleHBsaWNpdGx5IHplcm9lZCAoYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCksIGJ1dCBub3cgdGhlIGVudGlyZSBidWZmZXIgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGlzc3VlcyBsaWtlIEtNU0FOL2RhdGEgcmFjZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGxlYWRpbmcgdG8gaW5mbyBsZWFrcywgZXNwZWNpYWxseSBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgX19kX2xvb2t1cF9yY3VgIGR1cmluZyByZW5hbWVzLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZyB3aXRoIHN5emthbGxlcj8gIExldCdzIGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuXG5cblRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmUuIFdlJ3JlIHRvdWNoaW5nIGBmcy9kY2FjaGUuY2AsIHdoaWNoIGlzIGNvcmUgVkZTIGRjYWNoZSBzdWJzeXN0ZW0gY29kZS4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBsb29raW5nIGF0IGBfX2RfYWxsb2NgLiAgRnJvbSB0aGUgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGluIGBfX2RfYWxsb2NgIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbS4gSXQgZG9lc24ndCBmYWxsIGludG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIOKAkyBpdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBub3QgdXNlcnNwYWNlLCBub3QgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIGRyaXZlciB0ZWFyZG93bi4gIFNvLCBiYXNlZCBvbiB0aGUgaGlnaC1sZXZlbCBjcml0ZXJpYSwgSSdkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5CdXQgbGV0J3Mgbm90IGp1bXAgdGhlIGd1bi4gU2VjdGlvbiA0IGlzIGNydWNpYWwg4oCTIHByZXZlbnRpbmcgZGlsdXRpb24uICBXZSBuZWVkIHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcyBgRm9jdXNTeW1ib2xzYC4gVGhlIGtleSBoZXJlIGlzIHRvICphdm9pZCogdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zLiBJcyBgX19kX2FsbG9jYCBvciBgZF9hbGxvY2AgYSBnZW5lcmljLCB1YmlxdWl0b3VzIG1lbW9yeSBhbGxvY2F0b3Igb3Igc29tZXRoaW5nIGVsc2UgdGhhdCdzIGNhbGxlZCBldmVyeXdoZXJlPyBQcm9iYWJseSEgIFRoZSBpc3N1ZSBmb2N1c2VzIG9uIHRoZSBkZW50cnkgbmFtZS4gVGhlIGNvbW1lbnQgY2xlYXJseSBtZW50aW9ucyB0aGUgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgLCBhbmQgYF9fZF9sb29rdXBfcmN1YC4gU28sIHRob3NlIGZ1bmN0aW9ucyBvciB0aGVpciBjYWxsZXJzIGFyZSBwcm9iYWJseSBtb3JlIHJlbGV2YW50IGFzIGZvY3VzIHN5bWJvbHMgdGhhbiBgX19kX2FsbG9jYCBvbiBpdHMgb3duLiBJdCBtZW50aW9ucyB0aGF0IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgY29weSB0aGUgZW50aXJlIGRfc2hvcnRuYW1lLCBhbmQgdGhhdCBgX19kX2xvb2t1cF9yY3VgIG1heSByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgd2hlbiByZW5hbWUoKSByZXdyaXRlcyBpbiBwbGFjZS5cblxuSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIGBmcy9kY2FjaGUuY2AgZm9yIGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgdG8gdW5kZXJzdGFuZCB3aGF0IGNhbGxzIHRoZW0gYW5kIGlmIHRoZXkgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gIEkgYWxzbyBuZWVkIHRvIHNlZSB3aGF0IGBfX2RfYWxsb2NgIGRvZXMsIG9yIHdoYXQgY2FsbHMgYGRfYWxsb2NgLiBNeSBodW5jaCBpcyB0aGF0IGxpc3Rpbmcgb25seSBgX19kX2FsbG9jYCBtaWdodCBiZSB0b28gYnJvYWQ7IHdlIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgZW50cnlwb2ludHMgdG8gdGhlIGxvZ2ljIGFmZmVjdGVkIGJ5IHRoZSBwYXRjaC4gVGhlIGZ1enppbmcgZWZmb3J0IG5lZWRzIHRvIHRhcmdldCB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhlIGRlbnRyeSBzaG9ydG5hbWUgaW5pdGlhbGl6YXRpb24gYW5kIGl0cyB1c2FnZSBkdXJpbmcgY29weWluZywgc3dhcHBpbmcsIG9yIGxvb2t1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDo1My4yNTExMjc1MzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzMDgwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNvcHlfbmFtZXxzd2FwX25hbWVzKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0xOTAxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0xOTEyLVxcdC8qXFxuZnMvZGNhY2hlLmM6MTkxMzpcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG5mcy9kY2FjaGUuYzoxOTE0OlxcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XFxuZnMvZGNhY2hlLmMtMTkxNS1cXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxcbi0tXFxuZnMvZGNhY2hlLmM9Mjk5Mj1FWFBPUlRfU1lNQk9MKGRfbWFrZV9wZXJzaXN0ZW50KTtcXG5mcy9kY2FjaGUuYy0yOTkzLVxcbmZzL2RjYWNoZS5jOjI5OTQ6c3RhdGljIHZvaWQgc3dhcF9uYW1lcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcXG5mcy9kY2FjaGUuYy0yOTk1LXtcXG4tLVxcbmZzL2RjYWNoZS5jLTMwMzEtXFxuZnMvZGNhY2hlLmM6MzAzMjpzdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuZnMvZGNhY2hlLmMtMzAzMy17XFxuLS1cXG5mcy9kY2FjaGUuYz0zMDYwPXN0YXRpYyB2b2lkIF9fZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0LFxcbi0tXFxuZnMvZGNhY2hlLmMtMzEwOC1cXHRpZiAoIWV4Y2hhbmdlKSB7XFxuZnMvZGNhY2hlLmM6MzEwOTpcXHRcXHRjb3B5X25hbWUoZGVudHJ5LCB0YXJnZXQpO1xcbmZzL2RjYWNoZS5jLTMxMTAtXFx0XFx0dGFyZ2V0LVxcdTAwM2VkX2hhc2gucHByZXYgPSBOVUxMO1xcbi0tXFxuZnMvZGNhY2hlLmMtMzExNS1cXHRcXHR0YXJnZXQtXFx1MDAzZWRfcGFyZW50ID0gb2xkX3BhcmVudDtcXG5mcy9kY2FjaGUuYzozMTE2OlxcdFxcdHN3YXBfbmFtZXMoZGVudHJ5LCB0YXJnZXQpO1xcbmZzL2RjYWNoZS5jLTMxMTctXFx0XFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2dGFyZ2V0LVxcdTAwM2VkX3NpYikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjUzLjMyNTQ1NDA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg4MjM4NzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEZpbGUgU3lzdGVtIE5hbWluZyBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHNvbWUga2VybmVsIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBmaWxlIHN5c3RlbSBoYW5kbGVzIG5hbWVzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBzd2FwX25hbWVzYCwgYGNvcHlfbmFtZWAsIGFuZCB0aGF0IGludHJpZ3VpbmcgYF9fZF9tb3ZlYCBmdW5jdGlvbi4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHJlbmFtaW5nIG9yIG1vdmluZyBkaXJlY3RvcnkgZW50cmllcywgd2hpY2gsIGFzIHdlIGtub3csIGFyZSBmdW5kYW1lbnRhbCBhbmQgb2Z0ZW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgb3BlcmF0aW9ucyB3aXRoaW4gYSBmaWxlIHN5c3RlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCBiZWhhdmlvci5cblxuU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgYHN3YXBfbmFtZXNgIGFuZCBgY29weV9uYW1lYCBpbiBgZnMvZGNhY2hlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhlc2Ugd2lsbCBwcm92aWRlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcy4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIsIGFuZCBJJ2xsIGxpa2VseSBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgc3RyYXRlZ2llcywgYW5kIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhlc2Ugb3BlcmF0aW9ucyBmYWlsIG1pZHdheS4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gc29tZSBvZiB0aGUgbG93LWxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDo1Ni4yMDc4NDQ2NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk5NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk5NDpcXHRzdGF0aWMgdm9pZCBzd2FwX25hbWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbjI5OTU6XFx0e1xcbjI5OTY6XFx0XFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKHRhcmdldCkpKSB7XFxuMjk5NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpIHtcXG4yOTk4OlxcdFxcdFxcdFxcdC8qXFxuMjk5OTpcXHRcXHRcXHRcXHQgKiBCb3RoIGV4dGVybmFsOiBzd2FwIHRoZSBwb2ludGVyc1xcbjMwMDA6XFx0XFx0XFx0XFx0ICovXFxuMzAwMTpcXHRcXHRcXHRcXHRzd2FwKHRhcmdldC1cXHUwMDNlX19kX25hbWUubmFtZSwgZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lKTtcXG4zMDAyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMzAwMzpcXHRcXHRcXHRcXHQvKlxcbjMwMDQ6XFx0XFx0XFx0XFx0ICogZGVudHJ5OmludGVybmFsLCB0YXJnZXQ6ZXh0ZXJuYWwuICBTdGVhbCB0YXJnZXQnc1xcbjMwMDU6XFx0XFx0XFx0XFx0ICogc3RvcmFnZSBhbmQgbWFrZSB0YXJnZXQgaW50ZXJuYWwuXFxuMzAwNjpcXHRcXHRcXHRcXHQgKi9cXG4zMDA3OlxcdFxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUubmFtZSA9IHRhcmdldC1cXHUwMDNlX19kX25hbWUubmFtZTtcXG4zMDA4OlxcdFxcdFxcdFxcdHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lO1xcbjMwMDk6XFx0XFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gdGFyZ2V0LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMzAxMDpcXHRcXHRcXHR9XFxuMzAxMTpcXHRcXHR9IGVsc2Uge1xcbjMwMTI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKGRlbnRyeSkpKSB7XFxuMzAxMzpcXHRcXHRcXHRcXHQvKlxcbjMwMTQ6XFx0XFx0XFx0XFx0ICogZGVudHJ5OmV4dGVybmFsLCB0YXJnZXQ6aW50ZXJuYWwuICBHaXZlIGRlbnRyeSdzXFxuMzAxNTpcXHRcXHRcXHRcXHQgKiBzdG9yYWdlIHRvIHRhcmdldCBhbmQgbWFrZSBkZW50cnkgaW50ZXJuYWxcXG4zMDE2OlxcdFxcdFxcdFxcdCAqL1xcbjMwMTc6XFx0XFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lO1xcbjMwMTg6XFx0XFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZSA9IHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWU7XFxuMzAxOTpcXHRcXHRcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLm5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4zMDIwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMzAyMTpcXHRcXHRcXHRcXHQvKlxcbjMwMjI6XFx0XFx0XFx0XFx0ICogQm90aCBhcmUgaW50ZXJuYWwuXFxuMzAyMzpcXHRcXHRcXHRcXHQgKi9cXG4zMDI0OlxcdFxcdFxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpKyspXFxuMzAyNTpcXHRcXHRcXHRcXHRcXHRzd2FwKGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0sXFxuMzAyNjpcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0pO1xcbjMwMjc6XFx0XFx0XFx0fVxcbjMwMjg6XFx0XFx0fVxcbjMwMjk6XFx0XFx0c3dhcChkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuLCB0YXJnZXQtXFx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuKTtcXG4zMDMwOlxcdH1cXG4zMDMxOlxcdFxcbjMwMzI6XFx0c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbjMwMzM6XFx0e1xcbjMwMzQ6XFx0XFx0c3RydWN0IGV4dGVybmFsX25hbWUgKm9sZF9uYW1lID0gTlVMTDtcXG4zMDM1OlxcdFxcdGlmICh1bmxpa2VseShkbmFtZV9leHRlcm5hbChkZW50cnkpKSlcXG4zMDM2OlxcdFxcdFxcdG9sZF9uYW1lID0gZXh0ZXJuYWxfbmFtZShkZW50cnkpO1xcbjMwMzc6XFx0XFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKHRhcmdldCkpKSB7XFxuMzAzODpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZleHRlcm5hbF9uYW1lKHRhcmdldCktXFx1MDAzZWNvdW50KTtcXG4zMDM5OlxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUgPSB0YXJnZXQtXFx1MDAzZV9fZF9uYW1lO1xcbjMwNDA6XFx0XFx0fSBlbHNlIHtcXG4zMDQxOlxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUgPSB0YXJnZXQtXFx1MDAzZWRfc2hvcnRuYW1lO1xcbjMwNDI6XFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMzA0MzpcXHRcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuID0gdGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5oYXNoX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjQ6NTYuMjA4MDE5Nzk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEwODI4NDEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmFtZSBTd2FwcGluZyBpbiB0aGUgRmlsZXN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5hbWUgaGFuZGxpbmcgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBzbmlwcGV0czogYGNvcHlfbmFtZWAsIHNwZWNpZmljYWxseSB0aGUgbGluZSB3aGVyZSBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lYCBnZXRzIGFzc2lnbmVkIGZyb20gYHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZWAsIGFuZCB0aGVuIHRoZSBgc3dhcF9uYW1lc2AgZnVuY3Rpb24sIHdoZXJlIHRoZXJlJ3MgdGhhdCBzd2FwIG9wZXJhdGlvbiBoYXBwZW5pbmcgZGlyZWN0bHkgYmV0d2VlbiBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lYCBhbmQgYHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWJvdXQgb3B0aW1pemluZyBuYW1lIGhhbmRsaW5nLCBtYXliZSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb3BpZXMuIFRoZSBjb3JlIGxvZ2ljIGhpbmdlcyBvbiB3aGVyZSBgX19kX21vdmVgIGlzIGFjdHVhbGx5IGNhbGxlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIGFuZCB3aGF0J3MgZHJpdmluZyB0aGlzIG5hbWluZyBzdHJhdGVneS4gVGltZSB0byBzZWFyY2ggZm9yIHRoYXQgZnVuY3Rpb24gYW5kIG1hcCBpdHMgY2FsbGVycyBhbmQgaG93IGl0J3MgdXNlZCB3aXRoIGBkZW50cnlgIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDo1OC4zMTYzMDY2MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzg2NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZF9tb3ZlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jLTQ2LSAqIHNfcm9vdHNfbG9jayBwcm90ZWN0czpcXG5mcy9kY2FjaGUuYzo0NzogKiAgIC0gdGhlIHNfcm9vdHMgbGlzdCAoc2VlIF9fZF9tb3ZlKCkvZGVudHJ5X3VubGlzdCgpL2Rfb2J0YWluX3Jvb3QoKSlcXG5mcy9kY2FjaGUuYy00OC0gKiBkZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfZGVudHJ5X2xydV9sb2NrIHByb3RlY3RzOlxcbi0tXFxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMDU5LSAqL1xcbmZzL2RjYWNoZS5jOjMwNjA6c3RhdGljIHZvaWQgX19kX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQsXFxuZnMvZGNhY2hlLmMtMzA2MS1cXHRcXHQgICAgIGJvb2wgZXhjaGFuZ2UpXFxuLS1cXG5mcy9kY2FjaGUuYz0zMTU0PXZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbi0tXFxuZnMvZGNhY2hlLmMtMzE1Ni1cXHR3cml0ZV9zZXFsb2NrKFxcdTAwMjZyZW5hbWVfbG9jayk7XFxuZnMvZGNhY2hlLmM6MzE1NzpcXHRfX2RfbW92ZShkZW50cnksIHRhcmdldCwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTMxNTgtXFx0d3JpdGVfc2VxdW5sb2NrKFxcdTAwMjZyZW5hbWVfbG9jayk7XFxuLS1cXG5mcy9kY2FjaGUuYz0zMTY3PXZvaWQgZF9leGNoYW5nZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkyKVxcbi0tXFxuZnMvZGNhY2hlLmMtMzE3NS1cXG5mcy9kY2FjaGUuYzozMTc2OlxcdF9fZF9tb3ZlKGRlbnRyeTEsIGRlbnRyeTIsIHRydWUpO1xcbmZzL2RjYWNoZS5jLTMxNzctXFxuLS1cXG5mcy9kY2FjaGUuYz0zMjEwPXN0YXRpYyBpbnQgX19kX3VuYWxpYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICphbGlhcylcXG4tLVxcbmZzL2RjYWNoZS5jLTMyMzAtXFx0XFx0Z290byBvdXRfZXJyO1xcbmZzL2RjYWNoZS5jOjMyMzE6XFx0X19kX21vdmUoYWxpYXMsIGRlbnRyeSwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTMyMzItXFx0aWYgKGFsaWFzLVxcdTAwM2VkX29wIFxcdTAwMjZcXHUwMDI2IGFsaWFzLVxcdTAwM2VkX29wLVxcdTAwM2VkX3VuYWxpYXNfdW5sb2NrKVxcbi0tXFxuZnMvZGNhY2hlLmM9MzI0Mz1zdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZGNhY2hlLmMtMzI4Ny1cXHRcXHRcXHRcXHR9XFxuZnMvZGNhY2hlLmM6MzI4ODpcXHRcXHRcXHRcXHRfX2RfbW92ZShuZXcsIGRlbnRyeSwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTMyODktXFx0XFx0XFx0XFx0d3JpdGVfc2VxdW5sb2NrKFxcdTAwMjZyZW5hbWVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjU4LjM5NzcwMDMzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDI5OTEzOTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBkY2FjaGUuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBgbWVtc2V0YCBpbnRyb2R1Y3Rpb24sIGJ1dCBJIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IGZ1enphYmlsaXR5ICpmaXJzdCouIExldCdzIHN0aWNrIHRvIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZ3VpZGVsaW5lcy5cblxuUmVhZGluZyB0aGUgZ3VpZGVsaW5lcyBjYXJlZnVsbHksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhYm91dCByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvZGNhY2hlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGlzIGlzIHBhcnQgb2YgdGhlIFZGUyBkY2FjaGUgc3Vic3lzdGVtLCBzbyBkZWZpbml0ZWx5ICpub3QqIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3Igb3RoZXIgbmVnYXRpdmUgY3JpdGVyaWEuIFNpbmNlIHRoZSBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSwgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gdGhlcmVmb3JlIGNvbmNsdWRlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBuZXh0IHBhcnQgaXMgYWJvdXQgaWRlbnRpZnlpbmcgKkZvY3VzU3ltYm9scyogdG8gcHJldmVudCBkaWx1dGlvbiBvZiBmdXp6aW5nIGVmZm9ydC4gVGhlIGdvYWwgaGVyZSBpcyB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgYW5kIGluc3RlYWQgZm9jdXMgb24gZW50cnlwb2ludHMgb3IgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkLiBOb3csIGBfX2RfYWxsb2NgIGl0c2VsZiBpcyBwb3RlbnRpYWxseSB1YmlxdWl0b3VzLCBzaW5jZSBpdCdzIHVzZWQgaW4gKmV2ZXJ5KiBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24uIEhvd2V2ZXIsIHRoZSBwYXRjaCdzIGNvbW1lbnQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCByZW5hbWUgb3BlcmF0aW9ucy4gSSdtIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRob3NlLiBJIGFtIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSB0aGV5IGFyZSBpbnRlcm5hbCwgYW5kIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBsb2dpYyBjaGFuZ2VkIGhlcmUuXG5cbk9rYXksIEkgY29uZmlybWVkIHRoYXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYCBhcmUgYHN0YXRpY2AgZnVuY3Rpb25zIGluIGBmcy9kY2FjaGUuY2AuIEFuZCBgX19kX21vdmVgIGNhbGxzIGBkX21vdmVgIGFuZCBgZF9leGNoYW5nZWAgd2hpY2ggaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHRoZSBgcmVuYW1lYCBzeXNjYWxsLlxuXG5TbyBJIHRoaW5rIHRoZSAqZm9jdXMgc3ltYm9scyogc2hvdWxkIGJlOlxuXG5gX19kX2FsbG9jYCwgYGNvcHlfbmFtZWAsIGBzd2FwX25hbWVzYCwgYW5kIGBkX21vdmVgLCBvciBgcmVuYW1lYCBpZiBwb3NzaWJsZS4gVGhpcyBzaG91bGQgaGVscCBkaXJlY3QgdGhlIGZ1enplciB0byB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25hbGl0eSBhbmQgcHJldmVudCBpdCBmcm9tIGZvY3VzaW5nIG9uIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjEyLjY5Njg0MjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzAxNTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoZF9tb3ZlfGRfZXhjaGFuZ2UpXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL3Zmc19pbm9kZS5jPTg2ND12OWZzX3Zmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTk0OS1cXHRcXHQvKiBzdWNjZXNzZnVsIHJlbmFtZSAqL1xcbmZzLzlwL3Zmc19pbm9kZS5jOjk1MDpcXHRcXHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XFxuZnMvOXAvdmZzX2lub2RlLmMtOTUxLVxcdH1cXG4tLVxcbmZzL2Fmcy9kaXIuYz0xODg4PXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE5NTMtXFxuZnMvYWZzL2Rpci5jOjE5NTQ6XFx0ZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy0xOTU1LVxcbi0tXFxuZnMvYWZzL2Rpci5jPTE5NjI9c3RhdGljIHZvaWQgYWZzX3JlbmFtZV9leGNoYW5nZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTk4NC1cXG5mcy9hZnMvZGlyLmM6MTk4NTpcXHRcXHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy0xOTg2LVxcdFxcdHVwX3dyaXRlKFxcdTAwMjZvcmlnX2R2bm9kZS1cXHUwMDNldmFsaWRhdGVfbG9jayk7XFxuLS1cXG5mcy9hZnMvZGlyLmMtMjAxNy1cXG5mcy9hZnMvZGlyLmM6MjAxODpcXHRcXHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy0yMDE5LVxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuZXdfZHZub2RlLVxcdTAwM2V2YWxpZGF0ZV9sb2NrKTtcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYz0xMTE9aW50IGFmc19zaWxseXJlbmFtZShzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE0OS1cXHRcXHRzZXRfYml0KEFGU19WTk9ERV9TSUxMWV9ERUxFVEVELCBcXHUwMDI2dm5vZGUtXFx1MDAzZWZsYWdzKTtcXG5mcy9hZnMvZGlyX3NpbGx5LmM6MTUwOlxcdFxcdGRfbW92ZShkZW50cnksIHNkZW50cnkpO1xcbmZzL2Fmcy9kaXJfc2lsbHkuYy0xNTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9jZXBoL2Rpci5jPTE0ODE9c3RhdGljIGludCBjZXBoX3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxcbi0tXFxuZnMvY2VwaC9kaXIuYy0xNTQyLVxcdFxcdC8qXFxuZnMvY2VwaC9kaXIuYzoxNTQzOlxcdFxcdCAqIE5vcm1hbGx5IGRfbW92ZSgpIGlzIGRvbmUgYnkgZmlsbF90cmFjZSAoY2FsbGVkIGJ5XFxuZnMvY2VwaC9kaXIuYy0xNTQ0LVxcdFxcdCAqIGRvX3JlcXVlc3QsIGFib3ZlKS4gIElmIHRoZXJlIGlzIG5vIHRyYWNlLCB3ZSBuZWVkXFxuLS1cXG5mcy9jZXBoL2Rpci5jLTE1NDYtXFx0XFx0ICovXFxuZnMvY2VwaC9kaXIuYzoxNTQ3OlxcdFxcdGRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcXG5mcy9jZXBoL2Rpci5jLTE1NDgtXFx0fVxcbi0tXFxuZnMvY2VwaC9pbm9kZS5jPTE1OTM9aW50IGNlcGhfZmlsbF90cmFjZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2VwaF9tZHNfcmVxdWVzdCAqcmVxKVxcbi0tXFxuZnMvY2VwaC9pbm9kZS5jLTE3ODgtXFxuZnMvY2VwaC9pbm9kZS5jOjE3ODk6XFx0XFx0XFx0ZF9tb3ZlKHJlcS1cXHUwMDNlcl9vbGRfZGVudHJ5LCBkbik7XFxuZnMvY2VwaC9pbm9kZS5jLTE3OTAtXFx0XFx0XFx0ZG91dGMoY2wsIFxcXCIgc3JjICVwICclcGQnIGRzdCAlcCAnJXBkJ1xcXFxuXFxcIixcXG4tLVxcbmZzL2RfcGF0aC5jPTU3PXN0YXRpYyBib29sIHByZXBlbmQoc3RydWN0IHByZXBlbmRfYnVmZmVyICpwLCBjb25zdCBjaGFyICpzdHIsIGludCBuYW1lbGVuKVxcbi0tXFxuZnMvZF9wYXRoLmMtODMtICpcXG5mcy9kX3BhdGguYzo4NDogKiBXaXRoIFJDVSBwYXRoIHRyYWNpbmcsIGl0IG1heSByYWNlIHdpdGggZF9tb3ZlKCkuIFVzZSBSRUFEX09OQ0UoKSB0b1xcbmZzL2RfcGF0aC5jLTg1LSAqIG1ha2Ugc3VyZSB0aGF0IGVpdGhlciB0aGUgb2xkIG9yIHRoZSBuZXcgbmFtZSBwb2ludGVyIGFuZCBsZW5ndGggYXJlXFxuLS1cXG5mcy9kX3BhdGguYy04OS0gKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuYW1lLiBUaGUgc2VxdWVuY2UgbnVtYmVyIGNoZWNrIGF0IHRoZSBjYWxsZXIgd2lsbFxcbmZzL2RfcGF0aC5jOjkwOiAqIHJldHJ5IGl0IGFnYWluIHdoZW4gYSBkX21vdmUoKSBkb2VzIGhhcHBlbi4gU28gYW55IGdhcmJhZ2UgaW4gdGhlIGJ1ZmZlclxcbmZzL2RfcGF0aC5jLTkxLSAqIGR1ZSB0byBtaXNtYXRjaGVkIHBvaW50ZXIgYW5kIGxlbmd0aCB3aWxsIGJlIGRpc2NhcmRlZC5cXG4tLVxcbmZzL2RjYWNoZS5jLTQ2LSAqIHNfcm9vdHNfbG9jayBwcm90ZWN0czpcXG5mcy9kY2FjaGUuYzo0NzogKiAgIC0gdGhlIHNfcm9vdHMgbGlzdCAoc2VlIF9fZF9tb3ZlKCkvZGVudHJ5X3VubGlzdCgpL2Rfb2J0YWluX3Jvb3QoKSlcXG5mcy9kY2FjaGUuYy00OC0gKiBkZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfZGVudHJ5X2xydV9sb2NrIHByb3RlY3RzOlxcbi0tXFxuZnMvZGNhY2hlLmM9MjQ3ND1zdHJ1Y3QgZGVudHJ5ICpfX2RfbG9va3VwX3JjdShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuLS1cXG5mcy9kY2FjaGUuYy0yNDk3LVxcdCAqIENhcmVmdWxseSB1c2UgZF9zZXEgd2hlbiBjb21wYXJpbmcgYSBjYW5kaWRhdGUgZGVudHJ5LCB0byBhdm9pZFxcbmZzL2RjYWNoZS5jOjI0OTg6XFx0ICogcmFjZXMgd2l0aCBkX21vdmUoKS5cXG5mcy9kY2FjaGUuYy0yNDk5LVxcdCAqXFxuLS1cXG5mcy9kY2FjaGUuYz0yNTkyPXN0cnVjdCBkZW50cnkgKl9fZF9sb29rdXAoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTI2MTAtXFx0ICogVGFrZSBkX2xvY2sgd2hlbiBjb21wYXJpbmcgYSBjYW5kaWRhdGUgZGVudHJ5LCB0byBhdm9pZCByYWNlc1xcbmZzL2RjYWNoZS5jOjI2MTE6XFx0ICogd2l0aCBkX21vdmUoKS5cXG5mcy9kY2FjaGUuYy0yNjEyLVxcdCAqXFxuLS1cXG5mcy9kY2FjaGUuYz0zMDMyPXN0YXRpYyB2b2lkIGNvcHlfbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcXG4tLVxcbmZzL2RjYWNoZS5jLTMwNTktICovXFxuZnMvZGNhY2hlLmM6MzA2MDpzdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcXG5mcy9kY2FjaGUuYy0zMDYxLVxcdFxcdCAgICAgYm9vbCBleGNoYW5nZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTMxMjctXFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XFxuZnMvZGNhY2hlLmM6MzEyODpcXHRmc2NyeXB0X2hhbmRsZV9kX21vdmUoZGVudHJ5KTtcXG5mcy9kY2FjaGUuYy0zMTI5LVxcbi0tXFxuZnMvZGNhY2hlLmMtMzE1My0gKi9cXG5mcy9kY2FjaGUuYzozMTU0OnZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbmZzL2RjYWNoZS5jLTMxNTUte1xcbmZzL2RjYWNoZS5jLTMxNTYtXFx0d3JpdGVfc2VxbG9jayhcXHUwMDI2cmVuYW1lX2xvY2spO1xcbmZzL2RjYWNoZS5jOjMxNTc6XFx0X19kX21vdmUoZGVudHJ5LCB0YXJnZXQsIGZhbHNlKTtcXG5mcy9kY2FjaGUuYy0zMTU4LVxcdHdyaXRlX3NlcXVubG9jayhcXHUwMDI2cmVuYW1lX2xvY2spO1xcbi0tXFxuZnMvZGNhY2hlLmM9MzE2MD1FWFBPUlRfU1lNQk9MKGRfbW92ZSk7XFxuLS1cXG5mcy9kY2FjaGUuYy0zMTY2LSAqL1xcbmZzL2RjYWNoZS5jOjMxNjc6dm9pZCBkX2V4Y2hhbmdlKHN0cnVjdCBkZW50cnkgKmRlbnRyeTEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeTIpXFxuZnMvZGNhY2hlLmMtMzE2OC17XFxuLS1cXG5mcy9kY2FjaGUuYy0zMTc1LVxcbmZzL2RjYWNoZS5jOjMxNzY6XFx0X19kX21vdmUoZGVudHJ5MSwgZGVudHJ5MiwgdHJ1ZSk7XFxuZnMvZGNhY2hlLmMtMzE3Ny1cXG4tLVxcbmZzL2RjYWNoZS5jPTMyMTA9c3RhdGljIGludCBfX2RfdW5hbGlhcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKmFsaWFzKVxcbi0tXFxuZnMvZGNhY2hlLmMtMzIzMC1cXHRcXHRnb3RvIG91dF9lcnI7XFxuZnMvZGNhY2hlLmM6MzIzMTpcXHRfX2RfbW92ZShhbGlhcywgZGVudHJ5LCBmYWxzZSk7XFxuZnMvZGNhY2hlLmMtMzIzMi1cXHRpZiAoYWxpYXMtXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgYWxpYXMtXFx1MDAzZWRfb3AtXFx1MDAzZWRfdW5hbGlhc191bmxvY2spXFxuLS1cXG5mcy9kY2FjaGUuYz0zMjQzPXN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9kY2FjaGUuYy0zMjg3LVxcdFxcdFxcdFxcdH1cXG5mcy9kY2FjaGUuYzozMjg4OlxcdFxcdFxcdFxcdF9fZF9tb3ZlKG5ldywgZGVudHJ5LCBmYWxzZSk7XFxuZnMvZGNhY2hlLmMtMzI4OS1cXHRcXHRcXHRcXHR3cml0ZV9zZXF1bmxvY2soXFx1MDAyNnJlbmFtZV9sb2NrKTtcXG4tLVxcbmZzL2RjYWNoZS5jPTMzNDU9Ym9vbCBpc19zdWJkaXIoc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTMzNTItXFxuZnMvZGNhY2hlLmM6MzM1MzpcXHQvKiBBY2Nlc3MgZF9wYXJlbnQgdW5kZXIgcmN1IGFzIGRfbW92ZSgpIG1heSBjaGFuZ2UgaXQuICovXFxuZnMvZGNhY2hlLmMtMzM1NC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5mcy9kZWJ1Z2ZzL2lub2RlLmM9ODI0PWludCBfX3ByaW50ZigyLCAzKSBkZWJ1Z2ZzX2NoYW5nZV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5mcy9kZWJ1Z2ZzL2lub2RlLmMtODYyLVxcdHNpbXBsZV9yZW5hbWVfdGltZXN0YW1wKGRpciwgZGVudHJ5LCBkaXIsIHJkLm5ld19kZW50cnkpO1xcbmZzL2RlYnVnZnMvaW5vZGUuYzo4NjM6XFx0ZF9tb3ZlKGRlbnRyeSwgcmQubmV3X2RlbnRyeSk7XFxuZnMvZGVidWdmcy9pbm9kZS5jLTg2NC1cXHRmc25vdGlmeV9tb3ZlKGRpciwgZGlyLCBcXHUwMDI2b2xkX25hbWUubmFtZSwgZF9pc19kaXIoZGVudHJ5KSwgTlVMTCwgZGVudHJ5KTtcXG4tLVxcbmZzL2V4ZmF0L25hbWVpLmM9NzI1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleGZhdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2V4ZmF0L25hbWVpLmMtNzYxLVxcdFxcdCAqL1xcbmZzL2V4ZmF0L25hbWVpLmM6NzYyOlxcdFxcdGRfbW92ZShhbGlhcywgZGVudHJ5KTtcXG5mcy9leGZhdC9uYW1laS5jLTc2My1cXHRcXHRpcHV0KGlub2RlKTtcXG4tLVxcbmZzL2ZhdC9uYW1laV92ZmF0LmM9Njk4PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2ZmF0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZmF0L25hbWVpX3ZmYXQuYy03MzgtXFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbmZzL2ZhdC9uYW1laV92ZmF0LmM6NzM5OlxcdFxcdFxcdGRfbW92ZShhbGlhcywgZGVudHJ5KTtcXG5mcy9mYXQvbmFtZWlfdmZhdC5jLTc0MC1cXHRcXHRpcHV0KGlub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9NjE2OD1pbnQgdmZzX3JlbmFtZShzdHJ1Y3QgcmVuYW1lZGF0YSAqcmQpXFxuLS1cXG5mcy9uYW1laS5jLTYzMTUtXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpKVxcbmZzL25hbWVpLmM6NjMxNjpcXHRcXHRcXHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XFxuZnMvbmFtZWkuYy02MzE3LVxcdFxcdGVsc2VcXG5mcy9uYW1laS5jOjYzMTg6XFx0XFx0XFx0ZF9leGNoYW5nZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcXG5mcy9uYW1laS5jLTYzMTktXFx0fVxcbi0tXFxuZnMvbmZzL2Rpci5jPTI3ODA9aW50IG5mc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzL25mcy9kaXIuYy0yODgwLVxcdFxcdC8qXFxuZnMvbmZzL2Rpci5jOjI4ODE6XFx0XFx0ICogVGhlIGRfbW92ZSgpIHNob3VsZCBiZSBoZXJlIGluc3RlYWQgb2YgaW4gYW4gYXN5bmMgUlBDIGNvbXBsZXRpb25cXG5mcy9uZnMvZGlyLmMtMjg4Mi1cXHRcXHQgKiBoYW5kbGVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgcHJvcGVyIGxvY2tzIHRvIG1vdmUgdGhlIGRlbnRyeS4gIElmXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjg4NS1cXHRcXHQgKi9cXG5mcy9uZnMvZGlyLmM6Mjg4NjpcXHRcXHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XFxuZnMvbmZzL2Rpci5jLTI4ODctXFx0XFx0bmZzX3NldF92ZXJpZmllcihvbGRfZGVudHJ5LFxcbi0tXFxuZnMvbmZzL3VubGluay5jPTQ0Mz1uZnNfc2lsbHlyZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL25mcy91bmxpbmsuYy01MTctXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbmZzL25mcy91bmxpbmsuYzo1MTg6XFx0XFx0ZF9tb3ZlKGRlbnRyeSwgc2RlbnRyeSk7XFxuZnMvbmZzL3VubGluay5jLTUxOS1cXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2RjYWNoZS5jPTM3OT1zdGF0aWMgdm9pZCBvY2ZzMl9kZW50cnlfaXB1dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9vY2ZzMi9kY2FjaGUuYy00MTAtLypcXG5mcy9vY2ZzMi9kY2FjaGUuYzo0MTE6ICogZF9tb3ZlKCksIGJ1dCBrZWVwIHRoZSBsb2NrcyBpbiBzeW5jLlxcbmZzL29jZnMyL2RjYWNoZS5jLTQxMi0gKlxcbi0tXFxuZnMvb2NmczIvZGNhY2hlLmMtNDI0LSAqXFxuZnMvb2NmczIvZGNhY2hlLmM6NDI1OiAqIE5vcm1hbGx5LCB0aGUgVkZTIGhhbmRsZXMgdGhlIGRfbW92ZSgpIGZvciB0aGUgZmlsZSBzeXN0ZW0sIGFmdGVyXFxuZnMvb2NmczIvZGNhY2hlLmMtNDI2LSAqIHRoZSAtXFx1MDAzZXJlbmFtZSgpIGNhbGxiYWNrLiBPQ0ZTMiB3YW50cyB0byBoYW5kbGUgdGhpcyBpbnRlcm5hbGx5LCBzb1xcbi0tXFxuZnMvb2NmczIvZGNhY2hlLmM9NDI5PXZvaWQgb2NmczJfZGVudHJ5X21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQsXFxuLS1cXG5mcy9vY2ZzMi9kY2FjaGUuYy00NTItb3V0X21vdmU6XFxuZnMvb2NmczIvZGNhY2hlLmM6NDUzOlxcdGRfbW92ZShkZW50cnksIHRhcmdldCk7XFxuZnMvb2NmczIvZGNhY2hlLmMtNDU0LX1cXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xNTEtXFx0XFx0ICogSWYgZF9zcGxpY2VfYWxpYXMoKSBmaW5kcyBhIERDQUNIRV9ESVNDT05ORUNURURcXG5mcy9vY2ZzMi9uYW1laS5jOjE1MjpcXHRcXHQgKiBkZW50cnksIGl0IHdpbGwgZF9tb3ZlKCkgaXQgb24gdG9wIG9mIG91cnNlLiBUaGVcXG5mcy9vY2ZzMi9uYW1laS5jLTE1My1cXHRcXHQgKiByZXR1cm4gdmFsdWUgd2lsbCBpbmRpY2F0ZSB0aGlzIGhvd2V2ZXIsIHNvIGluXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MjQ0OD1jaWZzX2RvX3JlbmFtZShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpmcm9tX2RlbnRyeSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0yNTIyLVxcdGlmIChyYyA9PSAwKVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoyNTIzOlxcdFxcdGRfbW92ZShmcm9tX2RlbnRyeSwgdG9fZGVudHJ5KTtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMjUyNC1cXHRjaWZzX3B1dF90bGluayh0bGluayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjEyLjc4OTg2NjgxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDY3ODQxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBEaXJlY3QgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIHRvIGBfX2RfYWxsb2NgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYy4gSXTigJlzIGNyaXRpY2FsIHRvIGtub3cgdGhlIHNjb3BlIG9mIGNoYW5nZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgZGVudHJ5IGNhY2hlLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBsaW5lIDE5MDEuLi4gWWVwLCBpdCAqaXMqIGRlY2xhcmVkIHN0YXRpYzogYHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpYC4gVGhhdCdzIGltcG9ydGFudDsgaXQgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbiAqY291bGQqIGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIGBmcy9kY2FjaGUuY2AsIGJ1dCBpdCdzIG1vcmUgbG9jYWxpemVkIHRoYW4gaWYgaXQgd2VyZSBhIGdsb2JhbCBvciBleHBvcnRlZCBmdW5jdGlvbi4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX2RfYWxsb2NgIHdpdGhpbiBgZnMvZGNhY2hlLmNgLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyB0aGlzIHRoaW5nIGFuZCBob3cuIFRpbWUgdG8gZGlnIGludG8gdGhvc2UgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNToxNC44NTc3MTA4NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDMxMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZF9hbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jPTE4ODk9RVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpO1xcbi0tXFxuZnMvZGNhY2hlLmMtMTkwMC0gXFxuZnMvZGNhY2hlLmM6MTkwMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5MDIte1xcbi0tXFxuZnMvZGNhY2hlLmM9MTk4OT1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5OTAte1xcbmZzL2RjYWNoZS5jOjE5OTE6XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHBhcmVudC1cXHUwMDNlZF9zYiwgbmFtZSk7XFxuZnMvZGNhY2hlLmMtMTk5Mi1cXHRpZiAoIWRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZGNhY2hlLmMtMjAwOC17XFxuZnMvZGNhY2hlLmM6MjAwOTpcXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcXG5mcy9kY2FjaGUuYy0yMDEwLX1cXG4tLVxcbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0yMDQyLVxcdH07XFxuZnMvZGNhY2hlLmM6MjA0MzpcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2Moc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTIwNDQtXFx0aWYgKGxpa2VseShkZW50cnkpKSB7XFxuLS1cXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbi0tXFxuZnMvZGNhY2hlLmMtMjc3MC1cXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcXG5mcy9kY2FjaGUuYzoyNzcxOlxcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXFx1MDAzZWRfc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTI3NzItXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNToxNC45MTM3NTE1MzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5MTcwNjUzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enplcjogQSBEZWVwIERpdmUgaW50byBkZW50cnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYEZvY3VzU3ltYm9sc2AgZm9yIHRoaXMgZnV6emVyIHJ1bi4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgdGhlIGZ1enppbmcgb24gdGhlIHNwZWNpZmljIGNoYW5nZSBtYWRlIGJ5IHRoaXMgcGF0Y2gsIHdoaWNoIGlzIGFib3V0IGluaXRpYWxpemluZyB0aGUgYGRfc2hvcnRuYW1lYCBidWZmZXIgb2YgYSBgZGVudHJ5YC4gVGhlIHByb21wdCBpcyB2ZXJ5IHNwZWNpZmljOiBJIG5lZWQgdG8gYXZvaWQgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBhbmQgaW5zdGVhZCB0YXJnZXQgXCJzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy5cIlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYF9fZF9hbGxvY2AgKGNhbGxlZCBieSBgZF9hbGxvY2AgYW5kIG90aGVycykgc2VlbXMgbGlrZSBhIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gQnV0IGFtIEkgcmlnaHQ/IElzIGBfX2RfYWxsb2NgIG9uZSBvZiB0aG9zZSBnZW5lcmljLCB1YmlxdWl0b3VzIHRoaW5ncyB0aGUgcHJvbXB0IGlzIHdhcm5pbmcgbWUgYWJvdXQ/IExldCdzIGNoZWNrIHRoZSBwYXRjaDogaXQgemVyb2VzIHRoZSBzaG9ydG5hbWUgYnVmZmVyIGR1cmluZyBkZW50cnkgYWxsb2NhdGlvbiB1c2luZyBgbWVtc2V0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVmZm9ydCBpcyB3ZWxsLWRpcmVjdGVkIGJ5IHByb3ZpZGluZyB0aGUgY29ycmVjdCBgRm9jdXNTeW1ib2xzYC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBwYXRjaCB3YXMgd3JpdHRlbi4gUmVhZGluZyB0aHJvdWdoIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIHZ1bG5lcmFiaWxpdHkgY29uY2VybnMgaG93IG5hbWUgY29waWVzIGR1cmluZyBgcmVuYW1lYCBvcGVyYXRpb25zIG1pZ2h0IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaXNzdWVzIHdpdGggYEtNU0FOYCBvciBgS0FTQU5gLiBFc3NlbnRpYWxseSwgaWYgdGhlIGBkZW50cnlgIGhhcyBhIHNob3J0IG5hbWUgdGhhdCdzIG5vdCBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgYGRfc2hvcnRuYW1lLnN0cmluZ2AgaXMgemVyby1pbml0aWFsaXplZCB3aXRoIGBtZW1zZXRgLCB0byBwcmV2ZW50IEtNU0FOIHJlcG9ydHMgb3IgbGVha2FnZS5cblxuU28sIHRoZSBpc3N1ZSBpcyBhYm91dCBpbml0aWFsaXphdGlvbiBkdXJpbmcgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBfX2RfYWxsb2NgLiBUaGUgY29tbWVudCBsaXN0cyBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgLCBhbmQgYF9fZF9sb29rdXBfcmN1YCBhcyByZWxhdGVkIGZ1bmN0aW9ucyB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIG1hdHRlcnMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB3b25kZXJpbmcgaWYgYF9fZF9hbGxvY2AgaXMgdWJpcXVpdG91cy4gSXMgaXQgY2FsbGVkIGJ5IEVWRVJZIHByb2dyYW0sIGFuZCB3aWxsIGl0IGRpbHV0ZSBteSBlZmZvcnRzPyBObywgYF9fZF9hbGxvY2AgaXMgbm90IGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYGttYWxsb2NgIGFuZCBga2ZyZWVgLiBJdCdzIGEgc3BlY2lmaWMgVkZTIGZ1bmN0aW9uIGFuZCBpdCdzIGxpdGVyYWxseSB0aGUgZnVuY3Rpb24gdGhhdCAqd2FzIG1vZGlmaWVkKiBpbiB0aGUgcGF0Y2guIFRoZSBvdGhlciBvcGVyYXRpb25zIGFyZSByZWxhdGVkIHRvIGRlbnRyeSBtYW5pcHVsYXRpb246IGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGBfX2RfbG9va3VwX3JjdWAgYW5kIGBkX21vdmVgIG9yIGBkX2V4Y2hhbmdlYCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB5b3UgcmVuYW1lIG9yIG1vdmUgZmlsZXMuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGluc3RydWN0aW9ucywgYWdhaW46IFwiTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkXCIuIEFoYSEgVGhlICpvbmx5KiBmdW5jdGlvbiBtb2RpZmllZCBpbiB0aGUgcGF0Y2ggaXMgYF9fZF9hbGxvY2AuIFRoZSBvcmlnaW5hbCBjb2RlIGp1c3QgaGFkIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO2AgYW5kIG5vdyBpdCdzIGBtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCBzZWVtcyB2ZXJ5IHNwZWNpZmljLiBUaGVyZWZvcmUsIGBfX2RfYWxsb2NgICptdXN0KiBiZSBpbmNsdWRlZC4gVGhhdCBzZWVtcyBsaWtlIGEgbm8tYnJhaW5lci4gVGhpcyBjaGFuZ2UgaXMgZGlyZWN0bHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2Utb2YtdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGBkZW50cnlgLiBJdCdzIHRoZSBwb2ludCBvZiB0aGUgY2hhbmdlLiBgX19kX2FsbG9jYCBpc24ndCBhICpnZW5lcmFsKiBtZW1vcnkgYWxsb2NhdG9yLiBJdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGFsbG9jYXRlcyBkZW50cmllcyB3aXRoaW4gdGhlIGRjYWNoZSwgYW5kIGl0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBwYXRjaCBoYXMgbW9kaWZpZWQuIFxuXG5XaGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlPyBgZF9tb3ZlYCwgYGRfZXhjaGFuZ2VgLCBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgIGFuZCBgX19kX2xvb2t1cF9yY3VgPyBUaG9zZSBhcmUgYWxsIG9wZXJhdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBkZW50cnkgc2hvcnQgbmFtZSBhbmQgdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgYW0gSSB0cnlpbmcgdG8gcmVwcm9kdWNlIGEgY3Jhc2ggZHVyaW5nIGEgbW92ZSBvcGVyYXRpb24gb3IgYSBsb29rdXA/IFRoZSBwYXRjaCdzICpnb2FsKiBpcyB0byBwcmV2ZW50IHByb2JsZW1zIGluIHRob3NlIGxhdGVyIG9wZXJhdGlvbnMuIFRoZXJlZm9yZSwgcGVyaGFwcyBpbmNsdWRpbmcgdGhlc2UgaXMgdXNlZnVsIHRvIHZlcmlmeSB0aGUgb3ZlcmFsbCBmaXguXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgaXQgZnJvbSBhbm90aGVyIGFuZ2xlOiB0aGUgZ29hbCBpcyB0byAqdGVzdCogd2hldGhlciB0aGlzIGNoYW5nZSAodGhlIGBtZW1zZXRgKSAqd29ya3MqLiBTeXprYWxsZXIgY2FuIHRlc3QgYWxsIHRoZSBvcGVyYXRpb25zIHRvIHNlZSBpZiBpdCBmaXhlcyBLTVNBTiByZXBvcnRzLiBTbywgaW5jbHVkaW5nIGBfX2RfYWxsb2NgLCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBwYXRjaCdzIGNlbnRyYWwgbW9kaWZpY2F0aW9uLiBJdCBpcyB0aGUgdGFyZ2V0LiBUaGVuLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGFkZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZSB1bmluaXRpYWxpemVkIG5hbWU6IGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGBfX2RfbG9va3VwX3JjdWAsIGBkX21vdmVgLCBhbmQgYGRfZXhjaGFuZ2VgIHRvIGVuc3VyZSBhbGwgcGF0aHMgYXJlIHZlcmlmaWVkLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgYW55IG9mIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggaGF2ZSBwcmV2aW91c2x5IHJlcG9ydGVkIEtNU0FOIGlzc3VlcywgYXJlIG5vdyBzYWZlLlxuXG5TbywgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvY2AgZGlyZWN0bHksIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgX19kX2FsbG9jYCwgYWxvbmcgd2l0aCByZWxhdGVkIG9wZXJhdGlvbnMgbGlrZSBgZF9tb3ZlYCwgYW5kIGBkX2V4Y2hhbmdlYCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTozNi44MzA4MTk1NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDIwNjk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEROQU1FX0lOTElORV9MRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTozNi45MTA4NTA3NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5MjM4NDIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYEROQU1FX0lOTElORV9MRU5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHZhbHVlIG9mIGBETkFNRV9JTkxJTkVfTEVOYC4gVGhpcyB2YXJpYWJsZSBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciBzb21lIG9wdGltaXphdGlvbiBvciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhpcyBjb2RlLCBqdWRnaW5nIGZyb20gaXRzIG5hbWUuIEdpdmVuIHRoYXQgaXQncyBsaWtlbHkgYSBjb25zdGFudCB0aGF0IGRlZmluZXMgc29tZSBsaW1pdCBvciBsZW5ndGgsIEkgc3VzcGVjdCBpdCdzIHVzZWQgaW4gYnVmZmVyIG1hbmFnZW1lbnQgb3IgcGVyaGFwcyBpbiBoYW5kbGluZyBpbmxpbmUgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gRE5TIG5hbWVzLiBcblxuTXkgaW1tZWRpYXRlIHN0cmF0ZWd5IGlzIHRvIHVzZSB0aGUgZnVsbCB0ZXh0IHNlYXJjaCB0byB0cmFjayBpdCBkb3duIGFjcm9zcyB0aGUgZW50aXJlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGRlZmluaXRpb24sIHdoaWNoIGxpa2VseSB1c2VzIGEgYCNkZWZpbmVgIG9yIGEgYGNvbnN0YCBkZWNsYXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgKndoZXJlKiBpdCdzIGRlZmluZWQgYW5kICpob3cqIGl0J3MgdXNlZC4gVGhpcyBtaWdodCBpbnZvbHZlIGRpdmluZyBpbnRvIGhlYWRlciBmaWxlcywgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZCB0aGVuIHRyYWNpbmcgdGhvc2UgdXNlcyB0aHJvdWdoIHZhcmlvdXMgZnVuY3Rpb25zLlxuXG5JJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY29uc3RhbnQgaW5mbHVlbmNlcyBidWZmZXIgc2l6ZXMsIGxvb3AgYm91bmRhcmllcywgb3IgY29uZGl0aW9uYWwgbG9naWMuIFRoZSBjb250ZXh0IGFyb3VuZCBpdHMgdXNhZ2Ugd2lsbCBwcm92aWRlIGNsdWVzIGFzIHRvIHdoYXQgaXQncyBvcHRpbWl6aW5nLiBVbmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGl0IGluZmx1ZW5jZXMgYW5kIHdoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb25zIGNvdWxkIGJlIHJlYWxpemVkLlxuXG5Fc3NlbnRpYWxseSwgSSdtIHNldHRpbmcgb3V0IHRvIHVuZGVyc3RhbmQgdGhlICptZWFuaW5nKiBvZiBgRE5BTUVfSU5MSU5FX0xFTmAgaW4gdGhpcyBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTozOS4zMDMyMzc5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODI1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkROQU1FX0lOTElORV9MRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kY2FjaGUuaD02NT1leHRlcm4gY29uc3Qgc3RydWN0IHFzdHIgZG90ZG90X25hbWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTgxLVxcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6ODI6I2RlZmluZSBETkFNRV9JTkxJTkVfTEVOIChETkFNRV9JTkxJTkVfV09SRFMqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtODMtXFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD04ND11bmlvbiBzaG9ydG5hbWVfc3RvcmUge1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6ODU6XFx0dW5zaWduZWQgY2hhciBzdHJpbmdbRE5BTUVfSU5MSU5FX0xFTl07XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC04Ni1cXHR1bnNpZ25lZCBsb25nIHdvcmRzW0ROQU1FX0lOTElORV9XT1JEU107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjM5LjQ0MzA3MjY5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTgxMTk4OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZW50cnkgU2hvcnRuYW1lIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AgaGFzIGEgZml4ZWQgc2l6ZSwgd2hpY2ggSSdtIGFzc3VtaW5nIGlzIGRlZmluZWQgYnkgYEROQU1FX0lOTElORV9MRU5gLiBUaGUgc3Vic2VxdWVudCBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IHplcm9pbmcgb3V0IHRoZSBlbnRpcmUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hvcnQgbmFtZSBzdHJpbmcuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uLCBjbGVhbmluZyB1cCBsZWZ0b3ZlciBkYXRhLiBcblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgS2NvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoaXMgY29kZSBwYXRoLiBTaW5jZSB0aGlzIHNlZW1zIHByZXR0eSBmdW5kYW1lbnRhbCB0byBkZW50cnkgb3BlcmF0aW9ucywgYW5kIGBmcy9kY2FjaGUuY2AgaXMgcGFydCBvZiBjb3JlIFZGU+KAlEkgYWxyZWFkeSBrbm93IGl0J3MgY29tcGlsZWQgYXMgcGFydCBvZiBgZGNhY2hlLm9gIGZyb20gbG9va2luZyBhdCB0aGUgYGZzL01ha2VmaWxlYCAtIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2hvdWxkIGJlIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIEkgdGhpbmsgSSdsbCBnbyBjaGVjayB0aGUgYGZzL01ha2VmaWxlYCBpdHNlbGYgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgYWx3YXlzIGluY2x1ZGVkIG9yIGRlcGVuZHMgb24gc29tZSBzdWJ0bGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA5NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTo0MS40MjQyNzQ1NzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjY1NzM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkY2FjaGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTEtXFx0XFx0Y2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXFxcXFxcbmZzL01ha2VmaWxlOjEyOlxcdFxcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcXFxcbmZzL01ha2VmaWxlLTEzLVxcdFxcdGF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlLTE1LVxcdGJ1ZmZlcl9oZWFkX2lvLm9cXHRcXFxcXFxuZnMvb2NmczIvTWFrZWZpbGU6MTY6XFx0ZGNhY2hlLm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTE3LVxcdGRpci5vIFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XFx0XFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXFxcXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS0xMC1cXHRcXHQgZGV2b3JhbmdlZnMtcmVxLm8gbmFtZWkubyBzeW1saW5rLm8gZGlyLm8gb3JhbmdlZnMtYnVmbWFwLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTo0Mi4xMjY5MzgyNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI4NTUxNjY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBTdW1tYXJ5KipcblxuT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQuIEdpdmVuIHRoYXQgYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBjYW4gcmVtYWluIGVtcHR5LiBOb3csIEknbSBleGFtaW5pbmcgYFdvcnRoRnV6emluZ2AuIFRoaXMgcGF0Y2ggdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIFZGUyBzdWJzeXN0ZW3igJRzcGVjaWZpY2FsbHksIGBmcy9kY2FjaGUuY2AuIFRoZSBtb2RpZmljYXRpb24gZm9jdXNlcyBvbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB3aXRoaW4gYF9fZF9hbGxvYygpYCwgYW5kIGl0J3MgaW50ZW5kZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgZHVyaW5nIHJlbmFtZSBvcGVyYXRpb25zIGFuZCBSQ1UgbG9va3Vwcy4gVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiLiBJdCdzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZmlsZSBzeXN0ZW0gbG9naWMsIGFuZCB0aHVzIHRyaWdnZXJzIGZ1enppbmcuXG5cbk5vdywgcmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gZ3VpZGUgdGhlIGZ1enplci4gSXQgaXMgcGFyYW1vdW50IHRoYXQgSSBhdm9pZCBvdmVybHktdWJpcXVpdG91cyBmdW5jdGlvbnMuIEkgbXVzdCBzcGVjaWZpY2FsbHkgdGFyZ2V0IGZ1bmN0aW9ucyByZWxldmFudCB0byAqdGhpcyogY2hhbmdlLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGFuZCByZWZlcnJpbmcgdG8gdGhlIHByb3ZpZGVkIGd1aWRhbmNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCBpcyBgX19kX2FsbG9jYCwgd2hpY2ggZXhwbGljaXRseSBoYW5kbGVzIHRoZSBkZW50cnkgYWxsb2NhdGlvbiBsb2dpYy4gSXQncyAqbm90KiBhIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yLFwiIGFzIGl0IHNwZWNpZmljYWxseSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgZGVudHJ5IHN0cnVjdHVyZS4gQmVjYXVzZSBpdCdzIHdoZXJlIHRoZSBwYXRjaCBtb2RpZmllcyBpbml0aWFsaXphdGlvbiwgaXQgbXVzdCBiZSBpbmNsdWRlZC4gVG8gZm9jdXMgdGhlIGZ1enppbmcgb24gKmhvdyogdGhlIHBhdGNoIHdpbGwgd29yayBpbiBwcmFjdGljZSwgZ2l2ZW4gdGhhdCBgY29weV9uYW1lYCBhbmQgYHN3YXBfbmFtZXNgIGFyZSBub3QgZXhwb3J0ZWQsIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGRfbW92ZWAgYW5kIGBkX2V4Y2hhbmdlYCBzaW5jZSB0aGV5IGFyZSBlbnRyeXBvaW50cyBpbnRvIGZ1bmN0aW9uYWxpdHkgd2hlcmUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciBpcyBjb3BpZWQvc3dhcHBlZC4gQW5kLCBnaXZlbiB0aGF0IGBkX2FsbG9jYCBpcyB0aGUgcHJpbWFyeSBjYWxsZXIgb2YgYF9fZF9hbGxvY2AgSSB3aWxsIGluY2x1ZGUgaXQuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgZGVjaXNpb25zIGFyZTpcblxuKiAgIGBXb3J0aEZ1enppbmc9dHJ1ZWBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIHdpdGhpbiBjb3JlIFZGUyBjb2RlLiBJdCB0YXJnZXRzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy9sZWFrcyBkdXJpbmcgcmVuYW1lL1JDVSBsb29rdXAsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX2RfYWxsb2NcIiwgXCJkX21vdmVcIiwgXCJkX2V4Y2hhbmdlXCJdYCAoSSB3b3VsZCBhbHNvIGNvbnNpZGVyIGBkX2FsbG9jYCBpZiBJIGhhZCBkb3VidHMgYWJvdXQgdGhlIGlubGluaW5nIG9mIGBfX2RfYWxsb2NgKVxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYFxuXG5JIGFtIHNhdGlzZmllZCB0aGF0IHRoaXMgYW5hbHlzaXMgaXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLCBzbyBJIGFtIGNvbmZpZGVudCBpbiBteSByZWNvbW1lbmRhdGlvbi4gSSBhbSByZWFkeSB0byBzdWJtaXQgdGhpcyBhc3Nlc3NtZW50IHRvIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzYzLCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjU6NTQuOTgyMTIwMjU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RfYWxsb2NcIixcbiAgICBcImRfbW92ZVwiLFxuICAgIFwiZF9leGNoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFZGUyBjb2RlIGluIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGlubGluZSBkZW50cnkgc2hvcnRuYW1lIGJ1ZmZlciB3aXRoIG1lbXNldCgpLCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9wYWdhdGlvbiBhbmQgZGF0YSByYWNlcyBkdXJpbmcgcmVuYW1lIChjb3B5X25hbWUvc3dhcF9uYW1lcykgYW5kIGxvY2tsZXNzIFJDVSBsb29rdXAuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3JzIGluIGRlbnRyeSBhbGxvY2F0aW9uIGFuZCByZW5hbWluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RfYWxsb2NcIixcbiAgICBcImRfbW92ZVwiLFxuICAgIFwiZF9leGNoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFZGUyBjb2RlIGluIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGlubGluZSBkZW50cnkgc2hvcnRuYW1lIGJ1ZmZlciB3aXRoIG1lbXNldCgpLCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9wYWdhdGlvbiBhbmQgZGF0YSByYWNlcyBkdXJpbmcgcmVuYW1lIChjb3B5X25hbWUvc3dhcF9uYW1lcykgYW5kIGxvY2tsZXNzIFJDVSBsb29rdXAuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3JzIGluIGRlbnRyeSBhbGxvY2F0aW9uIGFuZCByZW5hbWluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjU6NTQuOTgyMTUyMTc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMTQwMDg4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTo1NC45ODMwNTA1NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDEwMTMxMDY5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGRlbnRyeSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKSB1c2luZyBtZW1zZXQoLi4uLCAwLCBETkFNRV9JTkxJTkVfTEVOKSBpbnN0ZWFkIG9mIG9ubHkgc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIE5VTC4gVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2hlcmUgY29weV9uYW1lKCksIHN3YXBfbmFtZXMoKSwgb3IgX19kX2xvb2t1cF9yY3UoKSBjb3VsZCByZWFkIG9yIHByb3BhZ2F0ZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gdGhlIHRhaWwgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gQmVjYXVzZSB0aGUgcGF0Y2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3JlZ3Jlc3Npb24gdGVzdGluZyBpcyBzdWZmaWNpZW50IGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOGMzM2Y0MGFhMWE0NWIyYzZlMTNmYTRhNDI2ZDE5ZWJkNzVkNjU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li43MzA1NzFlOTJhZjgxIDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbisrKyBiL2ZzL2RjYWNoZS5jXG5AQCAtMTkxMCwxMiArMTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdC8qXG4tXHQgKiBXZSBndWFyYW50ZWUgdGhhdCB0aGUgaW5saW5lIG5hbWUgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLlxuLVx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxuLVx0ICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0XG4tXHQgKiBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyXG4rXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbitcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XG4rXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxuK1x0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXG4rXHQgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLlxuK1x0ICpcbitcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXG4rXHQgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCxcbitcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cbiBcdCAqL1xuLVx0ZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcbitcdG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbiBcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbiBcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4gXHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjU0Ljk4MzA1MjIwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDA1ODg0NzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZW50cnkgSW5pdGlhbGl6YXRpb246IEEgQ2xvc2VyIExvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRjYWNoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0LCBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtgLCBvbmx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgKmxhc3QqIGJ5dGUgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciBpcyBudWxsLXRlcm1pbmF0ZWQuIFRoYXQncyBub3QgaWRlYWwsIGFuZCBoZXJlJ3Mgd2h5LlxuXG5UaGUgY29kZSdzIGNvbW1lbnQgbWVudGlvbnMgcmVuYW1lIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBob3cgYG1lbWNweWAgaXMgdXNlZCB0byBkbyBhIG5hbWUgc3dpdGNoLiBUaGUgY3JpdGljYWwgY29uY2VybiBpcyB0aGF0IGlmIHRoZSAqd2hvbGUqIGlubGluZSBidWZmZXIgaXNuJ3QgaW5pdGlhbGl6ZWQsIHdlIGNvdWxkIGVuZCB1cCBwcm9wYWdhdGluZyBnYXJiYWdlIGRhdGEgZHVyaW5nIGEgYHJlbmFtZWAgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYm90aCBgY29weV9uYW1lKClgIGFuZCBgc3dhcF9uYW1lcygpYCBjb3B5IHRoZSB3aG9sZSBgZF9zaG9ydG5hbWVgIGZpZWxkLCBhbmQgYF9fZF9sb29rdXBfcmN1KClgIG1pZ2h0IHRyYW5zaWVudGx5IHJlYWQgYnl0ZXMgZnJvbSBpdCBhcyB3ZWxsLCBlc3BlY2lhbGx5IHdoaWxlIGEgYHJlbmFtZSgpYCBpcyByZXdyaXRpbmcgaXQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzLlxuXG5UaGUgcGF0Y2gncyByZXBsYWNlbWVudCwgYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLCBub3cgKmZ1bGx5KiBpbml0aWFsaXplcyB0aGUgYGRfc2hvcnRuYW1lYCBidWZmZXIgdG8gemVyby4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZG9uJ3QgbGVhayBvdXQgZHVyaW5nIHJlbmFtZSBvcGVyYXRpb25zLiBJdCBlZmZlY3RpdmVseSBwcm92aWRlcyBhIGd1YXJhbnRlZWQgbnVsbC10ZXJtaW5hdGlvbiBhdCB0aGUgZW5kIChidXQgYmV0dGVyKSwgcmVnYXJkbGVzcyBvZiBpbnRlcm5hbCBudWxsIGNoYXJhY3RlcnMsIGFuZCBzYWZlZ3VhcmRzIGFnYWluc3QgdW5leHBlY3RlZCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBOb3cgdGhlIGNvZGUgaXMgbXVjaCBzYWZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjI5LjA0MTkwNDE2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHQgXFxuMTkwMTpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbjE5MDI6XFx0e1xcbjE5MDM6XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbjE5MDQ6XFx0XFx0Y2hhciAqZG5hbWU7XFxuMTkwNTpcXHRcXHRpbnQgZXJyO1xcbjE5MDY6XFx0XFxuMTkwNzpcXHRcXHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFxcdTAwMjZzYi1cXHUwMDNlc19kZW50cnlfbHJ1LFxcbjE5MDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuMTkwOTpcXHRcXHRpZiAoIWRlbnRyeSlcXG4xOTEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHQvKlxcbjE5MTM6XFx0XFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXFxuMTkxNDpcXHRcXHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxcbjE5MTU6XFx0XFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4xOTE2OlxcdFxcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxcbjE5MTc6XFx0XFx0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cXG4xOTE4OlxcdFxcdCAqXFxuMTkxOTpcXHRcXHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxcbjE5MjA6XFx0XFx0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXFxuMTkyMTpcXHRcXHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXFxuMTkyMjpcXHRcXHQgKi9cXG4xOTIzOlxcdFxcdG1lbXNldChkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XFxuMTkyNDpcXHRcXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XFxuMTkyNTpcXHRcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuMTkyNjpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbjE5Mjc6XFx0XFx0fSBlbHNlIGlmIChuYW1lLVxcdTAwM2VsZW4gXFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcXG4xOTI4OlxcdFxcdFxcdHN0cnVjdCBleHRlcm5hbF9uYW1lICpwO1xcbjE5Mjk6XFx0XFxuMTkzMDpcXHRcXHRcXHRwID0ga21hbGxvY19mbGV4KCpwLCBuYW1lLCBuYW1lLVxcdTAwM2VsZW4gKyAxLFxcbjE5MzE6XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1JFQ0xBSU1BQkxFKTtcXG4xOTMyOlxcdFxcdFxcdGlmICghcCkge1xcbjE5MzM6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGRlbnRyeV9jYWNoZSwgZGVudHJ5KTsgXFxuMTkzNDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTM1OlxcdFxcdFxcdH1cXG4xOTM2OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnAtXFx1MDAzZWNvdW50LCAxKTtcXG4xOTM3OlxcdFxcdFxcdGRuYW1lID0gcC1cXHUwMDNlbmFtZTtcXG4xOTM4OlxcdFxcdH0gZWxzZSAge1xcbjE5Mzk6XFx0XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4xOTQwOlxcdFxcdH1cXHRcXG4xOTQxOlxcdFxcbjE5NDI6XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVxcdTAwM2VsZW47XFxuMTk0MzpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2ggPSBuYW1lLVxcdTAwM2VoYXNoO1xcbjE5NDQ6XFx0XFx0bWVtY3B5KGRuYW1lLCBuYW1lLVxcdTAwM2VuYW1lLCBuYW1lLVxcdTAwM2VsZW4pO1xcbjE5NDU6XFx0XFx0ZG5hbWVbbmFtZS1cXHUwMDNlbGVuXSA9IDA7XFxuMTk0NjpcXHRcXG4xOTQ3OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VlIHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyICovXFxuMTk0ODpcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lLCBkbmFtZSk7IC8qIF5eXiAqL1xcbjE5NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjI5LjA0MjA3NjcwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODY5MDIxNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGBfX2RfYWxsb2NgIHB1bGxzIGEgYGRlbnRyeWAgZnJvbSB0aGUgYGRlbnRyeV9jYWNoZWAgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2NfbHJ1YC4gQnV0IHRoYXQgY2FjaGUgZG9lc24ndCBuZWNlc3NhcmlseSB6ZXJvIG1lbW9yeSwgcmlnaHQ/IEl0IHVzZXMgZmxhZ3MsIGJ1dCBJJ20gbm90IHN1cmUgaWYgYGRfc2hvcnRuYW1lYCBpcyBhbHdheXMgemVyb2VkLiBUaGVuLCB3YWl0LCB0aGlzIHBhdGNoISBJdCdzIGNoYW5naW5nIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO2AgdG8gYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBTbywgaXQncyBmaXhpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUhXG5cbkJ1dCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgS01TQU4gc2Vzc2lvbj8gTGV0J3MgY2xhcmlmeSEgS01TQU4gaXMgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMsIHdoaWNoIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgdG9vbHMgZG9uJ3QgY2F0Y2guIFRoZSBydWxlIGlzLCBcIk5PIEtNU0FOIElGIEtBU0FOIENBVENIRVMgSVQhXCJcblxuTm93IHRoZSBjcml0ZXJpYSBhcmUga2V5OiBJIG5lZWQgdG8gY29uc2lkZXIgYE5lZWRzS01TQU49dHJ1ZWAgb25seSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyByaXNrcyBsaWtlOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG40LiBCb3VuZHMgY2hlY2tzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy5cblxuQ29udmVyc2VseSwgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmOlxuLSBJdCdzIG1haW5seSBhYm91dCBvdXQtb2YtYm91bmRzLCBvdmVyZmxvd3MsIE5VTEwgZGVyZWZlcmVuY2VzLCBldGMuIChLQVNBTiBjYXRjaGVzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkICh1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKS5cbi0gVGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy5cblxuV2FpdCwgdGhpcyBwYXRjaCAqZml4ZXMqIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AgYnkgYWRkaW5nIGBtZW1zZXRgLiBTbywgZG9lcyB0aGUgcGF0Y2ggaXRzZWxmICppbnRyb2R1Y2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyEgUXVpdGUgdGhlIG9wcG9zaXRlLCBpdCAqZWxpbWluYXRlcyogYSBwb3RlbnRpYWwgc291cmNlIG9mIGl0LiBOb3csIHdoeSB3YXMgdGhpcyBwYXRjaCBzdWJtaXR0ZWQ/IFdhcyB0aGUgcHJldmlvdXMgY29kZSB0cmlnZ2VyaW5nIGEgS01TQU4gaXNzdWUsIG9yIHdhcyB0aGlzIGEgcHJvYWN0aXZlIGZpeD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSW4gYW55IGNhc2UsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBjcml0ZXJpYSwgSSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjM1LjkxMTEwMjI5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4NDUwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MTItXFx0LypcXG5mcy9kY2FjaGUuYzoxOTEzOlxcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxcbmZzL2RjYWNoZS5jLTE5MTQtXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjY6MzUuOTY3OTU0ODgzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNDMxMjE1MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIGluIGBmcy9kY2FjaGUuY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBnaXQgbG9nYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIG9yIG1heWJlIGxvb2sgZm9yIHJlbGF0ZWQgY29tbWl0cywgYnV0IHNpbmNlIEkgaGF2ZSB0aGUgcGF0Y2ggaXRzZWxmLCB0aGF0J3Mgd2hhdCBJJ2xsIGRvLiBUaGUgY29kZSBtb2RpZmllcyBgX19kX2FsbG9jYCBpbiBgZnMvZGNhY2hlLmNgLiBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGd1aWRpbmcgcHJpbmNpcGxlIGhlcmUgaXMgdG8gKmF2b2lkKiBhIEtNU0FOIHNlc3Npb24gaWYgZXhpc3RpbmcgY2hlY2tzLCBzdWNoIGFzIEtBU0FOLCB3b3VsZCBhbHJlYWR5IGNhdGNoIHRoZSBidWcuIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZSwgYW5kIEknbSBsb29raW5nIGZvciAqdW5pcXVlKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuQW5hbHl6aW5nIHRoZSBkaWZmLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AgaXMgaW5pdGlhbGl6ZWQuIFByZXZpb3VzbHksIG9ubHkgdGhlIGxhc3QgYnl0ZSB3YXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSByZXN0IHdhcyBsZWZ0IGFzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbGxvY2F0ZWQgZnJvbSB0aGUgc2xhYiBjYWNoZS4gVGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBhY2Nlc3NlZCBieSBgY29weV9uYW1lKClgLCBgc3dhcF9uYW1lcygpYCBkdXJpbmcgcmVuYW1lLCBvciBwb3RlbnRpYWxseSBieSBgX19kX2xvb2t1cF9yY3UoKWAuIFRoaXMgaXMgdGV4dGJvb2sgS01TQU4gbWF0ZXJpYWwsIGFzIHRoZXNlIGFjY2Vzc2VzIHdlcmUgdHJpZ2dlcmluZyBLTVNBTiBmYWlsdXJlcy4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoYXQgc2luZ2xlLWJ5dGUgemVyb2luZyB3aXRoIGBtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgLCBpbml0aWFsaXppbmcgdGhlICplbnRpcmUqIGJ1ZmZlciB0byB6ZXJvLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgbm90IGlmIHRoZSAqcHJldmlvdXMqIGNvZGUgaGFkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIGJ1dCB3aGV0aGVyIHRoaXMgcGF0Y2ggKmludHJvZHVjZXMqIG5ldyByaXNrcyBvciBleHBvc2VzIGFueSB0aGF0IGFyZSBvbmx5IGRldGVjdGFibGUgYnkgS01TQU4uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIHBhdGNo4oCZcyBpbXBhY3QuXG5cbk5vdywgbGV0J3MgY2FyZWZ1bGx5IHJldmlldyB0aGUgS01TQU4gY3JpdGVyaWEuIE15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBvciBtb2RpZmllcyByaXNrczpcblxuKiAgIEknbSBsb29raW5nIGZvciBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuIFRoaXMgaXNuJ3Qgc2VuZGluZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLlxuKiAgIEknbSBsb29raW5nIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIHNlZW1zIHNpbXBsZS4gVGhlIHBhdGNoIGl0c2VsZiBpbml0aWFsaXplcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgKmJlZm9yZSogYW55IHJlYWRzIGhhcHBlbi5cbiogICBJJ20gbG9va2luZyBmb3IgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhbmQgY29ycmVjdHMgdGhlIGlzc3VlIHdpdGggdGhlIG9sZCBjb2RlLCBlbnN1cmluZyB0aGUgaW5saW5lIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQuIEl0ICpwcmV2ZW50cyogdGhhdCBzaXR1YXRpb24uXG4qICAgSSdtIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcy4gVGhlIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55IGxvZ2ljIHdoaWNoIHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlbiBsZXQncyByZXZpZXcgdGhlIGNhc2VzIGluIHdoaWNoIGBOZWVkc0tNU0FOPWZhbHNlYFxuXG4qICAgVGhlIHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93LCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWc6IHRoZXNlIGFyZSBhbGwgaGFuZGxlZCBieSBleGlzdGluZyB0b29scy5cbiogICBUaGUgcGF0Y2ggemVyby1pbml0aWFsaXplcyBvciBvdGhlcndpc2UgaW5pdGlhbGl6ZXMgYWxsIHN0cnVjdHVyZXMgYmVmb3JlIHRoZXkgYXJlIHJlYWQgb3IgY29waWVkOiBCaW5nby4gVGhlIGBtZW1zZXRgIGRvZXMgcHJlY2lzZWx5IHRoYXQhXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IFRoaXMgc2VlbXMgY29ycmVjdC4gVGhlIHBhdGNoIHJlbW92ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbS5cblxuVGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRyZXNzZXMgYW5kIGZpeGVzIGEgcHJpb3IgcHJvYmxlbSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnkgdXNpbmcgYG1lbXNldGAuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBhbmQgaXQncyBhIGRpcmVjdCBmaXggZm9yIGEgS01TQU4gaXNzdWUgaW4gdGhlIHByZXZpb3VzIHZlcnNpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYG1lbXNldGAgaXRzZWxmIGlzbid0IGEgc291cmNlIG9mIGJ1Z3MsIGJ1dCB0aGUgY29kZSBpbiBjb250ZXh0IGRvZXMgbm90IHRyaWdnZXIgYW55IG9mIHRoZSBzdGFuZGFyZCBtZW1zZXQgcGl0ZmFsbHMgc3VjaCBhcyBzaXplIG1pc2NhbGN1bGF0aW9uIG9yIGJ1ZmZlciBvdmVyZmxvd3MuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIHBhdGNoIGlzIGEgZml4IGZvciBLTVNBTiwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNjo0OS4zOTkxNzIzNzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODcwMzcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZXh0ZXJuYWxfbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2RjYWNoZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNjo0OS40NTIwNTA0ODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzIzNDQzNDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGRjYWNoZS5oIEhlYWRlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBkX3Nob3J0bmFtZWAuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5jbHVkZS9saW51eC9kY2FjaGUuaGAgaGVhZGVyIGZpbGUuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBkY2FjaGUsIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBJJ20gZ29pbmcgdG8gbG9vayB0aHJvdWdoIHRoYXQgZmlsZSBjYXJlZnVsbHksIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yIHRoZSBgZF9zaG9ydG5hbWVgIGlkZW50aWZpZXIuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkLCBvciBhdCBsZWFzdCBkZWNsYXJlZCwgZGlyZWN0bHkgd2l0aGluIHRoYXQgaGVhZGVyLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLCBpdHMgdXNhZ2UsIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGRjYWNoZS1yZWxhdGVkIGRhdGEgbWVtYmVycy4gVGhpcyBtaWdodCBpbnZvbHZlIHRyYWNpbmcgYmFjayB0aHJvdWdoIGFueSByZWxhdGVkIG1hY3JvcyBvciB0eXBlZGVmcyBpZiB0aGUgZGVjbGFyYXRpb24gaXNuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYzMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjU2LjY4NjQ4ODMyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzk5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZF9zaG9ydG5hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9kY2FjaGUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTg0PXVuaW9uIHNob3J0bmFtZV9zdG9yZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTg5LSNkZWZpbmUgZF9sb2NrXFx0ZF9sb2NrcmVmLmxvY2tcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjkwOiNkZWZpbmUgZF9pbmFtZSBkX3Nob3J0bmFtZS5zdHJpbmdcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTkxLXN0cnVjdCBjb21wbGV0aW9uX2xpc3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTkzPXN0cnVjdCBkZW50cnkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0xMDQtXFx0XFx0XFx0XFx0XFx0ICogbmVnYXRpdmUgKi9cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjEwNTpcXHR1bmlvbiBzaG9ydG5hbWVfc3RvcmUgZF9zaG9ydG5hbWU7XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0xMDYtXFx0LyogLS0tIGNhY2hlbGluZSAxIGJvdW5kYXJ5ICg2NCBieXRlcykgd2FzIDMyIGJ5dGVzIGFnbyAtLS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjY6NTYuNzM1MDM0MTc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5ODA5MTUxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGRjYWNoZS5oIGRldGFpbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDgwIHRocm91Z2ggOTUgb2YgYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBrZXJuZWwgZGVmaW5lcyBhbmQgaW50ZXJhY3RzIHdpdGggaXRzIGRpcmVjdG9yeSBjYWNoZSBhdCB0aGlzIGxldmVsIG9mIGFic3RyYWN0aW9uLiBJJ20gZXhwZWN0aW5nIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxpa2VseSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBwcm90b3R5cGVzIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gZGVudHJ5IG1hbmFnZW1lbnQuIENvbnNpZGVyaW5nIHdoZXJlIHdlIGFyZSBpbiB0aGUgaW5jbHVkZSBoaWVyYXJjaHksIHRoaXMgc2hvdWxkIGJlIHRoZSBsb3ctbGV2ZWwsIGludGVybmFsIGZhY2luZyBkZWNsYXJhdGlvbiBhbmQgbm90IHRoZSBoaWdoLWxldmVsIEFQSS4gVGhpcyBtaWdodCBjb3ZlciB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZGVudHJpZXMsIHRoZWlyIGZsYWdzLCBvciBwZXJoYXBzIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSBjb250cm9sIHdpdGhpbiB0aGUgZGNhY2hlLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IG9mIHRoZSBvbGRlciBsb2NraW5nIGFwcHJvYWNoZXMsIHN1Y2ggYXMgdGhlIHNwaW5sb2NrcywgYXJlIGVtcGxveWVkIGF0IHRoaXMgbGV2ZWwuIEknbGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIHJlZmVyZW5jZXMgdG8gaG93IGRlbnRyaWVzIGFyZSBsaW5rZWQgaW50byB0aGUgbGFyZ2VyIGZpbGUgc3lzdGVtIG5hbWVzcGFjZS4gSSBhbSBwcmVwYXJlZCB0byBhbmFseXplIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbm9kZSBjYWNoZSBhcyB3ZWxsLCBpZiB0aGUgY29kZSBjb250YWlucyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI3OjAyLjcxNTk1MTYxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2RjYWNoZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNlbmRpZlxcbiAgODE6XFx0XFxuICA4MjpcXHQjZGVmaW5lIEROQU1FX0lOTElORV9MRU4gKEROQU1FX0lOTElORV9XT1JEUypzaXplb2YodW5zaWduZWQgbG9uZykpXFxuICA4MzpcXHRcXG4gIDg0OlxcdHVuaW9uIHNob3J0bmFtZV9zdG9yZSB7XFxuICA4NTpcXHRcXHR1bnNpZ25lZCBjaGFyIHN0cmluZ1tETkFNRV9JTkxJTkVfTEVOXTtcXG4gIDg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgd29yZHNbRE5BTUVfSU5MSU5FX1dPUkRTXTtcXG4gIDg3OlxcdH07XFxuICA4ODpcXHRcXG4gIDg5OlxcdCNkZWZpbmUgZF9sb2NrXFx0ZF9sb2NrcmVmLmxvY2tcXG4gIDkwOlxcdCNkZWZpbmUgZF9pbmFtZSBkX3Nob3J0bmFtZS5zdHJpbmdcXG4gIDkxOlxcdHN0cnVjdCBjb21wbGV0aW9uX2xpc3Q7XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0cnVjdCBkZW50cnkge1xcbiAgOTQ6XFx0XFx0LyogUkNVIGxvb2t1cCB0b3VjaGVkIGZpZWxkcyAqL1xcbiAgOTU6XFx0XFx0dW5zaWduZWQgaW50IGRfZmxhZ3M7XFx0XFx0LyogcHJvdGVjdGVkIGJ5IGRfbG9jayAqL1xcbiAgOTY6XFx0XFx0c2VxY291bnRfc3BpbmxvY2tfdCBkX3NlcTtcXHQvKiBwZXIgZGVudHJ5IHNlcWxvY2sgKi9cXG4gIDk3OlxcdFxcdHN0cnVjdCBobGlzdF9ibF9ub2RlIGRfaGFzaDtcXHQvKiBsb29rdXAgaGFzaCBsaXN0ICovXFxuICA5ODpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkX3BhcmVudDtcXHQvKiBwYXJlbnQgZGlyZWN0b3J5ICovXFxuICA5OTpcXHRcXHR1bmlvbiB7XFxuIDEwMDpcXHRcXHRzdHJ1Y3QgcXN0ciBfX2RfbmFtZTtcXHRcXHQvKiBmb3IgdXNlIE9OTFkgaW4gZnMvZGNhY2hlLmMgKi9cXG4gMTAxOlxcdFxcdGNvbnN0IHN0cnVjdCBxc3RyIGRfbmFtZTtcXG4gMTAyOlxcdFxcdH07XFxuIDEwMzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XFx0XFx0LyogV2hlcmUgdGhlIG5hbWUgYmVsb25ncyB0byAtIE5VTEwgaXNcXG4gMTA0OlxcdFxcdFxcdFxcdFxcdFxcdCAqIG5lZ2F0aXZlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI3OjAyLjcxNjAyOTg1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzI4MDEwNDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lYCBaZXJvaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYCBpcyAqZXhhY3RseSogYEROQU1FX0lOTElORV9MRU5gIGluIHNpemUuIFRoaXMgbWVhbnMgd2hlbiBJIGBtZW1zZXRgIHRoYXQgc3RyaW5nIHRvIHplcm8sIEknbSBjb21wbGV0ZWx5IHdpcGluZyB0aGUgKmVudGlyZSogYGRfc2hvcnRuYW1lYCB1bmlvbi4gQ3J1Y2lhbGx5LCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiBnb2luZyBvdXQtb2YtYm91bmRzLiBJdCB6ZXJvZXMgdGhlIHdob2xlIHRoaW5nOyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZW1haW5zLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrYWdlLiBJbiBmYWN0LCBpdCAqZWxpbWluYXRlcyogYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB0aGF0IGNvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllciwgbGlrZSBkdXJpbmcgYSBjb3B5IG9wZXJhdGlvbiBvciBldmVuIGp1c3QgYSB0cmFuc2llbnQgcmVhZCBvZiB0aGF0IGBkX3Nob3J0bmFtZWAgZmllbGQuXG5cblNvLCBib3R0b20gbGluZTogdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gS0FTQU4gYW5kIG91ciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHJlZ3Jlc3Npb24gdGVzdGluZy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUgdGhhdCB3YXJyYW50cyBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQgd291bGQgYmUgb3ZlcmtpbGwuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgZm9yIG15IG93biBwZWFjZSBvZiBtaW5kLCB0aGF0IEkndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzOlxuXG4xLiAgYE5lZWRzS01TQU5gOiBGYWxzZS4gQ2hlY2suXG4yLiAgYEtNU0FOUmVhc29uaW5nYDogTmVlZCB0byBpbmNsdWRlIHNvbWUgc29saWQgcmVhc29uaW5nIGNvbnRyYXN0aW5nIHRoZSBuZWVkIGZvciBLQVNBTiB2cy4gS01TQU4gaW4gdGhlIGNvZGUuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBLQVNBTiBpcyBzdWZmaWNpZW50IGluIG15IHJlYXNvbmluZy4gQ2hlY2suXG4zLiAgTm93IEkganVzdCBuZWVkIHRvIGNhbGwgdGhhdCBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZmluYWxpemUgZXZlcnl0aGluZy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBpcyBjbGVhci4gSSdtIHNhdGlzZmllZC4gVGhpcyBwYXRjaCBpcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzE5LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI3OjM1Ljk5NjEzNzE4NloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGRlbnRyeSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKSB1c2luZyBtZW1zZXQoLi4uLCAwLCBETkFNRV9JTkxJTkVfTEVOKSBpbnN0ZWFkIG9mIG9ubHkgc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIE5VTC4gVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2hlcmUgY29weV9uYW1lKCksIHN3YXBfbmFtZXMoKSwgb3IgX19kX2xvb2t1cF9yY3UoKSBjb3VsZCByZWFkIG9yIHByb3BhZ2F0ZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gdGhlIHRhaWwgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gQmVjYXVzZSB0aGUgcGF0Y2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3JlZ3Jlc3Npb24gdGVzdGluZyBpcyBzdWZmaWNpZW50IGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 21:31:24 +0000 UTC FinishedAt: 2026-09-14 22:27:37 +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": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "5b179425-8a67-407f-81c4-cddd025c0305" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__d_alloc", "d_move", "d_exchange" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "f5d607b8091438d8416d0e3ae02532a18539b48b", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfbW92ZSYjMzQ7LAogICAgJiMzNDtkX2V4Y2hhbmdlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBWRlMgY29kZSBpbiBfX2RfYWxsb2MoKSB0byBmdWxseSB6ZXJvIHRoZSBpbmxpbmUgZGVudHJ5IHNob3J0bmFtZSBidWZmZXIgd2l0aCBtZW1zZXQoKSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvcGFnYXRpb24gYW5kIGRhdGEgcmFjZXMgZHVyaW5nIHJlbmFtZSAoY29weV9uYW1lL3N3YXBfbmFtZXMpIGFuZCBsb2NrbGVzcyBSQ1UgbG9va3VwLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByZWdyZXNzaW9ucywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9ycyBpbiBkZW50cnkgYWxsb2NhdGlvbiBhbmQgcmVuYW1pbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOGMzM2Y0MGFhMWE0NWIyYzZlMTNmYTRhNDI2ZDE5ZWJkNzVkNjU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xuaW5kZXggMWIxYTgxZjEwZGE2Ny4uNzMwNTcxZTkyYWY4MSAxMDA2NDRcbi0tLSBhL2ZzL2RjYWNoZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kY2FjaGUuY1xuQEAgLTE5MTAsMTIgJiM0MzsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbiYjNDM7XHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbiYjNDM7XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuJiM0MztcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4mIzQzO1x0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXG4mIzQzO1x0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXG4mIzQzO1x0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXG4mIzQzO1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuJiM0MztcdG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbiBcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbiBcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4gXHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZF9hbGxvYyYjMzQ7LAogICAgJiMzNDtkX21vdmUmIzM0OywKICAgICYjMzQ7ZF9leGNoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBWRlMgY29kZSBpbiBfX2RfYWxsb2MoKSB0byBmdWxseSB6ZXJvIHRoZSBpbmxpbmUgZGVudHJ5IHNob3J0bmFtZSBidWZmZXIgd2l0aCBtZW1zZXQoKSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvcGFnYXRpb24gYW5kIGRhdGEgcmFjZXMgZHVyaW5nIHJlbmFtZSAoY29weV9uYW1lL3N3YXBfbmFtZXMpIGFuZCBsb2NrbGVzcyBSQ1UgbG9va3VwLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByZWdyZXNzaW9ucywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9ycyBpbiBkZW50cnkgYWxsb2NhdGlvbiBhbmQgcmVuYW1pbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOGMzM2Y0MGFhMWE0NWIyYzZlMTNmYTRhNDI2ZDE5ZWJkNzVkNjU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjczMDU3MWU5MmFmODEgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4KLQkgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lCi0JICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0Ci0JICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlcgomIzQzOwkgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmQKJiM0MzsJICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnkKJiM0MzsJICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmQKJiM0MzsJICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lCiYjNDM7CSAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lCiYjNDM7CSAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLAomIzQzOwkgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuCiAJICovCi0JZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7CiYjNDM7CW1lbXNldChkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQluYW1lID0gJmFtcDtzbGFzaF9uYW1lOwogCQlkbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogRGVudHJ5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSBpbiBgZnMvZGNhY2hlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgcmVwbGFjZW1lbnQgb2YgYSBkaXJlY3QgYXNzaWdubWVudCB3aXRoIGBtZW1zZXRgIG9uIHRoZSBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGJ1ZmZlci4gVGhlIG9sZCBjb21tZW50IG1lbnRpb25lZCBOVUwtdGVybWluYXRpb24gZm9yIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZS4gTm93LCB3aXRoIHRoaXMgbmV3IGFwcHJvYWNoLCB0aGUgY29tbWVudCBzdWdnZXN0cyBhIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuIFRoZSByZWFzb25pbmcgcG9pbnRzIHRvIGBjb3B5X25hbWUoKWAgYW5kIGBzd2FwX25hbWVzKClgIGNvcHlpbmcgdGhlIGBkX3Nob3J0bmFtZWAgZW50aXJlbHkuIEFueSB1bmluaXRpYWxpemVkIHBhcnRzIGNvdWxkIHRoZW4gcHJvcGFnYXRlLiBBbHNvLCBkdXJpbmcgcmVuYW1lIG9wZXJhdGlvbnMsIGBfX2RfbG9va3VwX3JjdSgpYCBtaWdodCB0cmFuc2llbnRseSByZWFkIGJ5dGVzIGZyb20gdGhlIGlubGluZSBuYW1lIHdoaWxlIGl0IGlzIGJlaW5nIHJld3JpdHRlbi4gVGhpcyBtYWtlcyBzZW5zZS4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHNvbWUgbW9yZSBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayB0aGUgR2l0IGxvZyB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBtYXliZSBzb21lIG1vcmUgZXhwbGFuYXRpb25zIGFyb3VuZCB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxOTEwLiBJIHNob3VsZCBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBmaWxlJiMzOTtzIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZSB0byBnZXQgYSBiZXR0ZXIgZmVlbCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gQW5kLCBmaW5hbGx5LCBJJiMzOTtsbCBwcm9iYWJseSBjYWxsIGByZWFkLWZpbGVgIG9uIGBmcy9kY2FjaGUuY2AgYXJvdW5kIGxpbmUgMTkxMCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSBgbWVtc2V0YCBpcyBwcmVmZXJyZWQgbm93IG92ZXIgdGhlIHNpbXBsZSBOVUwgdGVybWluYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5NTpcdCAqXG4xODk2Olx0ICogQWxsb2NhdGVzIGEgZGVudHJ5LiBJdCByZXR1cm5zICVOVUxMIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudCBtZW1vcnlcbjE4OTc6XHQgKiBhdmFpbGFibGUuIE9uIGEgc3VjY2VzcyB0aGUgZGVudHJ5IGlzIHJldHVybmVkLiBUaGUgbmFtZSBwYXNzZWQgaW4gaXNcbjE4OTg6XHQgKiBjb3BpZWQgYW5kIHRoZSBjb3B5IHBhc3NlZCBpbiBtYXkgYmUgcmV1c2VkIGFmdGVyIHRoaXMgY2FsbC5cbjE4OTk6XHQgKi9cbjE5MDA6XHQgXG4xOTAxOlx0c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbjE5MDI6XHR7XG4xOTAzOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4xOTA0Olx0XHRjaGFyICpkbmFtZTtcbjE5MDU6XHRcdGludCBlcnI7XG4xOTA2Olx0XG4xOTA3Olx0XHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSxcbjE5MDg6XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuMTkwOTpcdFx0aWYgKCFkZW50cnkpXG4xOTEwOlx0XHRcdHJldHVybiBOVUxMO1xuMTkxMTpcdFxuMTkxMjpcdFx0LypcbjE5MTM6XHRcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuMTkxNDpcdFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbjE5MTU6XHRcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4xOTE2Olx0XHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbjE5MTc6XHRcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4xOTE4Olx0XHQgKlxuMTkxOTpcdFx0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbjE5MjA6XHRcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuMTkyMTpcdFx0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuMTkyMjpcdFx0ICovXG4xOTIzOlx0XHRtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XG4xOTI0Olx0XHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4xOTI1Olx0XHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuMTkyNjpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTI3Olx0XHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbjE5Mjg6XHRcdFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XG4xOTI5Olx0XG4xOTMwOlx0XHRcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXHUwMDNlbGVuICYjNDM7IDEsXG4xOTMxOlx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xuMTkzMjpcdFx0XHRpZiAoIXApIHtcbjE5MzM6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcbjE5MzQ6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MzU6XHRcdFx0fVxuMTkzNjpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlY291bnQsIDEpO1xuMTkzNzpcdFx0XHRkbmFtZSA9IHAtXHUwMDNlbmFtZTtcbjE5Mzg6XHRcdH0gZWxzZSAge1xuMTkzOTpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTQwOlx0XHR9XHRcbjE5NDE6XHRcbjE5NDI6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDM6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0NDpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgZGVudHJ5YCBTaG9ydG5hbWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgaG93IHRoZSBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGJ1ZmZlciBpcyBpbml0aWFsaXplZC4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBvbmx5IHRoZSBsYXN0IGJ5dGUgd2FzIGV4cGxpY2l0bHkgemVyb2VkIChgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCksIGJ1dCBub3cgdGhlIGVudGlyZSBidWZmZXIgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGlzc3VlcyBsaWtlIEtNU0FOL2RhdGEgcmFjZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGxlYWRpbmcgdG8gaW5mbyBsZWFrcywgZXNwZWNpYWxseSBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgX19kX2xvb2t1cF9yY3VgIGR1cmluZyByZW5hbWVzLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmcgd2l0aCBzeXprYWxsZXI/ICBMZXQmIzM5O3MgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4KClRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmUuIFdlJiMzOTtyZSB0b3VjaGluZyBgZnMvZGNhY2hlLmNgLCB3aGljaCBpcyBjb3JlIFZGUyBkY2FjaGUgc3Vic3lzdGVtIGNvZGUuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fZF9hbGxvY2AuICBGcm9tIHRoZSBmaXJzdCBnbGFuY2UsIHRoZSBjaGFuZ2UgaW4gYF9fZF9hbGxvY2AgaXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtLiBJdCBkb2VzbiYjMzk7dCBmYWxsIGludG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIOKAkyBpdCYjMzk7cyBub3QgZG9jdW1lbnRhdGlvbiwgbm90IHVzZXJzcGFjZSwgbm90IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBkcml2ZXIgdGVhcmRvd24uICBTbywgYmFzZWQgb24gdGhlIGhpZ2gtbGV2ZWwgY3JpdGVyaWEsIEkmIzM5O2Qgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpCdXQgbGV0JiMzOTtzIG5vdCBqdW1wIHRoZSBndW4uIFNlY3Rpb24gNCBpcyBjcnVjaWFsIOKAkyBwcmV2ZW50aW5nIGRpbHV0aW9uLiAgV2UgbmVlZCB0byBleHRyYWN0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXMgYEZvY3VzU3ltYm9sc2AuIFRoZSBrZXkgaGVyZSBpcyB0byAqYXZvaWQqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gSXMgYF9fZF9hbGxvY2Agb3IgYGRfYWxsb2NgIGEgZ2VuZXJpYywgdWJpcXVpdG91cyBtZW1vcnkgYWxsb2NhdG9yIG9yIHNvbWV0aGluZyBlbHNlIHRoYXQmIzM5O3MgY2FsbGVkIGV2ZXJ5d2hlcmU/IFByb2JhYmx5ISAgVGhlIGlzc3VlIGZvY3VzZXMgb24gdGhlIGRlbnRyeSBuYW1lLiBUaGUgY29tbWVudCBjbGVhcmx5IG1lbnRpb25zIHRoZSBjb25jZXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgX19kX2xvb2t1cF9yY3VgLiBTbywgdGhvc2UgZnVuY3Rpb25zIG9yIHRoZWlyIGNhbGxlcnMgYXJlIHByb2JhYmx5IG1vcmUgcmVsZXZhbnQgYXMgZm9jdXMgc3ltYm9scyB0aGFuIGBfX2RfYWxsb2NgIG9uIGl0cyBvd24uIEl0IG1lbnRpb25zIHRoYXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYCBjb3B5IHRoZSBlbnRpcmUgZF9zaG9ydG5hbWUsIGFuZCB0aGF0IGBfX2RfbG9va3VwX3JjdWAgbWF5IHJlYWQgdW5pbml0aWFsaXplZCBieXRlcyB3aGVuIHJlbmFtZSgpIHJld3JpdGVzIGluIHBsYWNlLgoKSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCBgZnMvZGNhY2hlLmNgIGZvciBgY29weV9uYW1lYCBhbmQgYHN3YXBfbmFtZXNgIHRvIHVuZGVyc3RhbmQgd2hhdCBjYWxscyB0aGVtIGFuZCBpZiB0aGV5IGFyZSBnb29kIGZvY3VzIHN5bWJvbHMuICBJIGFsc28gbmVlZCB0byBzZWUgd2hhdCBgX19kX2FsbG9jYCBkb2VzLCBvciB3aGF0IGNhbGxzIGBkX2FsbG9jYC4gTXkgaHVuY2ggaXMgdGhhdCBsaXN0aW5nIG9ubHkgYF9fZF9hbGxvY2AgbWlnaHQgYmUgdG9vIGJyb2FkOyB3ZSB3YW50IHRoZSBtb3JlIHNwZWNpZmljIGVudHJ5cG9pbnRzIHRvIHRoZSBsb2dpYyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIFRoZSBmdXp6aW5nIGVmZm9ydCBuZWVkcyB0byB0YXJnZXQgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBkZW50cnkgc2hvcnRuYW1lIGluaXRpYWxpemF0aW9uIGFuZCBpdHMgdXNhZ2UgZHVyaW5nIGNvcHlpbmcsIHN3YXBwaW5nLCBvciBsb29rdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGNvcHlfbmFtZXxzd2FwX25hbWVzKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9kY2FjaGUuYy0xOTEyLVx0LypcbmZzL2RjYWNoZS5jOjE5MTM6XHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbmZzL2RjYWNoZS5jOjE5MTQ6XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuZnMvZGNhY2hlLmMtMTkxNS1cdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4tLVxuZnMvZGNhY2hlLmM9Mjk5Mj1FWFBPUlRfU1lNQk9MKGRfbWFrZV9wZXJzaXN0ZW50KTtcbmZzL2RjYWNoZS5jLTI5OTMtXG5mcy9kY2FjaGUuYzoyOTk0OnN0YXRpYyB2b2lkIHN3YXBfbmFtZXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG5mcy9kY2FjaGUuYy0yOTk1LXtcbi0tXG5mcy9kY2FjaGUuYy0zMDMxLVxuZnMvZGNhY2hlLmM6MzAzMjpzdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG5mcy9kY2FjaGUuYy0zMDMzLXtcbi0tXG5mcy9kY2FjaGUuYz0zMDYwPXN0YXRpYyB2b2lkIF9fZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0LFxuLS1cbmZzL2RjYWNoZS5jLTMxMDgtXHRpZiAoIWV4Y2hhbmdlKSB7XG5mcy9kY2FjaGUuYzozMTA5Olx0XHRjb3B5X25hbWUoZGVudHJ5LCB0YXJnZXQpO1xuZnMvZGNhY2hlLmMtMzExMC1cdFx0dGFyZ2V0LVx1MDAzZWRfaGFzaC5wcHJldiA9IE5VTEw7XG4tLVxuZnMvZGNhY2hlLmMtMzExNS1cdFx0dGFyZ2V0LVx1MDAzZWRfcGFyZW50ID0gb2xkX3BhcmVudDtcbmZzL2RjYWNoZS5jOjMxMTY6XHRcdHN3YXBfbmFtZXMoZGVudHJ5LCB0YXJnZXQpO1xuZnMvZGNhY2hlLmMtMzExNy1cdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ0YXJnZXQtXHUwMDNlZF9zaWIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgRmlsZSBTeXN0ZW0gTmFtaW5nIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBzb21lIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgZmlsZSBzeXN0ZW0gaGFuZGxlcyBuYW1lcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgc3dhcF9uYW1lc2AsIGBjb3B5X25hbWVgLCBhbmQgdGhhdCBpbnRyaWd1aW5nIGBfX2RfbW92ZWAgZnVuY3Rpb24uIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byByZW5hbWluZyBvciBtb3ZpbmcgZGlyZWN0b3J5IGVudHJpZXMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgZnVuZGFtZW50YWwgYW5kIG9mdGVuIHBlcmZvcm1hbmNlLWNyaXRpY2FsIG9wZXJhdGlvbnMgd2l0aGluIGEgZmlsZSBzeXN0ZW0uIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgYmVoYXZpb3IuCgpTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGV4YW1pbmluZyBgc3dhcF9uYW1lc2AgYW5kIGBjb3B5X25hbWVgIGluIGBmcy9kY2FjaGUuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCB0aGVzZSB3aWxsIHByb3ZpZGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIsIGFuZCBJJiMzOTtsbCBsaWtlbHkgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIHN0cmF0ZWdpZXMsIGFuZCBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcgYW5kIHdoYXQgaGFwcGVucyBpZiB0aGVzZSBvcGVyYXRpb25zIGZhaWwgbWlkd2F5LiBUaGlzIGluaXRpYWwgYW5hbHlzaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk5NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTk0Olx0c3RhdGljIHZvaWQgc3dhcF9uYW1lcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcbjI5OTU6XHR7XG4yOTk2Olx0XHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwodGFyZ2V0KSkpIHtcbjI5OTc6XHRcdFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKGRlbnRyeSkpKSB7XG4yOTk4Olx0XHRcdFx0LypcbjI5OTk6XHRcdFx0XHQgKiBCb3RoIGV4dGVybmFsOiBzd2FwIHRoZSBwb2ludGVyc1xuMzAwMDpcdFx0XHRcdCAqL1xuMzAwMTpcdFx0XHRcdHN3YXAodGFyZ2V0LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lKTtcbjMwMDI6XHRcdFx0fSBlbHNlIHtcbjMwMDM6XHRcdFx0XHQvKlxuMzAwNDpcdFx0XHRcdCAqIGRlbnRyeTppbnRlcm5hbCwgdGFyZ2V0OmV4dGVybmFsLiAgU3RlYWwgdGFyZ2V0JiMzOTtzXG4zMDA1Olx0XHRcdFx0ICogc3RvcmFnZSBhbmQgbWFrZSB0YXJnZXQgaW50ZXJuYWwuXG4zMDA2Olx0XHRcdFx0ICovXG4zMDA3Olx0XHRcdFx0ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZTtcbjMwMDg6XHRcdFx0XHR0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWU7XG4zMDA5Olx0XHRcdFx0dGFyZ2V0LVx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuMzAxMDpcdFx0XHR9XG4zMDExOlx0XHR9IGVsc2Uge1xuMzAxMjpcdFx0XHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpIHtcbjMwMTM6XHRcdFx0XHQvKlxuMzAxNDpcdFx0XHRcdCAqIGRlbnRyeTpleHRlcm5hbCwgdGFyZ2V0OmludGVybmFsLiAgR2l2ZSBkZW50cnkmIzM5O3NcbjMwMTU6XHRcdFx0XHQgKiBzdG9yYWdlIHRvIHRhcmdldCBhbmQgbWFrZSBkZW50cnkgaW50ZXJuYWxcbjMwMTY6XHRcdFx0XHQgKi9cbjMwMTc6XHRcdFx0XHR0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lO1xuMzAxODpcdFx0XHRcdGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZSA9IHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZTtcbjMwMTk6XHRcdFx0XHRkZW50cnktXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4zMDIwOlx0XHRcdH0gZWxzZSB7XG4zMDIxOlx0XHRcdFx0LypcbjMwMjI6XHRcdFx0XHQgKiBCb3RoIGFyZSBpbnRlcm5hbC5cbjMwMjM6XHRcdFx0XHQgKi9cbjMwMjQ6XHRcdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpJiM0MzsmIzQzOylcbjMwMjU6XHRcdFx0XHRcdHN3YXAoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLndvcmRzW2ldLFxuMzAyNjpcdFx0XHRcdFx0ICAgICB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0pO1xuMzAyNzpcdFx0XHR9XG4zMDI4Olx0XHR9XG4zMDI5Olx0XHRzd2FwKGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoX2xlbiwgdGFyZ2V0LVx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuKTtcbjMwMzA6XHR9XG4zMDMxOlx0XG4zMDMyOlx0c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuMzAzMzpcdHtcbjMwMzQ6XHRcdHN0cnVjdCBleHRlcm5hbF9uYW1lICpvbGRfbmFtZSA9IE5VTEw7XG4zMDM1Olx0XHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpXG4zMDM2Olx0XHRcdG9sZF9uYW1lID0gZXh0ZXJuYWxfbmFtZShkZW50cnkpO1xuMzAzNzpcdFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKHRhcmdldCkpKSB7XG4zMDM4Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2ZXh0ZXJuYWxfbmFtZSh0YXJnZXQpLVx1MDAzZWNvdW50KTtcbjMwMzk6XHRcdFx0ZGVudHJ5LVx1MDAzZV9fZF9uYW1lID0gdGFyZ2V0LVx1MDAzZV9fZF9uYW1lO1xuMzA0MDpcdFx0fSBlbHNlIHtcbjMwNDE6XHRcdFx0ZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lID0gdGFyZ2V0LVx1MDAzZWRfc2hvcnRuYW1lO1xuMzA0MjpcdFx0XHRkZW50cnktXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4zMDQzOlx0XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoX2xlbiA9IHRhcmdldC1cdTAwM2VfX2RfbmFtZS5oYXNoX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDMwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOYW1lIFN3YXBwaW5nIGluIHRoZSBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuYW1lIGhhbmRsaW5nIGNvZGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIHNuaXBwZXRzOiBgY29weV9uYW1lYCwgc3BlY2lmaWNhbGx5IHRoZSBsaW5lIHdoZXJlIGBkZW50cnktJmd0O2Rfc2hvcnRuYW1lYCBnZXRzIGFzc2lnbmVkIGZyb20gYHRhcmdldC0mZ3Q7ZF9zaG9ydG5hbWVgLCBhbmQgdGhlbiB0aGUgYHN3YXBfbmFtZXNgIGZ1bmN0aW9uLCB3aGVyZSB0aGVyZSYjMzk7cyB0aGF0IHN3YXAgb3BlcmF0aW9uIGhhcHBlbmluZyBkaXJlY3RseSBiZXR3ZWVuIGBkZW50cnktJmd0O2Rfc2hvcnRuYW1lYCBhbmQgYHRhcmdldC0mZ3Q7ZF9zaG9ydG5hbWVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhYm91dCBvcHRpbWl6aW5nIG5hbWUgaGFuZGxpbmcsIG1heWJlIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNvcGllcy4gVGhlIGNvcmUgbG9naWMgaGluZ2VzIG9uIHdoZXJlIGBfX2RfbW92ZWAgaXMgYWN0dWFsbHkgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIGFuZCB3aGF0JiMzOTtzIGRyaXZpbmcgdGhpcyBuYW1pbmcgc3RyYXRlZ3kuIFRpbWUgdG8gc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBtYXAgaXRzIGNhbGxlcnMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggYGRlbnRyeWAgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kX21vdmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMtNDYtICogc19yb290c19sb2NrIHByb3RlY3RzOlxuZnMvZGNhY2hlLmM6NDc6ICogICAtIHRoZSBzX3Jvb3RzIGxpc3QgKHNlZSBfX2RfbW92ZSgpL2RlbnRyeV91bmxpc3QoKS9kX29idGFpbl9yb290KCkpXG5mcy9kY2FjaGUuYy00OC0gKiBkZW50cnktXHUwMDNlZF9zYi1cdTAwM2VzX2RlbnRyeV9scnVfbG9jayBwcm90ZWN0czpcbi0tXG5mcy9kY2FjaGUuYz0zMDMyPXN0YXRpYyB2b2lkIGNvcHlfbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcbi0tXG5mcy9kY2FjaGUuYy0zMDU5LSAqL1xuZnMvZGNhY2hlLmM6MzA2MDpzdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcbmZzL2RjYWNoZS5jLTMwNjEtXHRcdCAgICAgYm9vbCBleGNoYW5nZSlcbi0tXG5mcy9kY2FjaGUuYz0zMTU0PXZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuLS1cbmZzL2RjYWNoZS5jLTMxNTYtXHR3cml0ZV9zZXFsb2NrKFx1MDAyNnJlbmFtZV9sb2NrKTtcbmZzL2RjYWNoZS5jOjMxNTc6XHRfX2RfbW92ZShkZW50cnksIHRhcmdldCwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMzE1OC1cdHdyaXRlX3NlcXVubG9jayhcdTAwMjZyZW5hbWVfbG9jayk7XG4tLVxuZnMvZGNhY2hlLmM9MzE2Nz12b2lkIGRfZXhjaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5MSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5Milcbi0tXG5mcy9kY2FjaGUuYy0zMTc1LVxuZnMvZGNhY2hlLmM6MzE3NjpcdF9fZF9tb3ZlKGRlbnRyeTEsIGRlbnRyeTIsIHRydWUpO1xuZnMvZGNhY2hlLmMtMzE3Ny1cbi0tXG5mcy9kY2FjaGUuYz0zMjEwPXN0YXRpYyBpbnQgX19kX3VuYWxpYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICphbGlhcylcbi0tXG5mcy9kY2FjaGUuYy0zMjMwLVx0XHRnb3RvIG91dF9lcnI7XG5mcy9kY2FjaGUuYzozMjMxOlx0X19kX21vdmUoYWxpYXMsIGRlbnRyeSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMzIzMi1cdGlmIChhbGlhcy1cdTAwM2VkX29wIFx1MDAyNlx1MDAyNiBhbGlhcy1cdTAwM2VkX29wLVx1MDAzZWRfdW5hbGlhc191bmxvY2spXG4tLVxuZnMvZGNhY2hlLmM9MzI0Mz1zdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2RjYWNoZS5jLTMyODctXHRcdFx0XHR9XG5mcy9kY2FjaGUuYzozMjg4Olx0XHRcdFx0X19kX21vdmUobmV3LCBkZW50cnksIGZhbHNlKTtcbmZzL2RjYWNoZS5jLTMyODktXHRcdFx0XHR3cml0ZV9zZXF1bmxvY2soXHUwMDI2cmVuYW1lX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBkY2FjaGUuYyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgYG1lbXNldGAgaW50cm9kdWN0aW9uLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBmdXp6YWJpbGl0eSAqZmlyc3QqLiBMZXQmIzM5O3Mgc3RpY2sgdG8gdGhlIGZ1enppbmcgY3JpdGVyaWEuIEkgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBndWlkZWxpbmVzLgoKUmVhZGluZyB0aGUgZ3VpZGVsaW5lcyBjYXJlZnVsbHksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhYm91dCByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvZGNhY2hlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGlzIGlzIHBhcnQgb2YgdGhlIFZGUyBkY2FjaGUgc3Vic3lzdGVtLCBzbyBkZWZpbml0ZWx5ICpub3QqIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3Igb3RoZXIgbmVnYXRpdmUgY3JpdGVyaWEuIFNpbmNlIHRoZSBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSwgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gdGhlcmVmb3JlIGNvbmNsdWRlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgbmV4dCBwYXJ0IGlzIGFib3V0IGlkZW50aWZ5aW5nICpGb2N1c1N5bWJvbHMqIHRvIHByZXZlbnQgZGlsdXRpb24gb2YgZnV6emluZyBlZmZvcnQuIFRoZSBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGFuZCBpbnN0ZWFkIGZvY3VzIG9uIGVudHJ5cG9pbnRzIG9yIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byB0aGUgbG9naWMgYmVpbmcgYWx0ZXJlZC4gTm93LCBgX19kX2FsbG9jYCBpdHNlbGYgaXMgcG90ZW50aWFsbHkgdWJpcXVpdG91cywgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiAqZXZlcnkqIHBhdGggcmVzb2x1dGlvbiBhbmQgZmlsZSBjcmVhdGlvbi4gSG93ZXZlciwgdGhlIHBhdGNoJiMzOTtzIGNvbW1lbnQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCByZW5hbWUgb3BlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aG9zZS4gSSBhbSBnb2luZyB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggd291bGQgaW5kaWNhdGUgdGhleSBhcmUgaW50ZXJuYWwsIGFuZCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgbG9naWMgY2hhbmdlZCBoZXJlLgoKT2theSwgSSBjb25maXJtZWQgdGhhdCBgY29weV9uYW1lYCBhbmQgYHN3YXBfbmFtZXNgIGFyZSBgc3RhdGljYCBmdW5jdGlvbnMgaW4gYGZzL2RjYWNoZS5jYC4gQW5kIGBfX2RfbW92ZWAgY2FsbHMgYGRfbW92ZWAgYW5kIGBkX2V4Y2hhbmdlYCB3aGljaCBpbiB0dXJuIGFyZSBjYWxsZWQgYnkgdGhlIGByZW5hbWVgIHN5c2NhbGwuCgpTbyBJIHRoaW5rIHRoZSAqZm9jdXMgc3ltYm9scyogc2hvdWxkIGJlOgoKYF9fZF9hbGxvY2AsIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgZF9tb3ZlYCwgb3IgYHJlbmFtZWAgaWYgcG9zc2libGUuIFRoaXMgc2hvdWxkIGhlbHAgZGlyZWN0IHRoZSBmdXp6ZXIgdG8gdGhlIGFmZmVjdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHByZXZlbnQgaXQgZnJvbSBmb2N1c2luZyBvbiBnZW5lcmljIG1lbW9yeSBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoZF9tb3ZlfGRfZXhjaGFuZ2UpXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL3Zmc19pbm9kZS5jPTg2ND12OWZzX3Zmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi0tXG5mcy85cC92ZnNfaW5vZGUuYy05NDktXHRcdC8qIHN1Y2Nlc3NmdWwgcmVuYW1lICovXG5mcy85cC92ZnNfaW5vZGUuYzo5NTA6XHRcdGRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbmZzLzlwL3Zmc19pbm9kZS5jLTk1MS1cdH1cbi0tXG5mcy9hZnMvZGlyLmM9MTg4OD1zdGF0aWMgdm9pZCBhZnNfcmVuYW1lX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTk1My1cbmZzL2Fmcy9kaXIuYzoxOTU0Olx0ZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuZnMvYWZzL2Rpci5jLTE5NTUtXG4tLVxuZnMvYWZzL2Rpci5jPTE5NjI9c3RhdGljIHZvaWQgYWZzX3JlbmFtZV9leGNoYW5nZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpci5jLTE5ODQtXG5mcy9hZnMvZGlyLmM6MTk4NTpcdFx0ZF9leGNoYW5nZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbmZzL2Fmcy9kaXIuYy0xOTg2LVx0XHR1cF93cml0ZShcdTAwMjZvcmlnX2R2bm9kZS1cdTAwM2V2YWxpZGF0ZV9sb2NrKTtcbi0tXG5mcy9hZnMvZGlyLmMtMjAxNy1cbmZzL2Fmcy9kaXIuYzoyMDE4Olx0XHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuZnMvYWZzL2Rpci5jLTIwMTktXHRcdHVwX3dyaXRlKFx1MDAyNm5ld19kdm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTExMT1pbnQgYWZzX3NpbGx5cmVuYW1lKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE0OS1cdFx0c2V0X2JpdChBRlNfVk5PREVfU0lMTFlfREVMRVRFRCwgXHUwMDI2dm5vZGUtXHUwMDNlZmxhZ3MpO1xuZnMvYWZzL2Rpcl9zaWxseS5jOjE1MDpcdFx0ZF9tb3ZlKGRlbnRyeSwgc2RlbnRyeSk7XG5mcy9hZnMvZGlyX3NpbGx5LmMtMTUxLVx0XHRicmVhaztcbi0tXG5mcy9jZXBoL2Rpci5jPTE0ODE9c3RhdGljIGludCBjZXBoX3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2NlcGgvZGlyLmMtMTU0Mi1cdFx0LypcbmZzL2NlcGgvZGlyLmM6MTU0MzpcdFx0ICogTm9ybWFsbHkgZF9tb3ZlKCkgaXMgZG9uZSBieSBmaWxsX3RyYWNlIChjYWxsZWQgYnlcbmZzL2NlcGgvZGlyLmMtMTU0NC1cdFx0ICogZG9fcmVxdWVzdCwgYWJvdmUpLiAgSWYgdGhlcmUgaXMgbm8gdHJhY2UsIHdlIG5lZWRcbi0tXG5mcy9jZXBoL2Rpci5jLTE1NDYtXHRcdCAqL1xuZnMvY2VwaC9kaXIuYzoxNTQ3Olx0XHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XG5mcy9jZXBoL2Rpci5jLTE1NDgtXHR9XG4tLVxuZnMvY2VwaC9pbm9kZS5jPTE1OTM9aW50IGNlcGhfZmlsbF90cmFjZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2VwaF9tZHNfcmVxdWVzdCAqcmVxKVxuLS1cbmZzL2NlcGgvaW5vZGUuYy0xNzg4LVxuZnMvY2VwaC9pbm9kZS5jOjE3ODk6XHRcdFx0ZF9tb3ZlKHJlcS1cdTAwM2VyX29sZF9kZW50cnksIGRuKTtcbmZzL2NlcGgvaW5vZGUuYy0xNzkwLVx0XHRcdGRvdXRjKGNsLCBcJiMzNDsgc3JjICVwICYjMzk7JXBkJiMzOTsgZHN0ICVwICYjMzk7JXBkJiMzOTtcXG5cJiMzNDssXG4tLVxuZnMvZF9wYXRoLmM9NTc9c3RhdGljIGJvb2wgcHJlcGVuZChzdHJ1Y3QgcHJlcGVuZF9idWZmZXIgKnAsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG5hbWVsZW4pXG4tLVxuZnMvZF9wYXRoLmMtODMtICpcbmZzL2RfcGF0aC5jOjg0OiAqIFdpdGggUkNVIHBhdGggdHJhY2luZywgaXQgbWF5IHJhY2Ugd2l0aCBkX21vdmUoKS4gVXNlIFJFQURfT05DRSgpIHRvXG5mcy9kX3BhdGguYy04NS0gKiBtYWtlIHN1cmUgdGhhdCBlaXRoZXIgdGhlIG9sZCBvciB0aGUgbmV3IG5hbWUgcG9pbnRlciBhbmQgbGVuZ3RoIGFyZVxuLS1cbmZzL2RfcGF0aC5jLTg5LSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5hbWUuIFRoZSBzZXF1ZW5jZSBudW1iZXIgY2hlY2sgYXQgdGhlIGNhbGxlciB3aWxsXG5mcy9kX3BhdGguYzo5MDogKiByZXRyeSBpdCBhZ2FpbiB3aGVuIGEgZF9tb3ZlKCkgZG9lcyBoYXBwZW4uIFNvIGFueSBnYXJiYWdlIGluIHRoZSBidWZmZXJcbmZzL2RfcGF0aC5jLTkxLSAqIGR1ZSB0byBtaXNtYXRjaGVkIHBvaW50ZXIgYW5kIGxlbmd0aCB3aWxsIGJlIGRpc2NhcmRlZC5cbi0tXG5mcy9kY2FjaGUuYy00Ni0gKiBzX3Jvb3RzX2xvY2sgcHJvdGVjdHM6XG5mcy9kY2FjaGUuYzo0NzogKiAgIC0gdGhlIHNfcm9vdHMgbGlzdCAoc2VlIF9fZF9tb3ZlKCkvZGVudHJ5X3VubGlzdCgpL2Rfb2J0YWluX3Jvb3QoKSlcbmZzL2RjYWNoZS5jLTQ4LSAqIGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfZGVudHJ5X2xydV9sb2NrIHByb3RlY3RzOlxuLS1cbmZzL2RjYWNoZS5jPTI0NzQ9c3RydWN0IGRlbnRyeSAqX19kX2xvb2t1cF9yY3UoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2RjYWNoZS5jLTI0OTctXHQgKiBDYXJlZnVsbHkgdXNlIGRfc2VxIHdoZW4gY29tcGFyaW5nIGEgY2FuZGlkYXRlIGRlbnRyeSwgdG8gYXZvaWRcbmZzL2RjYWNoZS5jOjI0OTg6XHQgKiByYWNlcyB3aXRoIGRfbW92ZSgpLlxuZnMvZGNhY2hlLmMtMjQ5OS1cdCAqXG4tLVxuZnMvZGNhY2hlLmM9MjU5Mj1zdHJ1Y3QgZGVudHJ5ICpfX2RfbG9va3VwKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMjYxMC1cdCAqIFRha2UgZF9sb2NrIHdoZW4gY29tcGFyaW5nIGEgY2FuZGlkYXRlIGRlbnRyeSwgdG8gYXZvaWQgcmFjZXNcbmZzL2RjYWNoZS5jOjI2MTE6XHQgKiB3aXRoIGRfbW92ZSgpLlxuZnMvZGNhY2hlLmMtMjYxMi1cdCAqXG4tLVxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG4tLVxuZnMvZGNhY2hlLmMtMzA1OS0gKi9cbmZzL2RjYWNoZS5jOjMwNjA6c3RhdGljIHZvaWQgX19kX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQsXG5mcy9kY2FjaGUuYy0zMDYxLVx0XHQgICAgIGJvb2wgZXhjaGFuZ2UpXG4tLVxuZnMvZGNhY2hlLmMtMzEyNy1cdGZzbm90aWZ5X3VwZGF0ZV9mbGFncyhkZW50cnkpO1xuZnMvZGNhY2hlLmM6MzEyODpcdGZzY3J5cHRfaGFuZGxlX2RfbW92ZShkZW50cnkpO1xuZnMvZGNhY2hlLmMtMzEyOS1cbi0tXG5mcy9kY2FjaGUuYy0zMTUzLSAqL1xuZnMvZGNhY2hlLmM6MzE1NDp2b2lkIGRfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcbmZzL2RjYWNoZS5jLTMxNTUte1xuZnMvZGNhY2hlLmMtMzE1Ni1cdHdyaXRlX3NlcWxvY2soXHUwMDI2cmVuYW1lX2xvY2spO1xuZnMvZGNhY2hlLmM6MzE1NzpcdF9fZF9tb3ZlKGRlbnRyeSwgdGFyZ2V0LCBmYWxzZSk7XG5mcy9kY2FjaGUuYy0zMTU4LVx0d3JpdGVfc2VxdW5sb2NrKFx1MDAyNnJlbmFtZV9sb2NrKTtcbi0tXG5mcy9kY2FjaGUuYz0zMTYwPUVYUE9SVF9TWU1CT0woZF9tb3ZlKTtcbi0tXG5mcy9kY2FjaGUuYy0zMTY2LSAqL1xuZnMvZGNhY2hlLmM6MzE2Nzp2b2lkIGRfZXhjaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5MSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5MilcbmZzL2RjYWNoZS5jLTMxNjgte1xuLS1cbmZzL2RjYWNoZS5jLTMxNzUtXG5mcy9kY2FjaGUuYzozMTc2Olx0X19kX21vdmUoZGVudHJ5MSwgZGVudHJ5MiwgdHJ1ZSk7XG5mcy9kY2FjaGUuYy0zMTc3LVxuLS1cbmZzL2RjYWNoZS5jPTMyMTA9c3RhdGljIGludCBfX2RfdW5hbGlhcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKmFsaWFzKVxuLS1cbmZzL2RjYWNoZS5jLTMyMzAtXHRcdGdvdG8gb3V0X2VycjtcbmZzL2RjYWNoZS5jOjMyMzE6XHRfX2RfbW92ZShhbGlhcywgZGVudHJ5LCBmYWxzZSk7XG5mcy9kY2FjaGUuYy0zMjMyLVx0aWYgKGFsaWFzLVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGFsaWFzLVx1MDAzZWRfb3AtXHUwMDNlZF91bmFsaWFzX3VubG9jaylcbi0tXG5mcy9kY2FjaGUuYz0zMjQzPXN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZGNhY2hlLmMtMzI4Ny1cdFx0XHRcdH1cbmZzL2RjYWNoZS5jOjMyODg6XHRcdFx0XHRfX2RfbW92ZShuZXcsIGRlbnRyeSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMzI4OS1cdFx0XHRcdHdyaXRlX3NlcXVubG9jayhcdTAwMjZyZW5hbWVfbG9jayk7XG4tLVxuZnMvZGNhY2hlLmM9MzM0NT1ib29sIGlzX3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTMzNTItXG5mcy9kY2FjaGUuYzozMzUzOlx0LyogQWNjZXNzIGRfcGFyZW50IHVuZGVyIHJjdSBhcyBkX21vdmUoKSBtYXkgY2hhbmdlIGl0LiAqL1xuZnMvZGNhY2hlLmMtMzM1NC1cdHJjdV9yZWFkX2xvY2soKTtcbi0tXG5mcy9kZWJ1Z2ZzL2lub2RlLmM9ODI0PWludCBfX3ByaW50ZigyLCAzKSBkZWJ1Z2ZzX2NoYW5nZV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuZnMvZGVidWdmcy9pbm9kZS5jLTg2Mi1cdHNpbXBsZV9yZW5hbWVfdGltZXN0YW1wKGRpciwgZGVudHJ5LCBkaXIsIHJkLm5ld19kZW50cnkpO1xuZnMvZGVidWdmcy9pbm9kZS5jOjg2MzpcdGRfbW92ZShkZW50cnksIHJkLm5ld19kZW50cnkpO1xuZnMvZGVidWdmcy9pbm9kZS5jLTg2NC1cdGZzbm90aWZ5X21vdmUoZGlyLCBkaXIsIFx1MDAyNm9sZF9uYW1lLm5hbWUsIGRfaXNfZGlyKGRlbnRyeSksIE5VTEwsIGRlbnRyeSk7XG4tLVxuZnMvZXhmYXQvbmFtZWkuYz03MjU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4ZmF0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4ZmF0L25hbWVpLmMtNzYxLVx0XHQgKi9cbmZzL2V4ZmF0L25hbWVpLmM6NzYyOlx0XHRkX21vdmUoYWxpYXMsIGRlbnRyeSk7XG5mcy9leGZhdC9uYW1laS5jLTc2My1cdFx0aXB1dChpbm9kZSk7XG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYz02OTg9c3RhdGljIHN0cnVjdCBkZW50cnkgKnZmYXRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZmF0L25hbWVpX3ZmYXQuYy03MzgtXHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuZnMvZmF0L25hbWVpX3ZmYXQuYzo3Mzk6XHRcdFx0ZF9tb3ZlKGFsaWFzLCBkZW50cnkpO1xuZnMvZmF0L25hbWVpX3ZmYXQuYy03NDAtXHRcdGlwdXQoaW5vZGUpO1xuLS1cbmZzL25hbWVpLmM9NjE2OD1pbnQgdmZzX3JlbmFtZShzdHJ1Y3QgcmVuYW1lZGF0YSAqcmQpXG4tLVxuZnMvbmFtZWkuYy02MzE1LVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSlcbmZzL25hbWVpLmM6NjMxNjpcdFx0XHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XG5mcy9uYW1laS5jLTYzMTctXHRcdGVsc2VcbmZzL25hbWVpLmM6NjMxODpcdFx0XHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xuZnMvbmFtZWkuYy02MzE5LVx0fVxuLS1cbmZzL25mcy9kaXIuYz0yNzgwPWludCBuZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvbmZzL2Rpci5jLTI4ODAtXHRcdC8qXG5mcy9uZnMvZGlyLmM6Mjg4MTpcdFx0ICogVGhlIGRfbW92ZSgpIHNob3VsZCBiZSBoZXJlIGluc3RlYWQgb2YgaW4gYW4gYXN5bmMgUlBDIGNvbXBsZXRpb25cbmZzL25mcy9kaXIuYy0yODgyLVx0XHQgKiBoYW5kbGVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgcHJvcGVyIGxvY2tzIHRvIG1vdmUgdGhlIGRlbnRyeS4gIElmXG4tLVxuZnMvbmZzL2Rpci5jLTI4ODUtXHRcdCAqL1xuZnMvbmZzL2Rpci5jOjI4ODY6XHRcdGRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcbmZzL25mcy9kaXIuYy0yODg3LVx0XHRuZnNfc2V0X3ZlcmlmaWVyKG9sZF9kZW50cnksXG4tLVxuZnMvbmZzL3VubGluay5jPTQ0Mz1uZnNfc2lsbHlyZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9uZnMvdW5saW5rLmMtNTE3LVx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuZnMvbmZzL3VubGluay5jOjUxODpcdFx0ZF9tb3ZlKGRlbnRyeSwgc2RlbnRyeSk7XG5mcy9uZnMvdW5saW5rLmMtNTE5LVx0XHRicmVhaztcbi0tXG5mcy9vY2ZzMi9kY2FjaGUuYz0zNzk9c3RhdGljIHZvaWQgb2NmczJfZGVudHJ5X2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL29jZnMyL2RjYWNoZS5jLTQxMC0vKlxuZnMvb2NmczIvZGNhY2hlLmM6NDExOiAqIGRfbW92ZSgpLCBidXQga2VlcCB0aGUgbG9ja3MgaW4gc3luYy5cbmZzL29jZnMyL2RjYWNoZS5jLTQxMi0gKlxuLS1cbmZzL29jZnMyL2RjYWNoZS5jLTQyNC0gKlxuZnMvb2NmczIvZGNhY2hlLmM6NDI1OiAqIE5vcm1hbGx5LCB0aGUgVkZTIGhhbmRsZXMgdGhlIGRfbW92ZSgpIGZvciB0aGUgZmlsZSBzeXN0ZW0sIGFmdGVyXG5mcy9vY2ZzMi9kY2FjaGUuYy00MjYtICogdGhlIC1cdTAwM2VyZW5hbWUoKSBjYWxsYmFjay4gT0NGUzIgd2FudHMgdG8gaGFuZGxlIHRoaXMgaW50ZXJuYWxseSwgc29cbi0tXG5mcy9vY2ZzMi9kY2FjaGUuYz00Mjk9dm9pZCBvY2ZzMl9kZW50cnlfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcbi0tXG5mcy9vY2ZzMi9kY2FjaGUuYy00NTItb3V0X21vdmU6XG5mcy9vY2ZzMi9kY2FjaGUuYzo0NTM6XHRkX21vdmUoZGVudHJ5LCB0YXJnZXQpO1xuZnMvb2NmczIvZGNhY2hlLmMtNDU0LX1cbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE1MS1cdFx0ICogSWYgZF9zcGxpY2VfYWxpYXMoKSBmaW5kcyBhIERDQUNIRV9ESVNDT05ORUNURURcbmZzL29jZnMyL25hbWVpLmM6MTUyOlx0XHQgKiBkZW50cnksIGl0IHdpbGwgZF9tb3ZlKCkgaXQgb24gdG9wIG9mIG91cnNlLiBUaGVcbmZzL29jZnMyL25hbWVpLmMtMTUzLVx0XHQgKiByZXR1cm4gdmFsdWUgd2lsbCBpbmRpY2F0ZSB0aGlzIGhvd2V2ZXIsIHNvIGluXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI0NDg9Y2lmc19kb19yZW5hbWUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZnJvbV9kZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTI1MjItXHRpZiAocmMgPT0gMClcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoyNTIzOlx0XHRkX21vdmUoZnJvbV9kZW50cnksIHRvX2RlbnRyeSk7XG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMjUyNC1cdGNpZnNfcHV0X3RsaW5rKHRsaW5rKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBEaXJlY3QgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiB0byBgX19kX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMuIEl04oCZcyBjcml0aWNhbCB0byBrbm93IHRoZSBzY29wZSBvZiBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhlIGRlbnRyeSBjYWNoZS4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGxpbmUgMTkwMS4uLiBZZXAsIGl0ICppcyogZGVjbGFyZWQgc3RhdGljOiBgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbiAqY291bGQqIGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIGBmcy9kY2FjaGUuY2AsIGJ1dCBpdCYjMzk7cyBtb3JlIGxvY2FsaXplZCB0aGFuIGlmIGl0IHdlcmUgYSBnbG9iYWwgb3IgZXhwb3J0ZWQgZnVuY3Rpb24uIE5vdywgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBtb2RpZmljYXRpb24sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgX19kX2FsbG9jYCB3aXRoaW4gYGZzL2RjYWNoZS5jYC4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgY2FsbGluZyB0aGlzIHRoaW5nIGFuZCBob3cuIFRpbWUgdG8gZGlnIGludG8gdGhvc2UgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTg4OT1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7XG4tLVxuZnMvZGNhY2hlLmMtMTkwMC0gXG5mcy9kY2FjaGUuYzoxOTAxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTAyLXtcbi0tXG5mcy9kY2FjaGUuYz0xOTg5PXN0cnVjdCBkZW50cnkgKmRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTkwLXtcbmZzL2RjYWNoZS5jOjE5OTE6XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMTk5Mi1cdGlmICghZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9kY2FjaGUuYy0yMDA4LXtcbmZzL2RjYWNoZS5jOjIwMDk6XHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcbmZzL2RjYWNoZS5jLTIwMTAtfVxuLS1cbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMjA0Mi1cdH07XG5mcy9kY2FjaGUuYzoyMDQzOlx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHNiLCBuYW1lKTtcbmZzL2RjYWNoZS5jLTIwNDQtXHRpZiAobGlrZWx5KGRlbnRyeSkpIHtcbi0tXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2RjYWNoZS5jLTI3NzAtXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcbmZzL2RjYWNoZS5jOjI3NzE6XHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMjc3Mi1cdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6ZXI6IEEgRGVlcCBEaXZlIGludG8gZGVudHJ5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyBmdXp6ZXIgcnVuLiBUaGUgZ29hbCBpcyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgc3BlY2lmaWMgY2hhbmdlIG1hZGUgYnkgdGhpcyBwYXRjaCwgd2hpY2ggaXMgYWJvdXQgaW5pdGlhbGl6aW5nIHRoZSBgZF9zaG9ydG5hbWVgIGJ1ZmZlciBvZiBhIGBkZW50cnlgLiBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWM6IEkgbmVlZCB0byBhdm9pZCAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGFuZCBpbnN0ZWFkIHRhcmdldCAmIzM0O3NwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiYjMzQ7CgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYF9fZF9hbGxvY2AgKGNhbGxlZCBieSBgZF9hbGxvY2AgYW5kIG90aGVycykgc2VlbXMgbGlrZSBhIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gQnV0IGFtIEkgcmlnaHQ/IElzIGBfX2RfYWxsb2NgIG9uZSBvZiB0aG9zZSBnZW5lcmljLCB1YmlxdWl0b3VzIHRoaW5ncyB0aGUgcHJvbXB0IGlzIHdhcm5pbmcgbWUgYWJvdXQ/IExldCYjMzk7cyBjaGVjayB0aGUgcGF0Y2g6IGl0IHplcm9lcyB0aGUgc2hvcnRuYW1lIGJ1ZmZlciBkdXJpbmcgZGVudHJ5IGFsbG9jYXRpb24gdXNpbmcgYG1lbXNldGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBlZmZvcnQgaXMgd2VsbC1kaXJlY3RlZCBieSBwcm92aWRpbmcgdGhlIGNvcnJlY3QgYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHBhdGNoIHdhcyB3cml0dGVuLiBSZWFkaW5nIHRocm91Z2ggdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgdnVsbmVyYWJpbGl0eSBjb25jZXJucyBob3cgbmFtZSBjb3BpZXMgZHVyaW5nIGByZW5hbWVgIG9wZXJhdGlvbnMgbWlnaHQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpc3N1ZXMgd2l0aCBgS01TQU5gIG9yIGBLQVNBTmAuIEVzc2VudGlhbGx5LCBpZiB0aGUgYGRlbnRyeWAgaGFzIGEgc2hvcnQgbmFtZSB0aGF0JiMzOTtzIG5vdCBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgYGRfc2hvcnRuYW1lLnN0cmluZ2AgaXMgemVyby1pbml0aWFsaXplZCB3aXRoIGBtZW1zZXRgLCB0byBwcmV2ZW50IEtNU0FOIHJlcG9ydHMgb3IgbGVha2FnZS4KClNvLCB0aGUgaXNzdWUgaXMgYWJvdXQgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBpbiBgX19kX2FsbG9jYC4gVGhlIGNvbW1lbnQgbGlzdHMgYGNvcHlfbmFtZWAsIGBzd2FwX25hbWVzYCwgYW5kIGBfX2RfbG9va3VwX3JjdWAgYXMgcmVsYXRlZCBmdW5jdGlvbnMgd2hlcmUgdGhpcyBpbml0aWFsaXphdGlvbiBtYXR0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgd29uZGVyaW5nIGlmIGBfX2RfYWxsb2NgIGlzIHViaXF1aXRvdXMuIElzIGl0IGNhbGxlZCBieSBFVkVSWSBwcm9ncmFtLCBhbmQgd2lsbCBpdCBkaWx1dGUgbXkgZWZmb3J0cz8gTm8sIGBfX2RfYWxsb2NgIGlzIG5vdCBhIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvciBsaWtlIGBrbWFsbG9jYCBhbmQgYGtmcmVlYC4gSXQmIzM5O3MgYSBzcGVjaWZpYyBWRlMgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGxpdGVyYWxseSB0aGUgZnVuY3Rpb24gdGhhdCAqd2FzIG1vZGlmaWVkKiBpbiB0aGUgcGF0Y2guIFRoZSBvdGhlciBvcGVyYXRpb25zIGFyZSByZWxhdGVkIHRvIGRlbnRyeSBtYW5pcHVsYXRpb246IGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGBfX2RfbG9va3VwX3JjdWAgYW5kIGBkX21vdmVgIG9yIGBkX2V4Y2hhbmdlYCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB5b3UgcmVuYW1lIG9yIG1vdmUgZmlsZXMuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCBhZ2FpbjogJiMzNDtMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQmIzM0Oy4gQWhhISBUaGUgKm9ubHkqIGZ1bmN0aW9uIG1vZGlmaWVkIGluIHRoZSBwYXRjaCBpcyBgX19kX2FsbG9jYC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBoYWQgYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO2AgYW5kIG5vdyBpdCYjMzk7cyBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0IHNlZW1zIHZlcnkgc3BlY2lmaWMuIFRoZXJlZm9yZSwgYF9fZF9hbGxvY2AgKm11c3QqIGJlIGluY2x1ZGVkLiBUaGF0IHNlZW1zIGxpa2UgYSBuby1icmFpbmVyLiBUaGlzIGNoYW5nZSBpcyBkaXJlY3RseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVzZS1vZi11bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgYGRlbnRyeWAuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGUgY2hhbmdlLiBgX19kX2FsbG9jYCBpc24mIzM5O3QgYSAqZ2VuZXJhbCogbWVtb3J5IGFsbG9jYXRvci4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgYWxsb2NhdGVzIGRlbnRyaWVzIHdpdGhpbiB0aGUgZGNhY2hlLCBhbmQgaXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIHBhdGNoIGhhcyBtb2RpZmllZC4gCgpXaGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlPyBgZF9tb3ZlYCwgYGRfZXhjaGFuZ2VgLCBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgIGFuZCBgX19kX2xvb2t1cF9yY3VgPyBUaG9zZSBhcmUgYWxsIG9wZXJhdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBkZW50cnkgc2hvcnQgbmFtZSBhbmQgdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgYW0gSSB0cnlpbmcgdG8gcmVwcm9kdWNlIGEgY3Jhc2ggZHVyaW5nIGEgbW92ZSBvcGVyYXRpb24gb3IgYSBsb29rdXA/IFRoZSBwYXRjaCYjMzk7cyAqZ29hbCogaXMgdG8gcHJldmVudCBwcm9ibGVtcyBpbiB0aG9zZSBsYXRlciBvcGVyYXRpb25zLiBUaGVyZWZvcmUsIHBlcmhhcHMgaW5jbHVkaW5nIHRoZXNlIGlzIHVzZWZ1bCB0byB2ZXJpZnkgdGhlIG92ZXJhbGwgZml4LgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgaXQgZnJvbSBhbm90aGVyIGFuZ2xlOiB0aGUgZ29hbCBpcyB0byAqdGVzdCogd2hldGhlciB0aGlzIGNoYW5nZSAodGhlIGBtZW1zZXRgKSAqd29ya3MqLiBTeXprYWxsZXIgY2FuIHRlc3QgYWxsIHRoZSBvcGVyYXRpb25zIHRvIHNlZSBpZiBpdCBmaXhlcyBLTVNBTiByZXBvcnRzLiBTbywgaW5jbHVkaW5nIGBfX2RfYWxsb2NgLCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBwYXRjaCYjMzk7cyBjZW50cmFsIG1vZGlmaWNhdGlvbi4gSXQgaXMgdGhlIHRhcmdldC4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBhZGQgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGUgdW5pbml0aWFsaXplZCBuYW1lOiBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgLCBgX19kX2xvb2t1cF9yY3VgLCBgZF9tb3ZlYCwgYW5kIGBkX2V4Y2hhbmdlYCB0byBlbnN1cmUgYWxsIHBhdGhzIGFyZSB2ZXJpZmllZC4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBmdW5jdGlvbnMsIHdoaWNoIGhhdmUgcHJldmlvdXNseSByZXBvcnRlZCBLTVNBTiBpc3N1ZXMsIGFyZSBub3cgc2FmZS4KClNvLCBnaXZlbiB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jYCBkaXJlY3RseSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBfX2RfYWxsb2NgLCBhbG9uZyB3aXRoIHJlbGF0ZWQgb3BlcmF0aW9ucyBsaWtlIGBkX21vdmVgLCBhbmQgYGRfZXhjaGFuZ2VgIGFyZSB0aGUgbW9zdCByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEROQU1FX0lOTElORV9MRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU5MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGBETkFNRV9JTkxJTkVfTEVOYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdmFsdWUgb2YgYEROQU1FX0lOTElORV9MRU5gLiBUaGlzIHZhcmlhYmxlIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIHNvbWUgb3B0aW1pemF0aW9uIG9yIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGlzIGNvZGUsIGp1ZGdpbmcgZnJvbSBpdHMgbmFtZS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBsaWtlbHkgYSBjb25zdGFudCB0aGF0IGRlZmluZXMgc29tZSBsaW1pdCBvciBsZW5ndGgsIEkgc3VzcGVjdCBpdCYjMzk7cyB1c2VkIGluIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIHBlcmhhcHMgaW4gaGFuZGxpbmcgaW5saW5lIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIEROUyBuYW1lcy4gCgpNeSBpbW1lZGlhdGUgc3RyYXRlZ3kgaXMgdG8gdXNlIHRoZSBmdWxsIHRleHQgc2VhcmNoIHRvIHRyYWNrIGl0IGRvd24gYWNyb3NzIHRoZSBlbnRpcmUgY29kZSBiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGRlZmluaXRpb24sIHdoaWNoIGxpa2VseSB1c2VzIGEgYCNkZWZpbmVgIG9yIGEgYGNvbnN0YCBkZWNsYXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgKndoZXJlKiBpdCYjMzk7cyBkZWZpbmVkIGFuZCAqaG93KiBpdCYjMzk7cyB1c2VkLiBUaGlzIG1pZ2h0IGludm9sdmUgZGl2aW5nIGludG8gaGVhZGVyIGZpbGVzLCBtYWNybyBkZWZpbml0aW9ucywgYW5kIHRoZW4gdHJhY2luZyB0aG9zZSB1c2VzIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMuCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNvbnN0YW50IGluZmx1ZW5jZXMgYnVmZmVyIHNpemVzLCBsb29wIGJvdW5kYXJpZXMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgY29udGV4dCBhcm91bmQgaXRzIHVzYWdlIHdpbGwgcHJvdmlkZSBjbHVlcyBhcyB0byB3aGF0IGl0JiMzOTtzIG9wdGltaXppbmcuIFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaXQgaW5mbHVlbmNlcyBhbmQgd2hlcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbnMgY291bGQgYmUgcmVhbGl6ZWQuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIG91dCB0byB1bmRlcnN0YW5kIHRoZSAqbWVhbmluZyogb2YgYEROQU1FX0lOTElORV9MRU5gIGluIHRoaXMgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ROQU1FX0lOTElORV9MRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTY1PWV4dGVybiBjb25zdCBzdHJ1Y3QgcXN0ciBkb3Rkb3RfbmFtZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTgxLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaDo4MjojZGVmaW5lIEROQU1FX0lOTElORV9MRU4gKEROQU1FX0lOTElORV9XT1JEUypzaXplb2YodW5zaWduZWQgbG9uZykpXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTgzLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD04ND11bmlvbiBzaG9ydG5hbWVfc3RvcmUge1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaDo4NTpcdHVuc2lnbmVkIGNoYXIgc3RyaW5nW0ROQU1FX0lOTElORV9MRU5dO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC04Ni1cdHVuc2lnbmVkIGxvbmcgd29yZHNbRE5BTUVfSU5MSU5FX1dPUkRTXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwOTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERlbnRyeSBTaG9ydG5hbWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nYCBoYXMgYSBmaXhlZCBzaXplLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGlzIGRlZmluZWQgYnkgYEROQU1FX0lOTElORV9MRU5gLiBUaGUgc3Vic2VxdWVudCBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IHplcm9pbmcgb3V0IHRoZSBlbnRpcmUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hvcnQgbmFtZSBzdHJpbmcuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uLCBjbGVhbmluZyB1cCBsZWZ0b3ZlciBkYXRhLiAKCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBLY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyBjb2RlIHBhdGguIFNpbmNlIHRoaXMgc2VlbXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGRlbnRyeSBvcGVyYXRpb25zLCBhbmQgYGZzL2RjYWNoZS5jYCBpcyBwYXJ0IG9mIGNvcmUgVkZT4oCUSSBhbHJlYWR5IGtub3cgaXQmIzM5O3MgY29tcGlsZWQgYXMgcGFydCBvZiBgZGNhY2hlLm9gIGZyb20gbG9va2luZyBhdCB0aGUgYGZzL01ha2VmaWxlYCAtIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2hvdWxkIGJlIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIEkgdGhpbmsgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAgaXRzZWxmIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGFsd2F5cyBpbmNsdWRlZCBvciBkZXBlbmRzIG9uIHNvbWUgc3VidGxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGNhY2hlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuZnMvTWFrZWZpbGUtMTEtXHRcdGNoYXJfZGV2Lm8gc3RhdC5vIGV4ZWMubyBwaXBlLm8gbmFtZWkubyBmY250bC5vIFxcXG5mcy9NYWtlZmlsZToxMjpcdFx0aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZGNhY2hlLm8gaW5vZGUubyBcXFxuZnMvTWFrZWZpbGUtMTMtXHRcdGF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcXFxuLS1cbmZzL29jZnMyL01ha2VmaWxlPTExPW9jZnMyLW9ianMgOj0gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZS0xNS1cdGJ1ZmZlcl9oZWFkX2lvLm9cdFxcXG5mcy9vY2ZzMi9NYWtlZmlsZToxNjpcdGRjYWNoZS5vIFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGUtMTctXHRkaXIubyBcdFx0XHRcXFxuLS1cbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XHRcdCBkY2FjaGUubyBpbm9kZS5vIG9yYW5nZWZzLXN5c2ZzLm8gb3JhbmdlZnMtbW9kLm8gc3VwZXIubyBcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGUtMTAtXHRcdCBkZXZvcmFuZ2Vmcy1yZXEubyBuYW1laS5vIHN5bWxpbmsubyBkaXIubyBvcmFuZ2Vmcy1idWZtYXAubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc2MwoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAzNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXMgU3VtbWFyeSoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQuIEdpdmVuIHRoYXQgYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBjYW4gcmVtYWluIGVtcHR5LiBOb3csIEkmIzM5O20gZXhhbWluaW5nIGBXb3J0aEZ1enppbmdgLiBUaGlzIHBhdGNoIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVt4oCUc3BlY2lmaWNhbGx5LCBgZnMvZGNhY2hlLmNgLiBUaGUgbW9kaWZpY2F0aW9uIGZvY3VzZXMgb24gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgd2l0aGluIGBfX2RfYWxsb2MoKWAsIGFuZCBpdCYjMzk7cyBpbnRlbmRlZCB0byBwcmV2ZW50IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBkdXJpbmcgcmVuYW1lIG9wZXJhdGlvbnMgYW5kIFJDVSBsb29rdXBzLiBUaGlzIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsuIEl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZmlsZSBzeXN0ZW0gbG9naWMsIGFuZCB0aHVzIHRyaWdnZXJzIGZ1enppbmcuCgpOb3csIHJlZ2FyZGluZyBgRm9jdXNTeW1ib2xzYCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvIGd1aWRlIHRoZSBmdXp6ZXIuIEl0IGlzIHBhcmFtb3VudCB0aGF0IEkgYXZvaWQgb3Zlcmx5LXViaXF1aXRvdXMgZnVuY3Rpb25zLiBJIG11c3Qgc3BlY2lmaWNhbGx5IHRhcmdldCBmdW5jdGlvbnMgcmVsZXZhbnQgdG8gKnRoaXMqIGNoYW5nZS4gQWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBhbmQgcmVmZXJyaW5nIHRvIHRoZSBwcm92aWRlZCBndWlkYW5jZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBtb2RpZmllZCBieSB0aGlzIHBhdGNoIGlzIGBfX2RfYWxsb2NgLCB3aGljaCBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIGRlbnRyeSBhbGxvY2F0aW9uIGxvZ2ljLiBJdCYjMzk7cyAqbm90KiBhICYjMzQ7Z2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yLCYjMzQ7IGFzIGl0IHNwZWNpZmljYWxseSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgZGVudHJ5IHN0cnVjdHVyZS4gQmVjYXVzZSBpdCYjMzk7cyB3aGVyZSB0aGUgcGF0Y2ggbW9kaWZpZXMgaW5pdGlhbGl6YXRpb24sIGl0IG11c3QgYmUgaW5jbHVkZWQuIFRvIGZvY3VzIHRoZSBmdXp6aW5nIG9uICpob3cqIHRoZSBwYXRjaCB3aWxsIHdvcmsgaW4gcHJhY3RpY2UsIGdpdmVuIHRoYXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYCBhcmUgbm90IGV4cG9ydGVkLCBJIHdpbGwgYWxzbyBpbmNsdWRlIGBkX21vdmVgIGFuZCBgZF9leGNoYW5nZWAgc2luY2UgdGhleSBhcmUgZW50cnlwb2ludHMgaW50byBmdW5jdGlvbmFsaXR5IHdoZXJlIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaXMgY29waWVkL3N3YXBwZWQuIEFuZCwgZ2l2ZW4gdGhhdCBgZF9hbGxvY2AgaXMgdGhlIHByaW1hcnkgY2FsbGVyIG9mIGBfX2RfYWxsb2NgIEkgd2lsbCBpbmNsdWRlIGl0LgoKVGhlcmVmb3JlLCBteSBmaW5hbCBkZWNpc2lvbnMgYXJlOgoKKiAgIGBXb3J0aEZ1enppbmc9dHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgd2l0aGluIGNvcmUgVkZTIGNvZGUuIEl0IHRhcmdldHMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzL2xlYWtzIGR1cmluZyByZW5hbWUvUkNVIGxvb2t1cCwgd2hpY2ggaXMgd29ydGggZnV6emluZy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19kX2FsbG9jJiMzNDssICYjMzQ7ZF9tb3ZlJiMzNDssICYjMzQ7ZF9leGNoYW5nZSYjMzQ7XWAgKEkgd291bGQgYWxzbyBjb25zaWRlciBgZF9hbGxvY2AgaWYgSSBoYWQgZG91YnRzIGFib3V0IHRoZSBpbmxpbmluZyBvZiBgX19kX2FsbG9jYCkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoKSSBhbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGFuYWx5c2lzIGlzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSwgc28gSSBhbSBjb25maWRlbnQgaW4gbXkgcmVjb21tZW5kYXRpb24uIEkgYW0gcmVhZHkgdG8gc3VibWl0IHRoaXMgYXNzZXNzbWVudCB0byB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfbW92ZSYjMzQ7LAogICAgJiMzNDtkX2V4Y2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFZGUyBjb2RlIGluIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGlubGluZSBkZW50cnkgc2hvcnRuYW1lIGJ1ZmZlciB3aXRoIG1lbXNldCgpLCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9wYWdhdGlvbiBhbmQgZGF0YSByYWNlcyBkdXJpbmcgcmVuYW1lIChjb3B5X25hbWUvc3dhcF9uYW1lcykgYW5kIGxvY2tsZXNzIFJDVSBsb29rdXAuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3JzIGluIGRlbnRyeSBhbGxvY2F0aW9uIGFuZCByZW5hbWluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RfYWxsb2MmIzM0OywKICAgICYjMzQ7ZF9tb3ZlJiMzNDssCiAgICAmIzM0O2RfZXhjaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVkZTIGNvZGUgaW4gX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgaW5saW5lIGRlbnRyeSBzaG9ydG5hbWUgYnVmZmVyIHdpdGggbWVtc2V0KCksIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb3BhZ2F0aW9uIGFuZCBkYXRhIHJhY2VzIGR1cmluZyByZW5hbWUgKGNvcHlfbmFtZS9zd2FwX25hbWVzKSBhbmQgbG9ja2xlc3MgUkNVIGxvb2t1cC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcmVncmVzc2lvbnMsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvcnMgaW4gZGVudHJ5IGFsbG9jYXRpb24gYW5kIHJlbmFtaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzhjMzNmNDBhYTFhNDViMmM2ZTEzZmE0YTQyNmQxOWViZDc1ZDY1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDIyOjI0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAxYjFhODFmMTBkYTY3Li43MzA1NzFlOTJhZjgxIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kY2FjaGUuYwpAQCAtMTkxMCwxMiAmIzQzOzE5MTAsMTcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuCi0JICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZQotCSAqIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCwgZXZlbiBpZiB3ZSBtaWdodAotCSAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIKJiM0MzsJICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kCiYjNDM7CSAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55CiYjNDM7CSAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kCiYjNDM7CSAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZQomIzQzOwkgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZQomIzQzOwkgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCwKJiM0MzsJICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLgogCSAqLwotCWRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwOwomIzQzOwltZW1zZXQoZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pOwogCWlmICh1bmxpa2VseSghbmFtZSkpIHsKIAkJbmFtZSA9ICZhbXA7c2xhc2hfbmFtZTsKIAkJZG5hbWUgPSBkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVudHJ5IEluaXRpYWxpemF0aW9uOiBBIENsb3NlciBMb29rKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRjYWNoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0LCBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCwgb25seSBndWFyYW50ZWVzIHRoYXQgdGhlICpsYXN0KiBieXRlIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaXMgbnVsbC10ZXJtaW5hdGVkLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgYW5kIGhlcmUmIzM5O3Mgd2h5LgoKVGhlIGNvZGUmIzM5O3MgY29tbWVudCBtZW50aW9ucyByZW5hbWUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyBgbWVtY3B5YCBpcyB1c2VkIHRvIGRvIGEgbmFtZSBzd2l0Y2guIFRoZSBjcml0aWNhbCBjb25jZXJuIGlzIHRoYXQgaWYgdGhlICp3aG9sZSogaW5saW5lIGJ1ZmZlciBpc24mIzM5O3QgaW5pdGlhbGl6ZWQsIHdlIGNvdWxkIGVuZCB1cCBwcm9wYWdhdGluZyBnYXJiYWdlIGRhdGEgZHVyaW5nIGEgYHJlbmFtZWAgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYm90aCBgY29weV9uYW1lKClgIGFuZCBgc3dhcF9uYW1lcygpYCBjb3B5IHRoZSB3aG9sZSBgZF9zaG9ydG5hbWVgIGZpZWxkLCBhbmQgYF9fZF9sb29rdXBfcmN1KClgIG1pZ2h0IHRyYW5zaWVudGx5IHJlYWQgYnl0ZXMgZnJvbSBpdCBhcyB3ZWxsLCBlc3BlY2lhbGx5IHdoaWxlIGEgYHJlbmFtZSgpYCBpcyByZXdyaXRpbmcgaXQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzLgoKVGhlIHBhdGNoJiMzOTtzIHJlcGxhY2VtZW50LCBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLCBub3cgKmZ1bGx5KiBpbml0aWFsaXplcyB0aGUgYGRfc2hvcnRuYW1lYCBidWZmZXIgdG8gemVyby4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZG9uJiMzOTt0IGxlYWsgb3V0IGR1cmluZyByZW5hbWUgb3BlcmF0aW9ucy4gSXQgZWZmZWN0aXZlbHkgcHJvdmlkZXMgYSBndWFyYW50ZWVkIG51bGwtdGVybWluYXRpb24gYXQgdGhlIGVuZCAoYnV0IGJldHRlciksIHJlZ2FyZGxlc3Mgb2YgaW50ZXJuYWwgbnVsbCBjaGFyYWN0ZXJzLCBhbmQgc2FmZWd1YXJkcyBhZ2FpbnN0IHVuZXhwZWN0ZWQgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm93IHRoZSBjb2RlIGlzIG11Y2ggc2FmZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MDA6XHQgXG4xOTAxOlx0c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbjE5MDI6XHR7XG4xOTAzOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4xOTA0Olx0XHRjaGFyICpkbmFtZTtcbjE5MDU6XHRcdGludCBlcnI7XG4xOTA2Olx0XG4xOTA3Olx0XHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSxcbjE5MDg6XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuMTkwOTpcdFx0aWYgKCFkZW50cnkpXG4xOTEwOlx0XHRcdHJldHVybiBOVUxMO1xuMTkxMTpcdFxuMTkxMjpcdFx0LypcbjE5MTM6XHRcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuMTkxNDpcdFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbjE5MTU6XHRcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4xOTE2Olx0XHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbjE5MTc6XHRcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4xOTE4Olx0XHQgKlxuMTkxOTpcdFx0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbjE5MjA6XHRcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuMTkyMTpcdFx0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuMTkyMjpcdFx0ICovXG4xOTIzOlx0XHRtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XG4xOTI0Olx0XHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4xOTI1Olx0XHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuMTkyNjpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTI3Olx0XHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbjE5Mjg6XHRcdFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XG4xOTI5Olx0XG4xOTMwOlx0XHRcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXHUwMDNlbGVuICYjNDM7IDEsXG4xOTMxOlx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xuMTkzMjpcdFx0XHRpZiAoIXApIHtcbjE5MzM6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcbjE5MzQ6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MzU6XHRcdFx0fVxuMTkzNjpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlY291bnQsIDEpO1xuMTkzNzpcdFx0XHRkbmFtZSA9IHAtXHUwMDNlbmFtZTtcbjE5Mzg6XHRcdH0gZWxzZSAge1xuMTkzOTpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTQwOlx0XHR9XHRcbjE5NDE6XHRcbjE5NDI6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDM6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0NDpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbjE5NDU6XHRcdGRuYW1lW25hbWUtXHUwMDNlbGVuXSA9IDA7XG4xOTQ2Olx0XG4xOTQ3Olx0XHQvKiBNYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciAqL1xuMTk0ODpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXG4xOTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgTmVlZCBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBgX19kX2FsbG9jYCBwdWxscyBhIGBkZW50cnlgIGZyb20gdGhlIGBkZW50cnlfY2FjaGVgIHVzaW5nIGBrbWVtX2NhY2hlX2FsbG9jX2xydWAuIEJ1dCB0aGF0IGNhY2hlIGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHplcm8gbWVtb3J5LCByaWdodD8gSXQgdXNlcyBmbGFncywgYnV0IEkmIzM5O20gbm90IHN1cmUgaWYgYGRfc2hvcnRuYW1lYCBpcyBhbHdheXMgemVyb2VkLiBUaGVuLCB3YWl0LCB0aGlzIHBhdGNoISBJdCYjMzk7cyBjaGFuZ2luZyBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCB0byBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBTbywgaXQmIzM5O3MgZml4aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIQoKQnV0IHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgYSBLTVNBTiBzZXNzaW9uPyBMZXQmIzM5O3MgY2xhcmlmeSEgS01TQU4gaXMgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMsIHdoaWNoIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgdG9vbHMgZG9uJiMzOTt0IGNhdGNoLiBUaGUgcnVsZSBpcywgJiMzNDtOTyBLTVNBTiBJRiBLQVNBTiBDQVRDSEVTIElUISYjMzQ7CgpOb3cgdGhlIGNyaXRlcmlhIGFyZSBrZXk6IEkgbmVlZCB0byBjb25zaWRlciBgTmVlZHNLTVNBTj10cnVlYCBvbmx5IGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJpc2tzIGxpa2U6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy4KNC4gQm91bmRzIGNoZWNrcyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3MuCgpDb252ZXJzZWx5LCBJIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWY6Ci0gSXQmIzM5O3MgbWFpbmx5IGFib3V0IG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBkZXJlZmVyZW5jZXMsIGV0Yy4gKEtBU0FOIGNhdGNoZXMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZCAodXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykuCi0gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuCgpXYWl0LCB0aGlzIHBhdGNoICpmaXhlcyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZ2AgYnkgYWRkaW5nIGBtZW1zZXRgLiBTbywgZG9lcyB0aGUgcGF0Y2ggaXRzZWxmICppbnRyb2R1Y2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyEgUXVpdGUgdGhlIG9wcG9zaXRlLCBpdCAqZWxpbWluYXRlcyogYSBwb3RlbnRpYWwgc291cmNlIG9mIGl0LiBOb3csIHdoeSB3YXMgdGhpcyBwYXRjaCBzdWJtaXR0ZWQ/IFdhcyB0aGUgcHJldmlvdXMgY29kZSB0cmlnZ2VyaW5nIGEgS01TQU4gaXNzdWUsIG9yIHdhcyB0aGlzIGEgcHJvYWN0aXZlIGZpeD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSW4gYW55IGNhc2UsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBjcml0ZXJpYSwgSSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTE5MTItXHQvKlxuZnMvZGNhY2hlLmM6MTkxMzpcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuZnMvZGNhY2hlLmMtMTkxNC1cdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIGluIGBmcy9kY2FjaGUuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYGdpdCBsb2dgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugb3IgbWF5YmUgbG9vayBmb3IgcmVsYXRlZCBjb21taXRzLCBidXQgc2luY2UgSSBoYXZlIHRoZSBwYXRjaCBpdHNlbGYsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtsbCBkby4gVGhlIGNvZGUgbW9kaWZpZXMgYF9fZF9hbGxvY2AgaW4gYGZzL2RjYWNoZS5jYC4gSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBndWlkaW5nIHByaW5jaXBsZSBoZXJlIGlzIHRvICphdm9pZCogYSBLTVNBTiBzZXNzaW9uIGlmIGV4aXN0aW5nIGNoZWNrcywgc3VjaCBhcyBLQVNBTiwgd291bGQgYWxyZWFkeSBjYXRjaCB0aGUgYnVnLiBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmUsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yICp1bmlxdWUqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKQW5hbHl6aW5nIHRoZSBkaWZmLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGlzIGluaXRpYWxpemVkLiBQcmV2aW91c2x5LCBvbmx5IHRoZSBsYXN0IGJ5dGUgd2FzIGV4cGxpY2l0bHkgemVyb2VkLiBUaGUgcmVzdCB3YXMgbGVmdCBhcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWxsb2NhdGVkIGZyb20gdGhlIHNsYWIgY2FjaGUuIFRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgYWNjZXNzZWQgYnkgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAgZHVyaW5nIHJlbmFtZSwgb3IgcG90ZW50aWFsbHkgYnkgYF9fZF9sb29rdXBfcmN1KClgLiBUaGlzIGlzIHRleHRib29rIEtNU0FOIG1hdGVyaWFsLCBhcyB0aGVzZSBhY2Nlc3NlcyB3ZXJlIHRyaWdnZXJpbmcgS01TQU4gZmFpbHVyZXMuIFRoZSBwYXRjaCByZXBsYWNlcyB0aGF0IHNpbmdsZS1ieXRlIHplcm9pbmcgd2l0aCBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAsIGluaXRpYWxpemluZyB0aGUgKmVudGlyZSogYnVmZmVyIHRvIHplcm8uCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgbm90IGlmIHRoZSAqcHJldmlvdXMqIGNvZGUgaGFkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIGJ1dCB3aGV0aGVyIHRoaXMgcGF0Y2ggKmludHJvZHVjZXMqIG5ldyByaXNrcyBvciBleHBvc2VzIGFueSB0aGF0IGFyZSBvbmx5IGRldGVjdGFibGUgYnkgS01TQU4uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIHBhdGNo4oCZcyBpbXBhY3QuCgpOb3csIGxldCYjMzk7cyBjYXJlZnVsbHkgcmV2aWV3IHRoZSBLTVNBTiBjcml0ZXJpYS4gTXkgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJpc2tzOgoKKiAgIEkmIzM5O20gbG9va2luZyBmb3Iga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLiBUaGlzIGlzbiYjMzk7dCBzZW5kaW5nIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuCiogICBJJiMzOTttIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgc2VlbXMgc2ltcGxlLiBUaGUgcGF0Y2ggaXRzZWxmIGluaXRpYWxpemVzIHRoZSBkYXRhIHN0cnVjdHVyZSAqYmVmb3JlKiBhbnkgcmVhZHMgaGFwcGVuLgoqICAgSSYjMzk7bSBsb29raW5nIGZvciBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuZCBjb3JyZWN0cyB0aGUgaXNzdWUgd2l0aCB0aGUgb2xkIGNvZGUsIGVuc3VyaW5nIHRoZSBpbmxpbmUgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZC4gSXQgKnByZXZlbnRzKiB0aGF0IHNpdHVhdGlvbi4KKiAgIEkmIzM5O20gbG9va2luZyBmb3IgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55IGxvZ2ljIHdoaWNoIHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZW4gbGV0JiMzOTtzIHJldmlldyB0aGUgY2FzZXMgaW4gd2hpY2ggYE5lZWRzS01TQU49ZmFsc2VgCgoqICAgVGhlIHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93LCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWc6IHRoZXNlIGFyZSBhbGwgaGFuZGxlZCBieSBleGlzdGluZyB0b29scy4KKiAgIFRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIG9yIG90aGVyd2lzZSBpbml0aWFsaXplcyBhbGwgc3RydWN0dXJlcyBiZWZvcmUgdGhleSBhcmUgcmVhZCBvciBjb3BpZWQ6IEJpbmdvLiBUaGUgYG1lbXNldGAgZG9lcyBwcmVjaXNlbHkgdGhhdCEKKiAgIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogVGhpcyBzZWVtcyBjb3JyZWN0LiBUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtLgoKVGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRyZXNzZXMgYW5kIGZpeGVzIGEgcHJpb3IgcHJvYmxlbSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnkgdXNpbmcgYG1lbXNldGAuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgYW5kIGl0JiMzOTtzIGEgZGlyZWN0IGZpeCBmb3IgYSBLTVNBTiBpc3N1ZSBpbiB0aGUgcHJldmlvdXMgdmVyc2lvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbWVtc2V0YCBpdHNlbGYgaXNuJiMzOTt0IGEgc291cmNlIG9mIGJ1Z3MsIGJ1dCB0aGUgY29kZSBpbiBjb250ZXh0IGRvZXMgbm90IHRyaWdnZXIgYW55IG9mIHRoZSBzdGFuZGFyZCBtZW1zZXQgcGl0ZmFsbHMgc3VjaCBhcyBzaXplIG1pc2NhbGN1bGF0aW9uIG9yIGJ1ZmZlciBvdmVyZmxvd3MuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIFRoZSBwYXRjaCBpcyBhIGZpeCBmb3IgS01TQU4sIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGV4dGVybmFsX25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RjYWNoZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgZGNhY2hlLmggSGVhZGVyKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBkX3Nob3J0bmFtZWAuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5jbHVkZS9saW51eC9kY2FjaGUuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZGNhY2hlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayB0aHJvdWdoIHRoYXQgZmlsZSBjYXJlZnVsbHksIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yIHRoZSBgZF9zaG9ydG5hbWVgIGlkZW50aWZpZXIuIEhvcGVmdWxseSwgaXQmIzM5O3MgZGVmaW5lZCwgb3IgYXQgbGVhc3QgZGVjbGFyZWQsIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGhlYWRlci4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUsIGl0cyB1c2FnZSwgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZGNhY2hlLXJlbGF0ZWQgZGF0YSBtZW1iZXJzLiBUaGlzIG1pZ2h0IGludm9sdmUgdHJhY2luZyBiYWNrIHRocm91Z2ggYW55IHJlbGF0ZWQgbWFjcm9zIG9yIHR5cGVkZWZzIGlmIHRoZSBkZWNsYXJhdGlvbiBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9zaG9ydG5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RjYWNoZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGNhY2hlLmg9ODQ9dW5pb24gc2hvcnRuYW1lX3N0b3JlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTg5LSNkZWZpbmUgZF9sb2NrXHRkX2xvY2tyZWYubG9ja1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaDo5MDojZGVmaW5lIGRfaW5hbWUgZF9zaG9ydG5hbWUuc3RyaW5nXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTkxLXN0cnVjdCBjb21wbGV0aW9uX2xpc3Q7XG4tLVxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD05Mz1zdHJ1Y3QgZGVudHJ5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTEwNC1cdFx0XHRcdFx0ICogbmVnYXRpdmUgKi9cbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MTA1Olx0dW5pb24gc2hvcnRuYW1lX3N0b3JlIGRfc2hvcnRuYW1lO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0xMDYtXHQvKiAtLS0gY2FjaGVsaW5lIDEgYm91bmRhcnkgKDY0IGJ5dGVzKSB3YXMgMzIgYnl0ZXMgYWdvIC0tLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgZGNhY2hlLmggZGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA4MCB0aHJvdWdoIDk1IG9mIGBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIGtlcm5lbCBkZWZpbmVzIGFuZCBpbnRlcmFjdHMgd2l0aCBpdHMgZGlyZWN0b3J5IGNhY2hlIGF0IHRoaXMgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxpa2VseSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBwcm90b3R5cGVzIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gZGVudHJ5IG1hbmFnZW1lbnQuIENvbnNpZGVyaW5nIHdoZXJlIHdlIGFyZSBpbiB0aGUgaW5jbHVkZSBoaWVyYXJjaHksIHRoaXMgc2hvdWxkIGJlIHRoZSBsb3ctbGV2ZWwsIGludGVybmFsIGZhY2luZyBkZWNsYXJhdGlvbiBhbmQgbm90IHRoZSBoaWdoLWxldmVsIEFQSS4gVGhpcyBtaWdodCBjb3ZlciB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZGVudHJpZXMsIHRoZWlyIGZsYWdzLCBvciBwZXJoYXBzIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSBjb250cm9sIHdpdGhpbiB0aGUgZGNhY2hlLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBvZiB0aGUgb2xkZXIgbG9ja2luZyBhcHByb2FjaGVzLCBzdWNoIGFzIHRoZSBzcGlubG9ja3MsIGFyZSBlbXBsb3llZCBhdCB0aGlzIGxldmVsLiBJJiMzOTtsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgcmVmZXJlbmNlcyB0byBob3cgZGVudHJpZXMgYXJlIGxpbmtlZCBpbnRvIHRoZSBsYXJnZXIgZmlsZSBzeXN0ZW0gbmFtZXNwYWNlLiBJIGFtIHByZXBhcmVkIHRvIGFuYWx5emUgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGlub2RlIGNhY2hlIGFzIHdlbGwsIGlmIHRoZSBjb2RlIGNvbnRhaW5zIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGNhY2hlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2VuZGlmXG4gIDgxOlx0XG4gIDgyOlx0I2RlZmluZSBETkFNRV9JTkxJTkVfTEVOIChETkFNRV9JTkxJTkVfV09SRFMqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxuICA4MzpcdFxuICA4NDpcdHVuaW9uIHNob3J0bmFtZV9zdG9yZSB7XG4gIDg1Olx0XHR1bnNpZ25lZCBjaGFyIHN0cmluZ1tETkFNRV9JTkxJTkVfTEVOXTtcbiAgODY6XHRcdHVuc2lnbmVkIGxvbmcgd29yZHNbRE5BTUVfSU5MSU5FX1dPUkRTXTtcbiAgODc6XHR9O1xuICA4ODpcdFxuICA4OTpcdCNkZWZpbmUgZF9sb2NrXHRkX2xvY2tyZWYubG9ja1xuICA5MDpcdCNkZWZpbmUgZF9pbmFtZSBkX3Nob3J0bmFtZS5zdHJpbmdcbiAgOTE6XHRzdHJ1Y3QgY29tcGxldGlvbl9saXN0O1xuICA5MjpcdFxuICA5MzpcdHN0cnVjdCBkZW50cnkge1xuICA5NDpcdFx0LyogUkNVIGxvb2t1cCB0b3VjaGVkIGZpZWxkcyAqL1xuICA5NTpcdFx0dW5zaWduZWQgaW50IGRfZmxhZ3M7XHRcdC8qIHByb3RlY3RlZCBieSBkX2xvY2sgKi9cbiAgOTY6XHRcdHNlcWNvdW50X3NwaW5sb2NrX3QgZF9zZXE7XHQvKiBwZXIgZGVudHJ5IHNlcWxvY2sgKi9cbiAgOTc6XHRcdHN0cnVjdCBobGlzdF9ibF9ub2RlIGRfaGFzaDtcdC8qIGxvb2t1cCBoYXNoIGxpc3QgKi9cbiAgOTg6XHRcdHN0cnVjdCBkZW50cnkgKmRfcGFyZW50O1x0LyogcGFyZW50IGRpcmVjdG9yeSAqL1xuICA5OTpcdFx0dW5pb24ge1xuIDEwMDpcdFx0c3RydWN0IHFzdHIgX19kX25hbWU7XHRcdC8qIGZvciB1c2UgT05MWSBpbiBmcy9kY2FjaGUuYyAqL1xuIDEwMTpcdFx0Y29uc3Qgc3RydWN0IHFzdHIgZF9uYW1lO1xuIDEwMjpcdFx0fTtcbiAxMDM6XHRcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcdFx0LyogV2hlcmUgdGhlIG5hbWUgYmVsb25ncyB0byAtIE5VTEwgaXNcbiAxMDQ6XHRcdFx0XHRcdFx0ICogbmVnYXRpdmUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxOQoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWVgIFplcm9pbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgIGlzICpleGFjdGx5KiBgRE5BTUVfSU5MSU5FX0xFTmAgaW4gc2l6ZS4gVGhpcyBtZWFucyB3aGVuIEkgYG1lbXNldGAgdGhhdCBzdHJpbmcgdG8gemVybywgSSYjMzk7bSBjb21wbGV0ZWx5IHdpcGluZyB0aGUgKmVudGlyZSogYGRfc2hvcnRuYW1lYCB1bmlvbi4gQ3J1Y2lhbGx5LCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgZ29pbmcgb3V0LW9mLWJvdW5kcy4gSXQgemVyb2VzIHRoZSB3aG9sZSB0aGluZzsgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVtYWlucywgYW5kIGRlZmluaXRlbHkgbm8gaW5mb3JtYXRpb24gbGVha2FnZS4gSW4gZmFjdCwgaXQgKmVsaW1pbmF0ZXMqIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdGhhdCBjb3VsZCBoYXZlIGhhcHBlbmVkIGVhcmxpZXIsIGxpa2UgZHVyaW5nIGEgY29weSBvcGVyYXRpb24gb3IgZXZlbiBqdXN0IGEgdHJhbnNpZW50IHJlYWQgb2YgdGhhdCBgZF9zaG9ydG5hbWVgIGZpZWxkLgoKU28sIGJvdHRvbSBsaW5lOiB0aGlzIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBLQVNBTiBhbmQgb3VyIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSBmb3IgcmVncmVzc2lvbiB0ZXN0aW5nLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUgdGhhdCB3YXJyYW50cyBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQgd291bGQgYmUgb3ZlcmtpbGwuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGZvciBteSBvd24gcGVhY2Ugb2YgbWluZCwgdGhhdCBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXM6CgoxLiAgYE5lZWRzS01TQU5gOiBGYWxzZS4gQ2hlY2suCjIuICBgS01TQU5SZWFzb25pbmdgOiBOZWVkIHRvIGluY2x1ZGUgc29tZSBzb2xpZCByZWFzb25pbmcgY29udHJhc3RpbmcgdGhlIG5lZWQgZm9yIEtBU0FOIHZzLiBLTVNBTiBpbiB0aGUgY29kZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBLQVNBTiBpcyBzdWZmaWNpZW50IGluIG15IHJlYXNvbmluZy4gQ2hlY2suCjMuICBOb3cgSSBqdXN0IG5lZWQgdG8gY2FsbCB0aGF0IGBzZXQtcmVzdWx0c2AgdG9vbCB0byBmaW5hbGl6ZSBldmVyeXRoaW5nLgoKQWxyaWdodCwgZXZlcnl0aGluZyBpcyBjbGVhci4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRoaXMgcGF0Y2ggaXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDowOS4wNzkyMzU1OTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY5MTY5MzQ2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX2FsbG9jXCIsXG4gICAgXCJkX21vdmVcIixcbiAgICBcImRfZXhjaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGRlbnRyeSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKSB1c2luZyBtZW1zZXQoLi4uLCAwLCBETkFNRV9JTkxJTkVfTEVOKSBpbnN0ZWFkIG9mIG9ubHkgc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIE5VTC4gVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2hlcmUgY29weV9uYW1lKCksIHN3YXBfbmFtZXMoKSwgb3IgX19kX2xvb2t1cF9yY3UoKSBjb3VsZCByZWFkIG9yIHByb3BhZ2F0ZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gdGhlIHRhaWwgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gQmVjYXVzZSB0aGUgcGF0Y2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3JlZ3Jlc3Npb24gdGVzdGluZyBpcyBzdWZmaWNpZW50IGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBWRlMgY29kZSBpbiBfX2RfYWxsb2MoKSB0byBmdWxseSB6ZXJvIHRoZSBpbmxpbmUgZGVudHJ5IHNob3J0bmFtZSBidWZmZXIgd2l0aCBtZW1zZXQoKSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvcGFnYXRpb24gYW5kIGRhdGEgcmFjZXMgZHVyaW5nIHJlbmFtZSAoY29weV9uYW1lL3N3YXBfbmFtZXMpIGFuZCBsb2NrbGVzcyBSQ1UgbG9va3VwLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByZWdyZXNzaW9ucywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9ycyBpbiBkZW50cnkgYWxsb2NhdGlvbiBhbmQgcmVuYW1pbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjA5LjA3OTI0NDA5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTYwMjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4YzMzZjQwYWExYTQ1YjJjNmUxM2ZhNGE0MjZkMTllYmQ3NWQ2NTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjczMDU3MWU5MmFmODEgMTAwNjQ0XFxuLS0tIGEvZnMvZGNhY2hlLmNcXG4rKysgYi9mcy9kY2FjaGUuY1xcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC5cXG4tXFx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxcbi1cXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcXG4tXFx0ICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlclxcbitcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4rXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG4rXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4rXFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuK1xcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuK1xcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxcbitcXHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXFxuIFxcdCAqL1xcbi1cXHRkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcXG4rXFx0bWVtc2V0KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbiBcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuIFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjEwLjczNTYzMTU1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA0MjQ2NTE4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZF9hbGxvY1wiLFxuICAgIFwiZF9tb3ZlXCIsXG4gICAgXCJkX2V4Y2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVkZTIGNvZGUgaW4gX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgaW5saW5lIGRlbnRyeSBzaG9ydG5hbWUgYnVmZmVyIHdpdGggbWVtc2V0KCksIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb3BhZ2F0aW9uIGFuZCBkYXRhIHJhY2VzIGR1cmluZyByZW5hbWUgKGNvcHlfbmFtZS9zd2FwX25hbWVzKSBhbmQgbG9ja2xlc3MgUkNVIGxvb2t1cC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcmVncmVzc2lvbnMsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvcnMgaW4gZGVudHJ5IGFsbG9jYXRpb24gYW5kIHJlbmFtaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4YzMzZjQwYWExYTQ1YjJjNmUxM2ZhNGE0MjZkMTllYmQ3NWQ2NTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMjoyNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjczMDU3MWU5MmFmODEgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuKysrIGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbitcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuK1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbitcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4rXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbitcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4rXHQgKlxuK1x0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbitcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuK1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuK1x0bWVtc2V0KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xuIFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xuIFx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbiBcdFx0ZG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjQ6MTAuNzM1NjMzNTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg0ODE5MjcyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBEZW50cnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2UgaW4gYGZzL2RjYWNoZS5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbi4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIHJlcGxhY2VtZW50IG9mIGEgZGlyZWN0IGFzc2lnbm1lbnQgd2l0aCBgbWVtc2V0YCBvbiB0aGUgYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgIGJ1ZmZlci4gVGhlIG9sZCBjb21tZW50IG1lbnRpb25lZCBOVUwtdGVybWluYXRpb24gZm9yIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZS4gTm93LCB3aXRoIHRoaXMgbmV3IGFwcHJvYWNoLCB0aGUgY29tbWVudCBzdWdnZXN0cyBhIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuIFRoZSByZWFzb25pbmcgcG9pbnRzIHRvIGBjb3B5X25hbWUoKWAgYW5kIGBzd2FwX25hbWVzKClgIGNvcHlpbmcgdGhlIGBkX3Nob3J0bmFtZWAgZW50aXJlbHkuIEFueSB1bmluaXRpYWxpemVkIHBhcnRzIGNvdWxkIHRoZW4gcHJvcGFnYXRlLiBBbHNvLCBkdXJpbmcgcmVuYW1lIG9wZXJhdGlvbnMsIGBfX2RfbG9va3VwX3JjdSgpYCBtaWdodCB0cmFuc2llbnRseSByZWFkIGJ5dGVzIGZyb20gdGhlIGlubGluZSBuYW1lIHdoaWxlIGl0IGlzIGJlaW5nIHJld3JpdHRlbi4gVGhpcyBtYWtlcyBzZW5zZS5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbGwgbmVlZCBzb21lIG1vcmUgY29udGV4dC4gSSdsbCBjaGVjayB0aGUgR2l0IGxvZyB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBtYXliZSBzb21lIG1vcmUgZXhwbGFuYXRpb25zIGFyb3VuZCB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxOTEwLiBJIHNob3VsZCBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBmaWxlJ3MgY29udGV4dCBhcm91bmQgdGhhdCBsaW5lIHRvIGdldCBhIGJldHRlciBmZWVsIG9mIHdoYXQncyBoYXBwZW5pbmcuIEFuZCwgZmluYWxseSwgSSdsbCBwcm9iYWJseSBjYWxsIGByZWFkLWZpbGVgIG9uIGBmcy9kY2FjaGUuY2AgYXJvdW5kIGxpbmUgMTkxMCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSBgbWVtc2V0YCBpcyBwcmVmZXJyZWQgbm93IG92ZXIgdGhlIHNpbXBsZSBOVUwgdGVybWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDozOS4yMTc1NjU2ODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg5NTpcXHQgKlxcbjE4OTY6XFx0ICogQWxsb2NhdGVzIGEgZGVudHJ5LiBJdCByZXR1cm5zICVOVUxMIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudCBtZW1vcnlcXG4xODk3OlxcdCAqIGF2YWlsYWJsZS4gT24gYSBzdWNjZXNzIHRoZSBkZW50cnkgaXMgcmV0dXJuZWQuIFRoZSBuYW1lIHBhc3NlZCBpbiBpc1xcbjE4OTg6XFx0ICogY29waWVkIGFuZCB0aGUgY29weSBwYXNzZWQgaW4gbWF5IGJlIHJldXNlZCBhZnRlciB0aGlzIGNhbGwuXFxuMTg5OTpcXHQgKi9cXG4xOTAwOlxcdCBcXG4xOTAxOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuMTkwMjpcXHR7XFxuMTkwMzpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuMTkwNDpcXHRcXHRjaGFyICpkbmFtZTtcXG4xOTA1OlxcdFxcdGludCBlcnI7XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2RlbnRyeV9scnUsXFxuMTkwODpcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4xOTA5OlxcdFxcdGlmICghZGVudHJ5KVxcbjE5MTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdC8qXFxuMTkxMzpcXHRcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4xOTE0OlxcdFxcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XFxuMTkxNTpcXHRcXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxcbjE5MTY6XFx0XFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuMTkxNzpcXHRcXHQgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLlxcbjE5MTg6XFx0XFx0ICpcXG4xOTE5OlxcdFxcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuMTkyMDpcXHRcXHQgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCxcXG4xOTIxOlxcdFxcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cXG4xOTIyOlxcdFxcdCAqL1xcbjE5MjM6XFx0XFx0bWVtc2V0KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4xOTI0OlxcdFxcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcXG4xOTI1OlxcdFxcdFxcdG5hbWUgPSBcXHUwMDI2c2xhc2hfbmFtZTtcXG4xOTI2OlxcdFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMTkyNzpcXHRcXHR9IGVsc2UgaWYgKG5hbWUtXFx1MDAzZWxlbiBcXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xcbjE5Mjg6XFx0XFx0XFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XFxuMTkyOTpcXHRcXG4xOTMwOlxcdFxcdFxcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXFx1MDAzZWxlbiArIDEsXFxuMTkzMTpcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xcbjE5MzI6XFx0XFx0XFx0aWYgKCFwKSB7XFxuMTkzMzpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcXG4xOTM0OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE5MzU6XFx0XFx0XFx0fVxcbjE5MzY6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNlY291bnQsIDEpO1xcbjE5Mzc6XFx0XFx0XFx0ZG5hbWUgPSBwLVxcdTAwM2VuYW1lO1xcbjE5Mzg6XFx0XFx0fSBlbHNlICB7XFxuMTkzOTpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbjE5NDA6XFx0XFx0fVxcdFxcbjE5NDE6XFx0XFxuMTk0MjpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmxlbiA9IG5hbWUtXFx1MDAzZWxlbjtcXG4xOTQzOlxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUuaGFzaCA9IG5hbWUtXFx1MDAzZWhhc2g7XFxuMTk0NDpcXHRcXHRtZW1jcHkoZG5hbWUsIG5hbWUtXFx1MDAzZW5hbWUsIG5hbWUtXFx1MDAzZWxlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjM5LjIxNzczMTM2MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MDMzMzkzMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBkZW50cnlgIFNob3J0bmFtZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgY2hhbmdlcyBob3cgdGhlIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYCBidWZmZXIgaXMgaW5pdGlhbGl6ZWQuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2Ugb25seSB0aGUgbGFzdCBieXRlIHdhcyBleHBsaWNpdGx5IHplcm9lZCAoYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7YCksIGJ1dCBub3cgdGhlIGVudGlyZSBidWZmZXIgaXMgemVyb2VkIHVzaW5nIGBtZW1zZXRgLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGlzc3VlcyBsaWtlIEtNU0FOL2RhdGEgcmFjZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGxlYWRpbmcgdG8gaW5mbyBsZWFrcywgZXNwZWNpYWxseSBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGFuZCBgX19kX2xvb2t1cF9yY3VgIGR1cmluZyByZW5hbWVzLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZyB3aXRoIHN5emthbGxlcj8gIExldCdzIGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuXG5cblRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmUuIFdlJ3JlIHRvdWNoaW5nIGBmcy9kY2FjaGUuY2AsIHdoaWNoIGlzIGNvcmUgVkZTIGRjYWNoZSBzdWJzeXN0ZW0gY29kZS4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBsb29raW5nIGF0IGBfX2RfYWxsb2NgLiAgRnJvbSB0aGUgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGluIGBfX2RfYWxsb2NgIGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbS4gSXQgZG9lc24ndCBmYWxsIGludG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIOKAkyBpdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBub3QgdXNlcnNwYWNlLCBub3QgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIGRyaXZlciB0ZWFyZG93bi4gIFNvLCBiYXNlZCBvbiB0aGUgaGlnaC1sZXZlbCBjcml0ZXJpYSwgSSdkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5CdXQgbGV0J3Mgbm90IGp1bXAgdGhlIGd1bi4gU2VjdGlvbiA0IGlzIGNydWNpYWwg4oCTIHByZXZlbnRpbmcgZGlsdXRpb24uICBXZSBuZWVkIHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcyBgRm9jdXNTeW1ib2xzYC4gVGhlIGtleSBoZXJlIGlzIHRvICphdm9pZCogdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zLiBJcyBgX19kX2FsbG9jYCBvciBgZF9hbGxvY2AgYSBnZW5lcmljLCB1YmlxdWl0b3VzIG1lbW9yeSBhbGxvY2F0b3Igb3Igc29tZXRoaW5nIGVsc2UgdGhhdCdzIGNhbGxlZCBldmVyeXdoZXJlPyBQcm9iYWJseSEgIFRoZSBpc3N1ZSBmb2N1c2VzIG9uIHRoZSBkZW50cnkgbmFtZS4gVGhlIGNvbW1lbnQgY2xlYXJseSBtZW50aW9ucyB0aGUgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgLCBhbmQgYF9fZF9sb29rdXBfcmN1YC4gU28sIHRob3NlIGZ1bmN0aW9ucyBvciB0aGVpciBjYWxsZXJzIGFyZSBwcm9iYWJseSBtb3JlIHJlbGV2YW50IGFzIGZvY3VzIHN5bWJvbHMgdGhhbiBgX19kX2FsbG9jYCBvbiBpdHMgb3duLiBJdCBtZW50aW9ucyB0aGF0IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgY29weSB0aGUgZW50aXJlIGRfc2hvcnRuYW1lLCBhbmQgdGhhdCBgX19kX2xvb2t1cF9yY3VgIG1heSByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgd2hlbiByZW5hbWUoKSByZXdyaXRlcyBpbiBwbGFjZS5cblxuSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIGBmcy9kY2FjaGUuY2AgZm9yIGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgdG8gdW5kZXJzdGFuZCB3aGF0IGNhbGxzIHRoZW0gYW5kIGlmIHRoZXkgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gIEkgYWxzbyBuZWVkIHRvIHNlZSB3aGF0IGBfX2RfYWxsb2NgIGRvZXMsIG9yIHdoYXQgY2FsbHMgYGRfYWxsb2NgLiBNeSBodW5jaCBpcyB0aGF0IGxpc3Rpbmcgb25seSBgX19kX2FsbG9jYCBtaWdodCBiZSB0b28gYnJvYWQ7IHdlIHdhbnQgdGhlIG1vcmUgc3BlY2lmaWMgZW50cnlwb2ludHMgdG8gdGhlIGxvZ2ljIGFmZmVjdGVkIGJ5IHRoZSBwYXRjaC4gVGhlIGZ1enppbmcgZWZmb3J0IG5lZWRzIHRvIHRhcmdldCB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhlIGRlbnRyeSBzaG9ydG5hbWUgaW5pdGlhbGl6YXRpb24gYW5kIGl0cyB1c2FnZSBkdXJpbmcgY29weWluZywgc3dhcHBpbmcsIG9yIGxvb2t1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDo1My4yNTExMjc1MzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzMDgwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNvcHlfbmFtZXxzd2FwX25hbWVzKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0xOTAxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0xOTEyLVxcdC8qXFxuZnMvZGNhY2hlLmM6MTkxMzpcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG5mcy9kY2FjaGUuYzoxOTE0OlxcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XFxuZnMvZGNhY2hlLmMtMTkxNS1cXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxcbi0tXFxuZnMvZGNhY2hlLmM9Mjk5Mj1FWFBPUlRfU1lNQk9MKGRfbWFrZV9wZXJzaXN0ZW50KTtcXG5mcy9kY2FjaGUuYy0yOTkzLVxcbmZzL2RjYWNoZS5jOjI5OTQ6c3RhdGljIHZvaWQgc3dhcF9uYW1lcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcXG5mcy9kY2FjaGUuYy0yOTk1LXtcXG4tLVxcbmZzL2RjYWNoZS5jLTMwMzEtXFxuZnMvZGNhY2hlLmM6MzAzMjpzdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuZnMvZGNhY2hlLmMtMzAzMy17XFxuLS1cXG5mcy9kY2FjaGUuYz0zMDYwPXN0YXRpYyB2b2lkIF9fZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0LFxcbi0tXFxuZnMvZGNhY2hlLmMtMzEwOC1cXHRpZiAoIWV4Y2hhbmdlKSB7XFxuZnMvZGNhY2hlLmM6MzEwOTpcXHRcXHRjb3B5X25hbWUoZGVudHJ5LCB0YXJnZXQpO1xcbmZzL2RjYWNoZS5jLTMxMTAtXFx0XFx0dGFyZ2V0LVxcdTAwM2VkX2hhc2gucHByZXYgPSBOVUxMO1xcbi0tXFxuZnMvZGNhY2hlLmMtMzExNS1cXHRcXHR0YXJnZXQtXFx1MDAzZWRfcGFyZW50ID0gb2xkX3BhcmVudDtcXG5mcy9kY2FjaGUuYzozMTE2OlxcdFxcdHN3YXBfbmFtZXMoZGVudHJ5LCB0YXJnZXQpO1xcbmZzL2RjYWNoZS5jLTMxMTctXFx0XFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2dGFyZ2V0LVxcdTAwM2VkX3NpYikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjUzLjMyNTQ1NDA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg4MjM4NzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEZpbGUgU3lzdGVtIE5hbWluZyBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHNvbWUga2VybmVsIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBmaWxlIHN5c3RlbSBoYW5kbGVzIG5hbWVzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBzd2FwX25hbWVzYCwgYGNvcHlfbmFtZWAsIGFuZCB0aGF0IGludHJpZ3VpbmcgYF9fZF9tb3ZlYCBmdW5jdGlvbi4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHJlbmFtaW5nIG9yIG1vdmluZyBkaXJlY3RvcnkgZW50cmllcywgd2hpY2gsIGFzIHdlIGtub3csIGFyZSBmdW5kYW1lbnRhbCBhbmQgb2Z0ZW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgb3BlcmF0aW9ucyB3aXRoaW4gYSBmaWxlIHN5c3RlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCBiZWhhdmlvci5cblxuU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgYHN3YXBfbmFtZXNgIGFuZCBgY29weV9uYW1lYCBpbiBgZnMvZGNhY2hlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhlc2Ugd2lsbCBwcm92aWRlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcy4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIsIGFuZCBJJ2xsIGxpa2VseSBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgc3RyYXRlZ2llcywgYW5kIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhlc2Ugb3BlcmF0aW9ucyBmYWlsIG1pZHdheS4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gc29tZSBvZiB0aGUgbG93LWxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDo1Ni4yMDc4NDQ2NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk5NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk5NDpcXHRzdGF0aWMgdm9pZCBzd2FwX25hbWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbjI5OTU6XFx0e1xcbjI5OTY6XFx0XFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKHRhcmdldCkpKSB7XFxuMjk5NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpIHtcXG4yOTk4OlxcdFxcdFxcdFxcdC8qXFxuMjk5OTpcXHRcXHRcXHRcXHQgKiBCb3RoIGV4dGVybmFsOiBzd2FwIHRoZSBwb2ludGVyc1xcbjMwMDA6XFx0XFx0XFx0XFx0ICovXFxuMzAwMTpcXHRcXHRcXHRcXHRzd2FwKHRhcmdldC1cXHUwMDNlX19kX25hbWUubmFtZSwgZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lKTtcXG4zMDAyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMzAwMzpcXHRcXHRcXHRcXHQvKlxcbjMwMDQ6XFx0XFx0XFx0XFx0ICogZGVudHJ5OmludGVybmFsLCB0YXJnZXQ6ZXh0ZXJuYWwuICBTdGVhbCB0YXJnZXQnc1xcbjMwMDU6XFx0XFx0XFx0XFx0ICogc3RvcmFnZSBhbmQgbWFrZSB0YXJnZXQgaW50ZXJuYWwuXFxuMzAwNjpcXHRcXHRcXHRcXHQgKi9cXG4zMDA3OlxcdFxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUubmFtZSA9IHRhcmdldC1cXHUwMDNlX19kX25hbWUubmFtZTtcXG4zMDA4OlxcdFxcdFxcdFxcdHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lO1xcbjMwMDk6XFx0XFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gdGFyZ2V0LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMzAxMDpcXHRcXHRcXHR9XFxuMzAxMTpcXHRcXHR9IGVsc2Uge1xcbjMwMTI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKGRlbnRyeSkpKSB7XFxuMzAxMzpcXHRcXHRcXHRcXHQvKlxcbjMwMTQ6XFx0XFx0XFx0XFx0ICogZGVudHJ5OmV4dGVybmFsLCB0YXJnZXQ6aW50ZXJuYWwuICBHaXZlIGRlbnRyeSdzXFxuMzAxNTpcXHRcXHRcXHRcXHQgKiBzdG9yYWdlIHRvIHRhcmdldCBhbmQgbWFrZSBkZW50cnkgaW50ZXJuYWxcXG4zMDE2OlxcdFxcdFxcdFxcdCAqL1xcbjMwMTc6XFx0XFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lO1xcbjMwMTg6XFx0XFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZSA9IHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWU7XFxuMzAxOTpcXHRcXHRcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLm5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4zMDIwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMzAyMTpcXHRcXHRcXHRcXHQvKlxcbjMwMjI6XFx0XFx0XFx0XFx0ICogQm90aCBhcmUgaW50ZXJuYWwuXFxuMzAyMzpcXHRcXHRcXHRcXHQgKi9cXG4zMDI0OlxcdFxcdFxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpKyspXFxuMzAyNTpcXHRcXHRcXHRcXHRcXHRzd2FwKGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0sXFxuMzAyNjpcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0pO1xcbjMwMjc6XFx0XFx0XFx0fVxcbjMwMjg6XFx0XFx0fVxcbjMwMjk6XFx0XFx0c3dhcChkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuLCB0YXJnZXQtXFx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuKTtcXG4zMDMwOlxcdH1cXG4zMDMxOlxcdFxcbjMwMzI6XFx0c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbjMwMzM6XFx0e1xcbjMwMzQ6XFx0XFx0c3RydWN0IGV4dGVybmFsX25hbWUgKm9sZF9uYW1lID0gTlVMTDtcXG4zMDM1OlxcdFxcdGlmICh1bmxpa2VseShkbmFtZV9leHRlcm5hbChkZW50cnkpKSlcXG4zMDM2OlxcdFxcdFxcdG9sZF9uYW1lID0gZXh0ZXJuYWxfbmFtZShkZW50cnkpO1xcbjMwMzc6XFx0XFx0aWYgKHVubGlrZWx5KGRuYW1lX2V4dGVybmFsKHRhcmdldCkpKSB7XFxuMzAzODpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZleHRlcm5hbF9uYW1lKHRhcmdldCktXFx1MDAzZWNvdW50KTtcXG4zMDM5OlxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUgPSB0YXJnZXQtXFx1MDAzZV9fZF9uYW1lO1xcbjMwNDA6XFx0XFx0fSBlbHNlIHtcXG4zMDQxOlxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUgPSB0YXJnZXQtXFx1MDAzZWRfc2hvcnRuYW1lO1xcbjMwNDI6XFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMzA0MzpcXHRcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2hfbGVuID0gdGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5oYXNoX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjQ6NTYuMjA4MDE5Nzk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEwODI4NDEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmFtZSBTd2FwcGluZyBpbiB0aGUgRmlsZXN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5hbWUgaGFuZGxpbmcgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBzbmlwcGV0czogYGNvcHlfbmFtZWAsIHNwZWNpZmljYWxseSB0aGUgbGluZSB3aGVyZSBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lYCBnZXRzIGFzc2lnbmVkIGZyb20gYHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZWAsIGFuZCB0aGVuIHRoZSBgc3dhcF9uYW1lc2AgZnVuY3Rpb24sIHdoZXJlIHRoZXJlJ3MgdGhhdCBzd2FwIG9wZXJhdGlvbiBoYXBwZW5pbmcgZGlyZWN0bHkgYmV0d2VlbiBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lYCBhbmQgYHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWJvdXQgb3B0aW1pemluZyBuYW1lIGhhbmRsaW5nLCBtYXliZSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb3BpZXMuIFRoZSBjb3JlIGxvZ2ljIGhpbmdlcyBvbiB3aGVyZSBgX19kX21vdmVgIGlzIGFjdHVhbGx5IGNhbGxlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlLWNhc2VzIGFuZCB3aGF0J3MgZHJpdmluZyB0aGlzIG5hbWluZyBzdHJhdGVneS4gVGltZSB0byBzZWFyY2ggZm9yIHRoYXQgZnVuY3Rpb24gYW5kIG1hcCBpdHMgY2FsbGVycyBhbmQgaG93IGl0J3MgdXNlZCB3aXRoIGBkZW50cnlgIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNDo1OC4zMTYzMDY2MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzg2NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZF9tb3ZlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jLTQ2LSAqIHNfcm9vdHNfbG9jayBwcm90ZWN0czpcXG5mcy9kY2FjaGUuYzo0NzogKiAgIC0gdGhlIHNfcm9vdHMgbGlzdCAoc2VlIF9fZF9tb3ZlKCkvZGVudHJ5X3VubGlzdCgpL2Rfb2J0YWluX3Jvb3QoKSlcXG5mcy9kY2FjaGUuYy00OC0gKiBkZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfZGVudHJ5X2xydV9sb2NrIHByb3RlY3RzOlxcbi0tXFxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMDU5LSAqL1xcbmZzL2RjYWNoZS5jOjMwNjA6c3RhdGljIHZvaWQgX19kX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQsXFxuZnMvZGNhY2hlLmMtMzA2MS1cXHRcXHQgICAgIGJvb2wgZXhjaGFuZ2UpXFxuLS1cXG5mcy9kY2FjaGUuYz0zMTU0PXZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbi0tXFxuZnMvZGNhY2hlLmMtMzE1Ni1cXHR3cml0ZV9zZXFsb2NrKFxcdTAwMjZyZW5hbWVfbG9jayk7XFxuZnMvZGNhY2hlLmM6MzE1NzpcXHRfX2RfbW92ZShkZW50cnksIHRhcmdldCwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTMxNTgtXFx0d3JpdGVfc2VxdW5sb2NrKFxcdTAwMjZyZW5hbWVfbG9jayk7XFxuLS1cXG5mcy9kY2FjaGUuYz0zMTY3PXZvaWQgZF9leGNoYW5nZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkxLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkyKVxcbi0tXFxuZnMvZGNhY2hlLmMtMzE3NS1cXG5mcy9kY2FjaGUuYzozMTc2OlxcdF9fZF9tb3ZlKGRlbnRyeTEsIGRlbnRyeTIsIHRydWUpO1xcbmZzL2RjYWNoZS5jLTMxNzctXFxuLS1cXG5mcy9kY2FjaGUuYz0zMjEwPXN0YXRpYyBpbnQgX19kX3VuYWxpYXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICphbGlhcylcXG4tLVxcbmZzL2RjYWNoZS5jLTMyMzAtXFx0XFx0Z290byBvdXRfZXJyO1xcbmZzL2RjYWNoZS5jOjMyMzE6XFx0X19kX21vdmUoYWxpYXMsIGRlbnRyeSwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTMyMzItXFx0aWYgKGFsaWFzLVxcdTAwM2VkX29wIFxcdTAwMjZcXHUwMDI2IGFsaWFzLVxcdTAwM2VkX29wLVxcdTAwM2VkX3VuYWxpYXNfdW5sb2NrKVxcbi0tXFxuZnMvZGNhY2hlLmM9MzI0Mz1zdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZGNhY2hlLmMtMzI4Ny1cXHRcXHRcXHRcXHR9XFxuZnMvZGNhY2hlLmM6MzI4ODpcXHRcXHRcXHRcXHRfX2RfbW92ZShuZXcsIGRlbnRyeSwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTMyODktXFx0XFx0XFx0XFx0d3JpdGVfc2VxdW5sb2NrKFxcdTAwMjZyZW5hbWVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI0OjU4LjM5NzcwMDMzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDI5OTEzOTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBkY2FjaGUuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBgbWVtc2V0YCBpbnRyb2R1Y3Rpb24sIGJ1dCBJIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IGZ1enphYmlsaXR5ICpmaXJzdCouIExldCdzIHN0aWNrIHRvIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZ3VpZGVsaW5lcy5cblxuUmVhZGluZyB0aGUgZ3VpZGVsaW5lcyBjYXJlZnVsbHksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhYm91dCByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvZGNhY2hlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGlzIGlzIHBhcnQgb2YgdGhlIFZGUyBkY2FjaGUgc3Vic3lzdGVtLCBzbyBkZWZpbml0ZWx5ICpub3QqIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3Igb3RoZXIgbmVnYXRpdmUgY3JpdGVyaWEuIFNpbmNlIHRoZSBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSwgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gdGhlcmVmb3JlIGNvbmNsdWRlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBuZXh0IHBhcnQgaXMgYWJvdXQgaWRlbnRpZnlpbmcgKkZvY3VzU3ltYm9scyogdG8gcHJldmVudCBkaWx1dGlvbiBvZiBmdXp6aW5nIGVmZm9ydC4gVGhlIGdvYWwgaGVyZSBpcyB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgYW5kIGluc3RlYWQgZm9jdXMgb24gZW50cnlwb2ludHMgb3IgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkLiBOb3csIGBfX2RfYWxsb2NgIGl0c2VsZiBpcyBwb3RlbnRpYWxseSB1YmlxdWl0b3VzLCBzaW5jZSBpdCdzIHVzZWQgaW4gKmV2ZXJ5KiBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24uIEhvd2V2ZXIsIHRoZSBwYXRjaCdzIGNvbW1lbnQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCByZW5hbWUgb3BlcmF0aW9ucy4gSSdtIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRob3NlLiBJIGFtIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSB0aGV5IGFyZSBpbnRlcm5hbCwgYW5kIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBsb2dpYyBjaGFuZ2VkIGhlcmUuXG5cbk9rYXksIEkgY29uZmlybWVkIHRoYXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYCBhcmUgYHN0YXRpY2AgZnVuY3Rpb25zIGluIGBmcy9kY2FjaGUuY2AuIEFuZCBgX19kX21vdmVgIGNhbGxzIGBkX21vdmVgIGFuZCBgZF9leGNoYW5nZWAgd2hpY2ggaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHRoZSBgcmVuYW1lYCBzeXNjYWxsLlxuXG5TbyBJIHRoaW5rIHRoZSAqZm9jdXMgc3ltYm9scyogc2hvdWxkIGJlOlxuXG5gX19kX2FsbG9jYCwgYGNvcHlfbmFtZWAsIGBzd2FwX25hbWVzYCwgYW5kIGBkX21vdmVgLCBvciBgcmVuYW1lYCBpZiBwb3NzaWJsZS4gVGhpcyBzaG91bGQgaGVscCBkaXJlY3QgdGhlIGZ1enplciB0byB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25hbGl0eSBhbmQgcHJldmVudCBpdCBmcm9tIGZvY3VzaW5nIG9uIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjEyLjY5Njg0MjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzAxNTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoZF9tb3ZlfGRfZXhjaGFuZ2UpXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL3Zmc19pbm9kZS5jPTg2ND12OWZzX3Zmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTk0OS1cXHRcXHQvKiBzdWNjZXNzZnVsIHJlbmFtZSAqL1xcbmZzLzlwL3Zmc19pbm9kZS5jOjk1MDpcXHRcXHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XFxuZnMvOXAvdmZzX2lub2RlLmMtOTUxLVxcdH1cXG4tLVxcbmZzL2Fmcy9kaXIuYz0xODg4PXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE5NTMtXFxuZnMvYWZzL2Rpci5jOjE5NTQ6XFx0ZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy0xOTU1LVxcbi0tXFxuZnMvYWZzL2Rpci5jPTE5NjI9c3RhdGljIHZvaWQgYWZzX3JlbmFtZV9leGNoYW5nZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTk4NC1cXG5mcy9hZnMvZGlyLmM6MTk4NTpcXHRcXHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy0xOTg2LVxcdFxcdHVwX3dyaXRlKFxcdTAwMjZvcmlnX2R2bm9kZS1cXHUwMDNldmFsaWRhdGVfbG9jayk7XFxuLS1cXG5mcy9hZnMvZGlyLmMtMjAxNy1cXG5mcy9hZnMvZGlyLmM6MjAxODpcXHRcXHRkX2V4Y2hhbmdlKG9sZF9kZW50cnksIG5ld19kZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy0yMDE5LVxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuZXdfZHZub2RlLVxcdTAwM2V2YWxpZGF0ZV9sb2NrKTtcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYz0xMTE9aW50IGFmc19zaWxseXJlbmFtZShzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE0OS1cXHRcXHRzZXRfYml0KEFGU19WTk9ERV9TSUxMWV9ERUxFVEVELCBcXHUwMDI2dm5vZGUtXFx1MDAzZWZsYWdzKTtcXG5mcy9hZnMvZGlyX3NpbGx5LmM6MTUwOlxcdFxcdGRfbW92ZShkZW50cnksIHNkZW50cnkpO1xcbmZzL2Fmcy9kaXJfc2lsbHkuYy0xNTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9jZXBoL2Rpci5jPTE0ODE9c3RhdGljIGludCBjZXBoX3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxcbi0tXFxuZnMvY2VwaC9kaXIuYy0xNTQyLVxcdFxcdC8qXFxuZnMvY2VwaC9kaXIuYzoxNTQzOlxcdFxcdCAqIE5vcm1hbGx5IGRfbW92ZSgpIGlzIGRvbmUgYnkgZmlsbF90cmFjZSAoY2FsbGVkIGJ5XFxuZnMvY2VwaC9kaXIuYy0xNTQ0LVxcdFxcdCAqIGRvX3JlcXVlc3QsIGFib3ZlKS4gIElmIHRoZXJlIGlzIG5vIHRyYWNlLCB3ZSBuZWVkXFxuLS1cXG5mcy9jZXBoL2Rpci5jLTE1NDYtXFx0XFx0ICovXFxuZnMvY2VwaC9kaXIuYzoxNTQ3OlxcdFxcdGRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcXG5mcy9jZXBoL2Rpci5jLTE1NDgtXFx0fVxcbi0tXFxuZnMvY2VwaC9pbm9kZS5jPTE1OTM9aW50IGNlcGhfZmlsbF90cmFjZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2VwaF9tZHNfcmVxdWVzdCAqcmVxKVxcbi0tXFxuZnMvY2VwaC9pbm9kZS5jLTE3ODgtXFxuZnMvY2VwaC9pbm9kZS5jOjE3ODk6XFx0XFx0XFx0ZF9tb3ZlKHJlcS1cXHUwMDNlcl9vbGRfZGVudHJ5LCBkbik7XFxuZnMvY2VwaC9pbm9kZS5jLTE3OTAtXFx0XFx0XFx0ZG91dGMoY2wsIFxcXCIgc3JjICVwICclcGQnIGRzdCAlcCAnJXBkJ1xcXFxuXFxcIixcXG4tLVxcbmZzL2RfcGF0aC5jPTU3PXN0YXRpYyBib29sIHByZXBlbmQoc3RydWN0IHByZXBlbmRfYnVmZmVyICpwLCBjb25zdCBjaGFyICpzdHIsIGludCBuYW1lbGVuKVxcbi0tXFxuZnMvZF9wYXRoLmMtODMtICpcXG5mcy9kX3BhdGguYzo4NDogKiBXaXRoIFJDVSBwYXRoIHRyYWNpbmcsIGl0IG1heSByYWNlIHdpdGggZF9tb3ZlKCkuIFVzZSBSRUFEX09OQ0UoKSB0b1xcbmZzL2RfcGF0aC5jLTg1LSAqIG1ha2Ugc3VyZSB0aGF0IGVpdGhlciB0aGUgb2xkIG9yIHRoZSBuZXcgbmFtZSBwb2ludGVyIGFuZCBsZW5ndGggYXJlXFxuLS1cXG5mcy9kX3BhdGguYy04OS0gKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuYW1lLiBUaGUgc2VxdWVuY2UgbnVtYmVyIGNoZWNrIGF0IHRoZSBjYWxsZXIgd2lsbFxcbmZzL2RfcGF0aC5jOjkwOiAqIHJldHJ5IGl0IGFnYWluIHdoZW4gYSBkX21vdmUoKSBkb2VzIGhhcHBlbi4gU28gYW55IGdhcmJhZ2UgaW4gdGhlIGJ1ZmZlclxcbmZzL2RfcGF0aC5jLTkxLSAqIGR1ZSB0byBtaXNtYXRjaGVkIHBvaW50ZXIgYW5kIGxlbmd0aCB3aWxsIGJlIGRpc2NhcmRlZC5cXG4tLVxcbmZzL2RjYWNoZS5jLTQ2LSAqIHNfcm9vdHNfbG9jayBwcm90ZWN0czpcXG5mcy9kY2FjaGUuYzo0NzogKiAgIC0gdGhlIHNfcm9vdHMgbGlzdCAoc2VlIF9fZF9tb3ZlKCkvZGVudHJ5X3VubGlzdCgpL2Rfb2J0YWluX3Jvb3QoKSlcXG5mcy9kY2FjaGUuYy00OC0gKiBkZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfZGVudHJ5X2xydV9sb2NrIHByb3RlY3RzOlxcbi0tXFxuZnMvZGNhY2hlLmM9MjQ3ND1zdHJ1Y3QgZGVudHJ5ICpfX2RfbG9va3VwX3JjdShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuLS1cXG5mcy9kY2FjaGUuYy0yNDk3LVxcdCAqIENhcmVmdWxseSB1c2UgZF9zZXEgd2hlbiBjb21wYXJpbmcgYSBjYW5kaWRhdGUgZGVudHJ5LCB0byBhdm9pZFxcbmZzL2RjYWNoZS5jOjI0OTg6XFx0ICogcmFjZXMgd2l0aCBkX21vdmUoKS5cXG5mcy9kY2FjaGUuYy0yNDk5LVxcdCAqXFxuLS1cXG5mcy9kY2FjaGUuYz0yNTkyPXN0cnVjdCBkZW50cnkgKl9fZF9sb29rdXAoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTI2MTAtXFx0ICogVGFrZSBkX2xvY2sgd2hlbiBjb21wYXJpbmcgYSBjYW5kaWRhdGUgZGVudHJ5LCB0byBhdm9pZCByYWNlc1xcbmZzL2RjYWNoZS5jOjI2MTE6XFx0ICogd2l0aCBkX21vdmUoKS5cXG5mcy9kY2FjaGUuYy0yNjEyLVxcdCAqXFxuLS1cXG5mcy9kY2FjaGUuYz0zMDMyPXN0YXRpYyB2b2lkIGNvcHlfbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcXG4tLVxcbmZzL2RjYWNoZS5jLTMwNTktICovXFxuZnMvZGNhY2hlLmM6MzA2MDpzdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcXG5mcy9kY2FjaGUuYy0zMDYxLVxcdFxcdCAgICAgYm9vbCBleGNoYW5nZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTMxMjctXFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XFxuZnMvZGNhY2hlLmM6MzEyODpcXHRmc2NyeXB0X2hhbmRsZV9kX21vdmUoZGVudHJ5KTtcXG5mcy9kY2FjaGUuYy0zMTI5LVxcbi0tXFxuZnMvZGNhY2hlLmMtMzE1My0gKi9cXG5mcy9kY2FjaGUuYzozMTU0OnZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbmZzL2RjYWNoZS5jLTMxNTUte1xcbmZzL2RjYWNoZS5jLTMxNTYtXFx0d3JpdGVfc2VxbG9jayhcXHUwMDI2cmVuYW1lX2xvY2spO1xcbmZzL2RjYWNoZS5jOjMxNTc6XFx0X19kX21vdmUoZGVudHJ5LCB0YXJnZXQsIGZhbHNlKTtcXG5mcy9kY2FjaGUuYy0zMTU4LVxcdHdyaXRlX3NlcXVubG9jayhcXHUwMDI2cmVuYW1lX2xvY2spO1xcbi0tXFxuZnMvZGNhY2hlLmM9MzE2MD1FWFBPUlRfU1lNQk9MKGRfbW92ZSk7XFxuLS1cXG5mcy9kY2FjaGUuYy0zMTY2LSAqL1xcbmZzL2RjYWNoZS5jOjMxNjc6dm9pZCBkX2V4Y2hhbmdlKHN0cnVjdCBkZW50cnkgKmRlbnRyeTEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeTIpXFxuZnMvZGNhY2hlLmMtMzE2OC17XFxuLS1cXG5mcy9kY2FjaGUuYy0zMTc1LVxcbmZzL2RjYWNoZS5jOjMxNzY6XFx0X19kX21vdmUoZGVudHJ5MSwgZGVudHJ5MiwgdHJ1ZSk7XFxuZnMvZGNhY2hlLmMtMzE3Ny1cXG4tLVxcbmZzL2RjYWNoZS5jPTMyMTA9c3RhdGljIGludCBfX2RfdW5hbGlhcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKmFsaWFzKVxcbi0tXFxuZnMvZGNhY2hlLmMtMzIzMC1cXHRcXHRnb3RvIG91dF9lcnI7XFxuZnMvZGNhY2hlLmM6MzIzMTpcXHRfX2RfbW92ZShhbGlhcywgZGVudHJ5LCBmYWxzZSk7XFxuZnMvZGNhY2hlLmMtMzIzMi1cXHRpZiAoYWxpYXMtXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgYWxpYXMtXFx1MDAzZWRfb3AtXFx1MDAzZWRfdW5hbGlhc191bmxvY2spXFxuLS1cXG5mcy9kY2FjaGUuYz0zMjQzPXN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9kY2FjaGUuYy0zMjg3LVxcdFxcdFxcdFxcdH1cXG5mcy9kY2FjaGUuYzozMjg4OlxcdFxcdFxcdFxcdF9fZF9tb3ZlKG5ldywgZGVudHJ5LCBmYWxzZSk7XFxuZnMvZGNhY2hlLmMtMzI4OS1cXHRcXHRcXHRcXHR3cml0ZV9zZXF1bmxvY2soXFx1MDAyNnJlbmFtZV9sb2NrKTtcXG4tLVxcbmZzL2RjYWNoZS5jPTMzNDU9Ym9vbCBpc19zdWJkaXIoc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTMzNTItXFxuZnMvZGNhY2hlLmM6MzM1MzpcXHQvKiBBY2Nlc3MgZF9wYXJlbnQgdW5kZXIgcmN1IGFzIGRfbW92ZSgpIG1heSBjaGFuZ2UgaXQuICovXFxuZnMvZGNhY2hlLmMtMzM1NC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5mcy9kZWJ1Z2ZzL2lub2RlLmM9ODI0PWludCBfX3ByaW50ZigyLCAzKSBkZWJ1Z2ZzX2NoYW5nZV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5mcy9kZWJ1Z2ZzL2lub2RlLmMtODYyLVxcdHNpbXBsZV9yZW5hbWVfdGltZXN0YW1wKGRpciwgZGVudHJ5LCBkaXIsIHJkLm5ld19kZW50cnkpO1xcbmZzL2RlYnVnZnMvaW5vZGUuYzo4NjM6XFx0ZF9tb3ZlKGRlbnRyeSwgcmQubmV3X2RlbnRyeSk7XFxuZnMvZGVidWdmcy9pbm9kZS5jLTg2NC1cXHRmc25vdGlmeV9tb3ZlKGRpciwgZGlyLCBcXHUwMDI2b2xkX25hbWUubmFtZSwgZF9pc19kaXIoZGVudHJ5KSwgTlVMTCwgZGVudHJ5KTtcXG4tLVxcbmZzL2V4ZmF0L25hbWVpLmM9NzI1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleGZhdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2V4ZmF0L25hbWVpLmMtNzYxLVxcdFxcdCAqL1xcbmZzL2V4ZmF0L25hbWVpLmM6NzYyOlxcdFxcdGRfbW92ZShhbGlhcywgZGVudHJ5KTtcXG5mcy9leGZhdC9uYW1laS5jLTc2My1cXHRcXHRpcHV0KGlub2RlKTtcXG4tLVxcbmZzL2ZhdC9uYW1laV92ZmF0LmM9Njk4PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2ZmF0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZmF0L25hbWVpX3ZmYXQuYy03MzgtXFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbmZzL2ZhdC9uYW1laV92ZmF0LmM6NzM5OlxcdFxcdFxcdGRfbW92ZShhbGlhcywgZGVudHJ5KTtcXG5mcy9mYXQvbmFtZWlfdmZhdC5jLTc0MC1cXHRcXHRpcHV0KGlub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9NjE2OD1pbnQgdmZzX3JlbmFtZShzdHJ1Y3QgcmVuYW1lZGF0YSAqcmQpXFxuLS1cXG5mcy9uYW1laS5jLTYzMTUtXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpKVxcbmZzL25hbWVpLmM6NjMxNjpcXHRcXHRcXHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XFxuZnMvbmFtZWkuYy02MzE3LVxcdFxcdGVsc2VcXG5mcy9uYW1laS5jOjYzMTg6XFx0XFx0XFx0ZF9leGNoYW5nZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTtcXG5mcy9uYW1laS5jLTYzMTktXFx0fVxcbi0tXFxuZnMvbmZzL2Rpci5jPTI3ODA9aW50IG5mc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tLVxcbmZzL25mcy9kaXIuYy0yODgwLVxcdFxcdC8qXFxuZnMvbmZzL2Rpci5jOjI4ODE6XFx0XFx0ICogVGhlIGRfbW92ZSgpIHNob3VsZCBiZSBoZXJlIGluc3RlYWQgb2YgaW4gYW4gYXN5bmMgUlBDIGNvbXBsZXRpb25cXG5mcy9uZnMvZGlyLmMtMjg4Mi1cXHRcXHQgKiBoYW5kbGVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgcHJvcGVyIGxvY2tzIHRvIG1vdmUgdGhlIGRlbnRyeS4gIElmXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjg4NS1cXHRcXHQgKi9cXG5mcy9uZnMvZGlyLmM6Mjg4NjpcXHRcXHRkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7XFxuZnMvbmZzL2Rpci5jLTI4ODctXFx0XFx0bmZzX3NldF92ZXJpZmllcihvbGRfZGVudHJ5LFxcbi0tXFxuZnMvbmZzL3VubGluay5jPTQ0Mz1uZnNfc2lsbHlyZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL25mcy91bmxpbmsuYy01MTctXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbmZzL25mcy91bmxpbmsuYzo1MTg6XFx0XFx0ZF9tb3ZlKGRlbnRyeSwgc2RlbnRyeSk7XFxuZnMvbmZzL3VubGluay5jLTUxOS1cXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2RjYWNoZS5jPTM3OT1zdGF0aWMgdm9pZCBvY2ZzMl9kZW50cnlfaXB1dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9vY2ZzMi9kY2FjaGUuYy00MTAtLypcXG5mcy9vY2ZzMi9kY2FjaGUuYzo0MTE6ICogZF9tb3ZlKCksIGJ1dCBrZWVwIHRoZSBsb2NrcyBpbiBzeW5jLlxcbmZzL29jZnMyL2RjYWNoZS5jLTQxMi0gKlxcbi0tXFxuZnMvb2NmczIvZGNhY2hlLmMtNDI0LSAqXFxuZnMvb2NmczIvZGNhY2hlLmM6NDI1OiAqIE5vcm1hbGx5LCB0aGUgVkZTIGhhbmRsZXMgdGhlIGRfbW92ZSgpIGZvciB0aGUgZmlsZSBzeXN0ZW0sIGFmdGVyXFxuZnMvb2NmczIvZGNhY2hlLmMtNDI2LSAqIHRoZSAtXFx1MDAzZXJlbmFtZSgpIGNhbGxiYWNrLiBPQ0ZTMiB3YW50cyB0byBoYW5kbGUgdGhpcyBpbnRlcm5hbGx5LCBzb1xcbi0tXFxuZnMvb2NmczIvZGNhY2hlLmM9NDI5PXZvaWQgb2NmczJfZGVudHJ5X21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQsXFxuLS1cXG5mcy9vY2ZzMi9kY2FjaGUuYy00NTItb3V0X21vdmU6XFxuZnMvb2NmczIvZGNhY2hlLmM6NDUzOlxcdGRfbW92ZShkZW50cnksIHRhcmdldCk7XFxuZnMvb2NmczIvZGNhY2hlLmMtNDU0LX1cXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xNTEtXFx0XFx0ICogSWYgZF9zcGxpY2VfYWxpYXMoKSBmaW5kcyBhIERDQUNIRV9ESVNDT05ORUNURURcXG5mcy9vY2ZzMi9uYW1laS5jOjE1MjpcXHRcXHQgKiBkZW50cnksIGl0IHdpbGwgZF9tb3ZlKCkgaXQgb24gdG9wIG9mIG91cnNlLiBUaGVcXG5mcy9vY2ZzMi9uYW1laS5jLTE1My1cXHRcXHQgKiByZXR1cm4gdmFsdWUgd2lsbCBpbmRpY2F0ZSB0aGlzIGhvd2V2ZXIsIHNvIGluXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MjQ0OD1jaWZzX2RvX3JlbmFtZShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpmcm9tX2RlbnRyeSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0yNTIyLVxcdGlmIChyYyA9PSAwKVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoyNTIzOlxcdFxcdGRfbW92ZShmcm9tX2RlbnRyeSwgdG9fZGVudHJ5KTtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMjUyNC1cXHRjaWZzX3B1dF90bGluayh0bGluayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjEyLjc4OTg2NjgxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDY3ODQxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBEaXJlY3QgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIHRvIGBfX2RfYWxsb2NgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYy4gSXTigJlzIGNyaXRpY2FsIHRvIGtub3cgdGhlIHNjb3BlIG9mIGNoYW5nZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgZGVudHJ5IGNhY2hlLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBsaW5lIDE5MDEuLi4gWWVwLCBpdCAqaXMqIGRlY2xhcmVkIHN0YXRpYzogYHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpYC4gVGhhdCdzIGltcG9ydGFudDsgaXQgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbiAqY291bGQqIGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIGBmcy9kY2FjaGUuY2AsIGJ1dCBpdCdzIG1vcmUgbG9jYWxpemVkIHRoYW4gaWYgaXQgd2VyZSBhIGdsb2JhbCBvciBleHBvcnRlZCBmdW5jdGlvbi4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX2RfYWxsb2NgIHdpdGhpbiBgZnMvZGNhY2hlLmNgLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyB0aGlzIHRoaW5nIGFuZCBob3cuIFRpbWUgdG8gZGlnIGludG8gdGhvc2UgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNToxNC44NTc3MTA4NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDMxMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZF9hbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jPTE4ODk9RVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpO1xcbi0tXFxuZnMvZGNhY2hlLmMtMTkwMC0gXFxuZnMvZGNhY2hlLmM6MTkwMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5MDIte1xcbi0tXFxuZnMvZGNhY2hlLmM9MTk4OT1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5OTAte1xcbmZzL2RjYWNoZS5jOjE5OTE6XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHBhcmVudC1cXHUwMDNlZF9zYiwgbmFtZSk7XFxuZnMvZGNhY2hlLmMtMTk5Mi1cXHRpZiAoIWRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZGNhY2hlLmMtMjAwOC17XFxuZnMvZGNhY2hlLmM6MjAwOTpcXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcXG5mcy9kY2FjaGUuYy0yMDEwLX1cXG4tLVxcbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0yMDQyLVxcdH07XFxuZnMvZGNhY2hlLmM6MjA0MzpcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2Moc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTIwNDQtXFx0aWYgKGxpa2VseShkZW50cnkpKSB7XFxuLS1cXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbi0tXFxuZnMvZGNhY2hlLmMtMjc3MC1cXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcXG5mcy9kY2FjaGUuYzoyNzcxOlxcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXFx1MDAzZWRfc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTI3NzItXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNToxNC45MTM3NTE1MzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5MTcwNjUzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgdGhlIEZ1enplcjogQSBEZWVwIERpdmUgaW50byBkZW50cnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYEZvY3VzU3ltYm9sc2AgZm9yIHRoaXMgZnV6emVyIHJ1bi4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgdGhlIGZ1enppbmcgb24gdGhlIHNwZWNpZmljIGNoYW5nZSBtYWRlIGJ5IHRoaXMgcGF0Y2gsIHdoaWNoIGlzIGFib3V0IGluaXRpYWxpemluZyB0aGUgYGRfc2hvcnRuYW1lYCBidWZmZXIgb2YgYSBgZGVudHJ5YC4gVGhlIHByb21wdCBpcyB2ZXJ5IHNwZWNpZmljOiBJIG5lZWQgdG8gYXZvaWQgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBhbmQgaW5zdGVhZCB0YXJnZXQgXCJzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy5cIlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYF9fZF9hbGxvY2AgKGNhbGxlZCBieSBgZF9hbGxvY2AgYW5kIG90aGVycykgc2VlbXMgbGlrZSBhIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gQnV0IGFtIEkgcmlnaHQ/IElzIGBfX2RfYWxsb2NgIG9uZSBvZiB0aG9zZSBnZW5lcmljLCB1YmlxdWl0b3VzIHRoaW5ncyB0aGUgcHJvbXB0IGlzIHdhcm5pbmcgbWUgYWJvdXQ/IExldCdzIGNoZWNrIHRoZSBwYXRjaDogaXQgemVyb2VzIHRoZSBzaG9ydG5hbWUgYnVmZmVyIGR1cmluZyBkZW50cnkgYWxsb2NhdGlvbiB1c2luZyBgbWVtc2V0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVmZm9ydCBpcyB3ZWxsLWRpcmVjdGVkIGJ5IHByb3ZpZGluZyB0aGUgY29ycmVjdCBgRm9jdXNTeW1ib2xzYC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBwYXRjaCB3YXMgd3JpdHRlbi4gUmVhZGluZyB0aHJvdWdoIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIHZ1bG5lcmFiaWxpdHkgY29uY2VybnMgaG93IG5hbWUgY29waWVzIGR1cmluZyBgcmVuYW1lYCBvcGVyYXRpb25zIG1pZ2h0IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaXNzdWVzIHdpdGggYEtNU0FOYCBvciBgS0FTQU5gLiBFc3NlbnRpYWxseSwgaWYgdGhlIGBkZW50cnlgIGhhcyBhIHNob3J0IG5hbWUgdGhhdCdzIG5vdCBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgYGRfc2hvcnRuYW1lLnN0cmluZ2AgaXMgemVyby1pbml0aWFsaXplZCB3aXRoIGBtZW1zZXRgLCB0byBwcmV2ZW50IEtNU0FOIHJlcG9ydHMgb3IgbGVha2FnZS5cblxuU28sIHRoZSBpc3N1ZSBpcyBhYm91dCBpbml0aWFsaXphdGlvbiBkdXJpbmcgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBfX2RfYWxsb2NgLiBUaGUgY29tbWVudCBsaXN0cyBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgLCBhbmQgYF9fZF9sb29rdXBfcmN1YCBhcyByZWxhdGVkIGZ1bmN0aW9ucyB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIG1hdHRlcnMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB3b25kZXJpbmcgaWYgYF9fZF9hbGxvY2AgaXMgdWJpcXVpdG91cy4gSXMgaXQgY2FsbGVkIGJ5IEVWRVJZIHByb2dyYW0sIGFuZCB3aWxsIGl0IGRpbHV0ZSBteSBlZmZvcnRzPyBObywgYF9fZF9hbGxvY2AgaXMgbm90IGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYGttYWxsb2NgIGFuZCBga2ZyZWVgLiBJdCdzIGEgc3BlY2lmaWMgVkZTIGZ1bmN0aW9uIGFuZCBpdCdzIGxpdGVyYWxseSB0aGUgZnVuY3Rpb24gdGhhdCAqd2FzIG1vZGlmaWVkKiBpbiB0aGUgcGF0Y2guIFRoZSBvdGhlciBvcGVyYXRpb25zIGFyZSByZWxhdGVkIHRvIGRlbnRyeSBtYW5pcHVsYXRpb246IGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGBfX2RfbG9va3VwX3JjdWAgYW5kIGBkX21vdmVgIG9yIGBkX2V4Y2hhbmdlYCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB5b3UgcmVuYW1lIG9yIG1vdmUgZmlsZXMuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGluc3RydWN0aW9ucywgYWdhaW46IFwiTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkXCIuIEFoYSEgVGhlICpvbmx5KiBmdW5jdGlvbiBtb2RpZmllZCBpbiB0aGUgcGF0Y2ggaXMgYF9fZF9hbGxvY2AuIFRoZSBvcmlnaW5hbCBjb2RlIGp1c3QgaGFkIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO2AgYW5kIG5vdyBpdCdzIGBtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCBzZWVtcyB2ZXJ5IHNwZWNpZmljLiBUaGVyZWZvcmUsIGBfX2RfYWxsb2NgICptdXN0KiBiZSBpbmNsdWRlZC4gVGhhdCBzZWVtcyBsaWtlIGEgbm8tYnJhaW5lci4gVGhpcyBjaGFuZ2UgaXMgZGlyZWN0bHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2Utb2YtdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGBkZW50cnlgLiBJdCdzIHRoZSBwb2ludCBvZiB0aGUgY2hhbmdlLiBgX19kX2FsbG9jYCBpc24ndCBhICpnZW5lcmFsKiBtZW1vcnkgYWxsb2NhdG9yLiBJdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGFsbG9jYXRlcyBkZW50cmllcyB3aXRoaW4gdGhlIGRjYWNoZSwgYW5kIGl0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBwYXRjaCBoYXMgbW9kaWZpZWQuIFxuXG5XaGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlPyBgZF9tb3ZlYCwgYGRfZXhjaGFuZ2VgLCBgY29weV9uYW1lYCwgYHN3YXBfbmFtZXNgIGFuZCBgX19kX2xvb2t1cF9yY3VgPyBUaG9zZSBhcmUgYWxsIG9wZXJhdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBkZW50cnkgc2hvcnQgbmFtZSBhbmQgdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgYW0gSSB0cnlpbmcgdG8gcmVwcm9kdWNlIGEgY3Jhc2ggZHVyaW5nIGEgbW92ZSBvcGVyYXRpb24gb3IgYSBsb29rdXA/IFRoZSBwYXRjaCdzICpnb2FsKiBpcyB0byBwcmV2ZW50IHByb2JsZW1zIGluIHRob3NlIGxhdGVyIG9wZXJhdGlvbnMuIFRoZXJlZm9yZSwgcGVyaGFwcyBpbmNsdWRpbmcgdGhlc2UgaXMgdXNlZnVsIHRvIHZlcmlmeSB0aGUgb3ZlcmFsbCBmaXguXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgaXQgZnJvbSBhbm90aGVyIGFuZ2xlOiB0aGUgZ29hbCBpcyB0byAqdGVzdCogd2hldGhlciB0aGlzIGNoYW5nZSAodGhlIGBtZW1zZXRgKSAqd29ya3MqLiBTeXprYWxsZXIgY2FuIHRlc3QgYWxsIHRoZSBvcGVyYXRpb25zIHRvIHNlZSBpZiBpdCBmaXhlcyBLTVNBTiByZXBvcnRzLiBTbywgaW5jbHVkaW5nIGBfX2RfYWxsb2NgLCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBwYXRjaCdzIGNlbnRyYWwgbW9kaWZpY2F0aW9uLiBJdCBpcyB0aGUgdGFyZ2V0LiBUaGVuLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGFkZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZSB1bmluaXRpYWxpemVkIG5hbWU6IGBjb3B5X25hbWVgLCBgc3dhcF9uYW1lc2AsIGBfX2RfbG9va3VwX3JjdWAsIGBkX21vdmVgLCBhbmQgYGRfZXhjaGFuZ2VgIHRvIGVuc3VyZSBhbGwgcGF0aHMgYXJlIHZlcmlmaWVkLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgYW55IG9mIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggaGF2ZSBwcmV2aW91c2x5IHJlcG9ydGVkIEtNU0FOIGlzc3VlcywgYXJlIG5vdyBzYWZlLlxuXG5TbywgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvY2AgZGlyZWN0bHksIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgX19kX2FsbG9jYCwgYWxvbmcgd2l0aCByZWxhdGVkIG9wZXJhdGlvbnMgbGlrZSBgZF9tb3ZlYCwgYW5kIGBkX2V4Y2hhbmdlYCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTozNi44MzA4MTk1NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDIwNjk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEROQU1FX0lOTElORV9MRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTozNi45MTA4NTA3NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5MjM4NDIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYEROQU1FX0lOTElORV9MRU5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHZhbHVlIG9mIGBETkFNRV9JTkxJTkVfTEVOYC4gVGhpcyB2YXJpYWJsZSBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciBzb21lIG9wdGltaXphdGlvbiBvciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhpcyBjb2RlLCBqdWRnaW5nIGZyb20gaXRzIG5hbWUuIEdpdmVuIHRoYXQgaXQncyBsaWtlbHkgYSBjb25zdGFudCB0aGF0IGRlZmluZXMgc29tZSBsaW1pdCBvciBsZW5ndGgsIEkgc3VzcGVjdCBpdCdzIHVzZWQgaW4gYnVmZmVyIG1hbmFnZW1lbnQgb3IgcGVyaGFwcyBpbiBoYW5kbGluZyBpbmxpbmUgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gRE5TIG5hbWVzLiBcblxuTXkgaW1tZWRpYXRlIHN0cmF0ZWd5IGlzIHRvIHVzZSB0aGUgZnVsbCB0ZXh0IHNlYXJjaCB0byB0cmFjayBpdCBkb3duIGFjcm9zcyB0aGUgZW50aXJlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGRlZmluaXRpb24sIHdoaWNoIGxpa2VseSB1c2VzIGEgYCNkZWZpbmVgIG9yIGEgYGNvbnN0YCBkZWNsYXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgKndoZXJlKiBpdCdzIGRlZmluZWQgYW5kICpob3cqIGl0J3MgdXNlZC4gVGhpcyBtaWdodCBpbnZvbHZlIGRpdmluZyBpbnRvIGhlYWRlciBmaWxlcywgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZCB0aGVuIHRyYWNpbmcgdGhvc2UgdXNlcyB0aHJvdWdoIHZhcmlvdXMgZnVuY3Rpb25zLlxuXG5JJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY29uc3RhbnQgaW5mbHVlbmNlcyBidWZmZXIgc2l6ZXMsIGxvb3AgYm91bmRhcmllcywgb3IgY29uZGl0aW9uYWwgbG9naWMuIFRoZSBjb250ZXh0IGFyb3VuZCBpdHMgdXNhZ2Ugd2lsbCBwcm92aWRlIGNsdWVzIGFzIHRvIHdoYXQgaXQncyBvcHRpbWl6aW5nLiBVbmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGl0IGluZmx1ZW5jZXMgYW5kIHdoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb25zIGNvdWxkIGJlIHJlYWxpemVkLlxuXG5Fc3NlbnRpYWxseSwgSSdtIHNldHRpbmcgb3V0IHRvIHVuZGVyc3RhbmQgdGhlICptZWFuaW5nKiBvZiBgRE5BTUVfSU5MSU5FX0xFTmAgaW4gdGhpcyBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTozOS4zMDMyMzc5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODI1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkROQU1FX0lOTElORV9MRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kY2FjaGUuaD02NT1leHRlcm4gY29uc3Qgc3RydWN0IHFzdHIgZG90ZG90X25hbWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTgxLVxcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6ODI6I2RlZmluZSBETkFNRV9JTkxJTkVfTEVOIChETkFNRV9JTkxJTkVfV09SRFMqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtODMtXFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaD04ND11bmlvbiBzaG9ydG5hbWVfc3RvcmUge1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6ODU6XFx0dW5zaWduZWQgY2hhciBzdHJpbmdbRE5BTUVfSU5MSU5FX0xFTl07XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC04Ni1cXHR1bnNpZ25lZCBsb25nIHdvcmRzW0ROQU1FX0lOTElORV9XT1JEU107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjM5LjQ0MzA3MjY5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTgxMTk4OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZW50cnkgU2hvcnRuYW1lIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AgaGFzIGEgZml4ZWQgc2l6ZSwgd2hpY2ggSSdtIGFzc3VtaW5nIGlzIGRlZmluZWQgYnkgYEROQU1FX0lOTElORV9MRU5gLiBUaGUgc3Vic2VxdWVudCBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IHplcm9pbmcgb3V0IHRoZSBlbnRpcmUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hvcnQgbmFtZSBzdHJpbmcuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uLCBjbGVhbmluZyB1cCBsZWZ0b3ZlciBkYXRhLiBcblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgS2NvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoaXMgY29kZSBwYXRoLiBTaW5jZSB0aGlzIHNlZW1zIHByZXR0eSBmdW5kYW1lbnRhbCB0byBkZW50cnkgb3BlcmF0aW9ucywgYW5kIGBmcy9kY2FjaGUuY2AgaXMgcGFydCBvZiBjb3JlIFZGU+KAlEkgYWxyZWFkeSBrbm93IGl0J3MgY29tcGlsZWQgYXMgcGFydCBvZiBgZGNhY2hlLm9gIGZyb20gbG9va2luZyBhdCB0aGUgYGZzL01ha2VmaWxlYCAtIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2hvdWxkIGJlIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIEkgdGhpbmsgSSdsbCBnbyBjaGVjayB0aGUgYGZzL01ha2VmaWxlYCBpdHNlbGYgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgYWx3YXlzIGluY2x1ZGVkIG9yIGRlcGVuZHMgb24gc29tZSBzdWJ0bGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA5NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTo0MS40MjQyNzQ1NzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjY1NzM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkY2FjaGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTEtXFx0XFx0Y2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXFxcXFxcbmZzL01ha2VmaWxlOjEyOlxcdFxcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcXFxcbmZzL01ha2VmaWxlLTEzLVxcdFxcdGF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlLTE1LVxcdGJ1ZmZlcl9oZWFkX2lvLm9cXHRcXFxcXFxuZnMvb2NmczIvTWFrZWZpbGU6MTY6XFx0ZGNhY2hlLm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTE3LVxcdGRpci5vIFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XFx0XFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXFxcXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS0xMC1cXHRcXHQgZGV2b3JhbmdlZnMtcmVxLm8gbmFtZWkubyBzeW1saW5rLm8gZGlyLm8gb3JhbmdlZnMtYnVmbWFwLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTo0Mi4xMjY5MzgyNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI4NTUxNjY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBTdW1tYXJ5KipcblxuT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQuIEdpdmVuIHRoYXQgYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBjYW4gcmVtYWluIGVtcHR5LiBOb3csIEknbSBleGFtaW5pbmcgYFdvcnRoRnV6emluZ2AuIFRoaXMgcGF0Y2ggdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIFZGUyBzdWJzeXN0ZW3igJRzcGVjaWZpY2FsbHksIGBmcy9kY2FjaGUuY2AuIFRoZSBtb2RpZmljYXRpb24gZm9jdXNlcyBvbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB3aXRoaW4gYF9fZF9hbGxvYygpYCwgYW5kIGl0J3MgaW50ZW5kZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgZHVyaW5nIHJlbmFtZSBvcGVyYXRpb25zIGFuZCBSQ1UgbG9va3Vwcy4gVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiLiBJdCdzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZmlsZSBzeXN0ZW0gbG9naWMsIGFuZCB0aHVzIHRyaWdnZXJzIGZ1enppbmcuXG5cbk5vdywgcmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gZ3VpZGUgdGhlIGZ1enplci4gSXQgaXMgcGFyYW1vdW50IHRoYXQgSSBhdm9pZCBvdmVybHktdWJpcXVpdG91cyBmdW5jdGlvbnMuIEkgbXVzdCBzcGVjaWZpY2FsbHkgdGFyZ2V0IGZ1bmN0aW9ucyByZWxldmFudCB0byAqdGhpcyogY2hhbmdlLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGFuZCByZWZlcnJpbmcgdG8gdGhlIHByb3ZpZGVkIGd1aWRhbmNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCBpcyBgX19kX2FsbG9jYCwgd2hpY2ggZXhwbGljaXRseSBoYW5kbGVzIHRoZSBkZW50cnkgYWxsb2NhdGlvbiBsb2dpYy4gSXQncyAqbm90KiBhIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yLFwiIGFzIGl0IHNwZWNpZmljYWxseSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgZGVudHJ5IHN0cnVjdHVyZS4gQmVjYXVzZSBpdCdzIHdoZXJlIHRoZSBwYXRjaCBtb2RpZmllcyBpbml0aWFsaXphdGlvbiwgaXQgbXVzdCBiZSBpbmNsdWRlZC4gVG8gZm9jdXMgdGhlIGZ1enppbmcgb24gKmhvdyogdGhlIHBhdGNoIHdpbGwgd29yayBpbiBwcmFjdGljZSwgZ2l2ZW4gdGhhdCBgY29weV9uYW1lYCBhbmQgYHN3YXBfbmFtZXNgIGFyZSBub3QgZXhwb3J0ZWQsIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGRfbW92ZWAgYW5kIGBkX2V4Y2hhbmdlYCBzaW5jZSB0aGV5IGFyZSBlbnRyeXBvaW50cyBpbnRvIGZ1bmN0aW9uYWxpdHkgd2hlcmUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciBpcyBjb3BpZWQvc3dhcHBlZC4gQW5kLCBnaXZlbiB0aGF0IGBkX2FsbG9jYCBpcyB0aGUgcHJpbWFyeSBjYWxsZXIgb2YgYF9fZF9hbGxvY2AgSSB3aWxsIGluY2x1ZGUgaXQuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgZGVjaXNpb25zIGFyZTpcblxuKiAgIGBXb3J0aEZ1enppbmc9dHJ1ZWBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIHdpdGhpbiBjb3JlIFZGUyBjb2RlLiBJdCB0YXJnZXRzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy9sZWFrcyBkdXJpbmcgcmVuYW1lL1JDVSBsb29rdXAsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX2RfYWxsb2NcIiwgXCJkX21vdmVcIiwgXCJkX2V4Y2hhbmdlXCJdYCAoSSB3b3VsZCBhbHNvIGNvbnNpZGVyIGBkX2FsbG9jYCBpZiBJIGhhZCBkb3VidHMgYWJvdXQgdGhlIGlubGluaW5nIG9mIGBfX2RfYWxsb2NgKVxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYFxuXG5JIGFtIHNhdGlzZmllZCB0aGF0IHRoaXMgYW5hbHlzaXMgaXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLCBzbyBJIGFtIGNvbmZpZGVudCBpbiBteSByZWNvbW1lbmRhdGlvbi4gSSBhbSByZWFkeSB0byBzdWJtaXQgdGhpcyBhc3Nlc3NtZW50IHRvIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzYzLCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjU6NTQuOTgyMTIwMjU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RfYWxsb2NcIixcbiAgICBcImRfbW92ZVwiLFxuICAgIFwiZF9leGNoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFZGUyBjb2RlIGluIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGlubGluZSBkZW50cnkgc2hvcnRuYW1lIGJ1ZmZlciB3aXRoIG1lbXNldCgpLCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9wYWdhdGlvbiBhbmQgZGF0YSByYWNlcyBkdXJpbmcgcmVuYW1lIChjb3B5X25hbWUvc3dhcF9uYW1lcykgYW5kIGxvY2tsZXNzIFJDVSBsb29rdXAuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3JzIGluIGRlbnRyeSBhbGxvY2F0aW9uIGFuZCByZW5hbWluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RfYWxsb2NcIixcbiAgICBcImRfbW92ZVwiLFxuICAgIFwiZF9leGNoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFZGUyBjb2RlIGluIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGlubGluZSBkZW50cnkgc2hvcnRuYW1lIGJ1ZmZlciB3aXRoIG1lbXNldCgpLCBhZGRyZXNzaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9wYWdhdGlvbiBhbmQgZGF0YSByYWNlcyBkdXJpbmcgcmVuYW1lIChjb3B5X25hbWUvc3dhcF9uYW1lcykgYW5kIGxvY2tsZXNzIFJDVSBsb29rdXAuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3JzIGluIGRlbnRyeSBhbGxvY2F0aW9uIGFuZCByZW5hbWluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjU6NTQuOTgyMTUyMTc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMTQwMDg4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNTo1NC45ODMwNTA1NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDEwMTMxMDY5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGRlbnRyeSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKSB1c2luZyBtZW1zZXQoLi4uLCAwLCBETkFNRV9JTkxJTkVfTEVOKSBpbnN0ZWFkIG9mIG9ubHkgc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIE5VTC4gVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2hlcmUgY29weV9uYW1lKCksIHN3YXBfbmFtZXMoKSwgb3IgX19kX2xvb2t1cF9yY3UoKSBjb3VsZCByZWFkIG9yIHByb3BhZ2F0ZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gdGhlIHRhaWwgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gQmVjYXVzZSB0aGUgcGF0Y2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3JlZ3Jlc3Npb24gdGVzdGluZyBpcyBzdWZmaWNpZW50IGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOGMzM2Y0MGFhMWE0NWIyYzZlMTNmYTRhNDI2ZDE5ZWJkNzVkNjU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjI6MjQ6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li43MzA1NzFlOTJhZjgxIDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbisrKyBiL2ZzL2RjYWNoZS5jXG5AQCAtMTkxMCwxMiArMTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdC8qXG4tXHQgKiBXZSBndWFyYW50ZWUgdGhhdCB0aGUgaW5saW5lIG5hbWUgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLlxuLVx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxuLVx0ICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0XG4tXHQgKiBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyXG4rXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbitcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XG4rXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxuK1x0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXG4rXHQgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLlxuK1x0ICpcbitcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXG4rXHQgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCxcbitcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cbiBcdCAqL1xuLVx0ZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcbitcdG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbiBcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbiBcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4gXHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI1OjU0Ljk4MzA1MjIwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDA1ODg0NzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZW50cnkgSW5pdGlhbGl6YXRpb246IEEgQ2xvc2VyIExvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRjYWNoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2RfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0LCBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtgLCBvbmx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgKmxhc3QqIGJ5dGUgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciBpcyBudWxsLXRlcm1pbmF0ZWQuIFRoYXQncyBub3QgaWRlYWwsIGFuZCBoZXJlJ3Mgd2h5LlxuXG5UaGUgY29kZSdzIGNvbW1lbnQgbWVudGlvbnMgcmVuYW1lIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBob3cgYG1lbWNweWAgaXMgdXNlZCB0byBkbyBhIG5hbWUgc3dpdGNoLiBUaGUgY3JpdGljYWwgY29uY2VybiBpcyB0aGF0IGlmIHRoZSAqd2hvbGUqIGlubGluZSBidWZmZXIgaXNuJ3QgaW5pdGlhbGl6ZWQsIHdlIGNvdWxkIGVuZCB1cCBwcm9wYWdhdGluZyBnYXJiYWdlIGRhdGEgZHVyaW5nIGEgYHJlbmFtZWAgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYm90aCBgY29weV9uYW1lKClgIGFuZCBgc3dhcF9uYW1lcygpYCBjb3B5IHRoZSB3aG9sZSBgZF9zaG9ydG5hbWVgIGZpZWxkLCBhbmQgYF9fZF9sb29rdXBfcmN1KClgIG1pZ2h0IHRyYW5zaWVudGx5IHJlYWQgYnl0ZXMgZnJvbSBpdCBhcyB3ZWxsLCBlc3BlY2lhbGx5IHdoaWxlIGEgYHJlbmFtZSgpYCBpcyByZXdyaXRpbmcgaXQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzLlxuXG5UaGUgcGF0Y2gncyByZXBsYWNlbWVudCwgYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLCBub3cgKmZ1bGx5KiBpbml0aWFsaXplcyB0aGUgYGRfc2hvcnRuYW1lYCBidWZmZXIgdG8gemVyby4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZG9uJ3QgbGVhayBvdXQgZHVyaW5nIHJlbmFtZSBvcGVyYXRpb25zLiBJdCBlZmZlY3RpdmVseSBwcm92aWRlcyBhIGd1YXJhbnRlZWQgbnVsbC10ZXJtaW5hdGlvbiBhdCB0aGUgZW5kIChidXQgYmV0dGVyKSwgcmVnYXJkbGVzcyBvZiBpbnRlcm5hbCBudWxsIGNoYXJhY3RlcnMsIGFuZCBzYWZlZ3VhcmRzIGFnYWluc3QgdW5leHBlY3RlZCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBOb3cgdGhlIGNvZGUgaXMgbXVjaCBzYWZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjI5LjA0MTkwNDE2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHQgXFxuMTkwMTpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbjE5MDI6XFx0e1xcbjE5MDM6XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbjE5MDQ6XFx0XFx0Y2hhciAqZG5hbWU7XFxuMTkwNTpcXHRcXHRpbnQgZXJyO1xcbjE5MDY6XFx0XFxuMTkwNzpcXHRcXHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFxcdTAwMjZzYi1cXHUwMDNlc19kZW50cnlfbHJ1LFxcbjE5MDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuMTkwOTpcXHRcXHRpZiAoIWRlbnRyeSlcXG4xOTEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHQvKlxcbjE5MTM6XFx0XFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXFxuMTkxNDpcXHRcXHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxcbjE5MTU6XFx0XFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4xOTE2OlxcdFxcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxcbjE5MTc6XFx0XFx0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cXG4xOTE4OlxcdFxcdCAqXFxuMTkxOTpcXHRcXHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxcbjE5MjA6XFx0XFx0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXFxuMTkyMTpcXHRcXHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXFxuMTkyMjpcXHRcXHQgKi9cXG4xOTIzOlxcdFxcdG1lbXNldChkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XFxuMTkyNDpcXHRcXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XFxuMTkyNTpcXHRcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuMTkyNjpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbjE5Mjc6XFx0XFx0fSBlbHNlIGlmIChuYW1lLVxcdTAwM2VsZW4gXFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcXG4xOTI4OlxcdFxcdFxcdHN0cnVjdCBleHRlcm5hbF9uYW1lICpwO1xcbjE5Mjk6XFx0XFxuMTkzMDpcXHRcXHRcXHRwID0ga21hbGxvY19mbGV4KCpwLCBuYW1lLCBuYW1lLVxcdTAwM2VsZW4gKyAxLFxcbjE5MzE6XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1JFQ0xBSU1BQkxFKTtcXG4xOTMyOlxcdFxcdFxcdGlmICghcCkge1xcbjE5MzM6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGRlbnRyeV9jYWNoZSwgZGVudHJ5KTsgXFxuMTkzNDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTM1OlxcdFxcdFxcdH1cXG4xOTM2OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnAtXFx1MDAzZWNvdW50LCAxKTtcXG4xOTM3OlxcdFxcdFxcdGRuYW1lID0gcC1cXHUwMDNlbmFtZTtcXG4xOTM4OlxcdFxcdH0gZWxzZSAge1xcbjE5Mzk6XFx0XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4xOTQwOlxcdFxcdH1cXHRcXG4xOTQxOlxcdFxcbjE5NDI6XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVxcdTAwM2VsZW47XFxuMTk0MzpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2ggPSBuYW1lLVxcdTAwM2VoYXNoO1xcbjE5NDQ6XFx0XFx0bWVtY3B5KGRuYW1lLCBuYW1lLVxcdTAwM2VuYW1lLCBuYW1lLVxcdTAwM2VsZW4pO1xcbjE5NDU6XFx0XFx0ZG5hbWVbbmFtZS1cXHUwMDNlbGVuXSA9IDA7XFxuMTk0NjpcXHRcXG4xOTQ3OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VlIHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyICovXFxuMTk0ODpcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lLCBkbmFtZSk7IC8qIF5eXiAqL1xcbjE5NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjI5LjA0MjA3NjcwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODY5MDIxNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGBfX2RfYWxsb2NgIHB1bGxzIGEgYGRlbnRyeWAgZnJvbSB0aGUgYGRlbnRyeV9jYWNoZWAgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2NfbHJ1YC4gQnV0IHRoYXQgY2FjaGUgZG9lc24ndCBuZWNlc3NhcmlseSB6ZXJvIG1lbW9yeSwgcmlnaHQ/IEl0IHVzZXMgZmxhZ3MsIGJ1dCBJJ20gbm90IHN1cmUgaWYgYGRfc2hvcnRuYW1lYCBpcyBhbHdheXMgemVyb2VkLiBUaGVuLCB3YWl0LCB0aGlzIHBhdGNoISBJdCdzIGNoYW5naW5nIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO2AgdG8gYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBTbywgaXQncyBmaXhpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUhXG5cbkJ1dCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgS01TQU4gc2Vzc2lvbj8gTGV0J3MgY2xhcmlmeSEgS01TQU4gaXMgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMsIHdoaWNoIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgdG9vbHMgZG9uJ3QgY2F0Y2guIFRoZSBydWxlIGlzLCBcIk5PIEtNU0FOIElGIEtBU0FOIENBVENIRVMgSVQhXCJcblxuTm93IHRoZSBjcml0ZXJpYSBhcmUga2V5OiBJIG5lZWQgdG8gY29uc2lkZXIgYE5lZWRzS01TQU49dHJ1ZWAgb25seSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyByaXNrcyBsaWtlOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG40LiBCb3VuZHMgY2hlY2tzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy5cblxuQ29udmVyc2VseSwgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmOlxuLSBJdCdzIG1haW5seSBhYm91dCBvdXQtb2YtYm91bmRzLCBvdmVyZmxvd3MsIE5VTEwgZGVyZWZlcmVuY2VzLCBldGMuIChLQVNBTiBjYXRjaGVzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkICh1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKS5cbi0gVGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy5cblxuV2FpdCwgdGhpcyBwYXRjaCAqZml4ZXMqIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AgYnkgYWRkaW5nIGBtZW1zZXRgLiBTbywgZG9lcyB0aGUgcGF0Y2ggaXRzZWxmICppbnRyb2R1Y2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyEgUXVpdGUgdGhlIG9wcG9zaXRlLCBpdCAqZWxpbWluYXRlcyogYSBwb3RlbnRpYWwgc291cmNlIG9mIGl0LiBOb3csIHdoeSB3YXMgdGhpcyBwYXRjaCBzdWJtaXR0ZWQ/IFdhcyB0aGUgcHJldmlvdXMgY29kZSB0cmlnZ2VyaW5nIGEgS01TQU4gaXNzdWUsIG9yIHdhcyB0aGlzIGEgcHJvYWN0aXZlIGZpeD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGdpdCBsb2cgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSW4gYW55IGNhc2UsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBjcml0ZXJpYSwgSSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjM1LjkxMTEwMjI5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4NDUwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MTItXFx0LypcXG5mcy9kY2FjaGUuYzoxOTEzOlxcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxcbmZzL2RjYWNoZS5jLTE5MTQtXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjY6MzUuOTY3OTU0ODgzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNDMxMjE1MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIGluIGBmcy9kY2FjaGUuY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBnaXQgbG9nYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIG9yIG1heWJlIGxvb2sgZm9yIHJlbGF0ZWQgY29tbWl0cywgYnV0IHNpbmNlIEkgaGF2ZSB0aGUgcGF0Y2ggaXRzZWxmLCB0aGF0J3Mgd2hhdCBJJ2xsIGRvLiBUaGUgY29kZSBtb2RpZmllcyBgX19kX2FsbG9jYCBpbiBgZnMvZGNhY2hlLmNgLiBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGd1aWRpbmcgcHJpbmNpcGxlIGhlcmUgaXMgdG8gKmF2b2lkKiBhIEtNU0FOIHNlc3Npb24gaWYgZXhpc3RpbmcgY2hlY2tzLCBzdWNoIGFzIEtBU0FOLCB3b3VsZCBhbHJlYWR5IGNhdGNoIHRoZSBidWcuIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZSwgYW5kIEknbSBsb29raW5nIGZvciAqdW5pcXVlKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuQW5hbHl6aW5nIHRoZSBkaWZmLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AgaXMgaW5pdGlhbGl6ZWQuIFByZXZpb3VzbHksIG9ubHkgdGhlIGxhc3QgYnl0ZSB3YXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSByZXN0IHdhcyBsZWZ0IGFzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbGxvY2F0ZWQgZnJvbSB0aGUgc2xhYiBjYWNoZS4gVGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBhY2Nlc3NlZCBieSBgY29weV9uYW1lKClgLCBgc3dhcF9uYW1lcygpYCBkdXJpbmcgcmVuYW1lLCBvciBwb3RlbnRpYWxseSBieSBgX19kX2xvb2t1cF9yY3UoKWAuIFRoaXMgaXMgdGV4dGJvb2sgS01TQU4gbWF0ZXJpYWwsIGFzIHRoZXNlIGFjY2Vzc2VzIHdlcmUgdHJpZ2dlcmluZyBLTVNBTiBmYWlsdXJlcy4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoYXQgc2luZ2xlLWJ5dGUgemVyb2luZyB3aXRoIGBtZW1zZXQoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgLCBpbml0aWFsaXppbmcgdGhlICplbnRpcmUqIGJ1ZmZlciB0byB6ZXJvLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgbm90IGlmIHRoZSAqcHJldmlvdXMqIGNvZGUgaGFkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIGJ1dCB3aGV0aGVyIHRoaXMgcGF0Y2ggKmludHJvZHVjZXMqIG5ldyByaXNrcyBvciBleHBvc2VzIGFueSB0aGF0IGFyZSBvbmx5IGRldGVjdGFibGUgYnkgS01TQU4uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIHBhdGNo4oCZcyBpbXBhY3QuXG5cbk5vdywgbGV0J3MgY2FyZWZ1bGx5IHJldmlldyB0aGUgS01TQU4gY3JpdGVyaWEuIE15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBvciBtb2RpZmllcyByaXNrczpcblxuKiAgIEknbSBsb29raW5nIGZvciBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuIFRoaXMgaXNuJ3Qgc2VuZGluZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLlxuKiAgIEknbSBsb29raW5nIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIHNlZW1zIHNpbXBsZS4gVGhlIHBhdGNoIGl0c2VsZiBpbml0aWFsaXplcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgKmJlZm9yZSogYW55IHJlYWRzIGhhcHBlbi5cbiogICBJJ20gbG9va2luZyBmb3IgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhbmQgY29ycmVjdHMgdGhlIGlzc3VlIHdpdGggdGhlIG9sZCBjb2RlLCBlbnN1cmluZyB0aGUgaW5saW5lIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQuIEl0ICpwcmV2ZW50cyogdGhhdCBzaXR1YXRpb24uXG4qICAgSSdtIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcy4gVGhlIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55IGxvZ2ljIHdoaWNoIHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlbiBsZXQncyByZXZpZXcgdGhlIGNhc2VzIGluIHdoaWNoIGBOZWVkc0tNU0FOPWZhbHNlYFxuXG4qICAgVGhlIHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93LCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWc6IHRoZXNlIGFyZSBhbGwgaGFuZGxlZCBieSBleGlzdGluZyB0b29scy5cbiogICBUaGUgcGF0Y2ggemVyby1pbml0aWFsaXplcyBvciBvdGhlcndpc2UgaW5pdGlhbGl6ZXMgYWxsIHN0cnVjdHVyZXMgYmVmb3JlIHRoZXkgYXJlIHJlYWQgb3IgY29waWVkOiBCaW5nby4gVGhlIGBtZW1zZXRgIGRvZXMgcHJlY2lzZWx5IHRoYXQhXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IFRoaXMgc2VlbXMgY29ycmVjdC4gVGhlIHBhdGNoIHJlbW92ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbS5cblxuVGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRyZXNzZXMgYW5kIGZpeGVzIGEgcHJpb3IgcHJvYmxlbSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnkgdXNpbmcgYG1lbXNldGAuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBhbmQgaXQncyBhIGRpcmVjdCBmaXggZm9yIGEgS01TQU4gaXNzdWUgaW4gdGhlIHByZXZpb3VzIHZlcnNpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYG1lbXNldGAgaXRzZWxmIGlzbid0IGEgc291cmNlIG9mIGJ1Z3MsIGJ1dCB0aGUgY29kZSBpbiBjb250ZXh0IGRvZXMgbm90IHRyaWdnZXIgYW55IG9mIHRoZSBzdGFuZGFyZCBtZW1zZXQgcGl0ZmFsbHMgc3VjaCBhcyBzaXplIG1pc2NhbGN1bGF0aW9uIG9yIGJ1ZmZlciBvdmVyZmxvd3MuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIHBhdGNoIGlzIGEgZml4IGZvciBLTVNBTiwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNjo0OS4zOTkxNzIzNzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODcwMzcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZXh0ZXJuYWxfbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2RjYWNoZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMjoyNjo0OS40NTIwNTA0ODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzIzNDQzNDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGRjYWNoZS5oIEhlYWRlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBkX3Nob3J0bmFtZWAuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5jbHVkZS9saW51eC9kY2FjaGUuaGAgaGVhZGVyIGZpbGUuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBkY2FjaGUsIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBJJ20gZ29pbmcgdG8gbG9vayB0aHJvdWdoIHRoYXQgZmlsZSBjYXJlZnVsbHksIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yIHRoZSBgZF9zaG9ydG5hbWVgIGlkZW50aWZpZXIuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkLCBvciBhdCBsZWFzdCBkZWNsYXJlZCwgZGlyZWN0bHkgd2l0aGluIHRoYXQgaGVhZGVyLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLCBpdHMgdXNhZ2UsIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGRjYWNoZS1yZWxhdGVkIGRhdGEgbWVtYmVycy4gVGhpcyBtaWdodCBpbnZvbHZlIHRyYWNpbmcgYmFjayB0aHJvdWdoIGFueSByZWxhdGVkIG1hY3JvcyBvciB0eXBlZGVmcyBpZiB0aGUgZGVjbGFyYXRpb24gaXNuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYzMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI2OjU2LjY4NjQ4ODMyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzk5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZF9zaG9ydG5hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9kY2FjaGUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTg0PXVuaW9uIHNob3J0bmFtZV9zdG9yZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTg5LSNkZWZpbmUgZF9sb2NrXFx0ZF9sb2NrcmVmLmxvY2tcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjkwOiNkZWZpbmUgZF9pbmFtZSBkX3Nob3J0bmFtZS5zdHJpbmdcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTkxLXN0cnVjdCBjb21wbGV0aW9uX2xpc3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTkzPXN0cnVjdCBkZW50cnkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0xMDQtXFx0XFx0XFx0XFx0XFx0ICogbmVnYXRpdmUgKi9cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjEwNTpcXHR1bmlvbiBzaG9ydG5hbWVfc3RvcmUgZF9zaG9ydG5hbWU7XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0xMDYtXFx0LyogLS0tIGNhY2hlbGluZSAxIGJvdW5kYXJ5ICg2NCBieXRlcykgd2FzIDMyIGJ5dGVzIGFnbyAtLS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjI6MjY6NTYuNzM1MDM0MTc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5ODA5MTUxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGRjYWNoZS5oIGRldGFpbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDgwIHRocm91Z2ggOTUgb2YgYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBrZXJuZWwgZGVmaW5lcyBhbmQgaW50ZXJhY3RzIHdpdGggaXRzIGRpcmVjdG9yeSBjYWNoZSBhdCB0aGlzIGxldmVsIG9mIGFic3RyYWN0aW9uLiBJJ20gZXhwZWN0aW5nIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxpa2VseSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBwcm90b3R5cGVzIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gZGVudHJ5IG1hbmFnZW1lbnQuIENvbnNpZGVyaW5nIHdoZXJlIHdlIGFyZSBpbiB0aGUgaW5jbHVkZSBoaWVyYXJjaHksIHRoaXMgc2hvdWxkIGJlIHRoZSBsb3ctbGV2ZWwsIGludGVybmFsIGZhY2luZyBkZWNsYXJhdGlvbiBhbmQgbm90IHRoZSBoaWdoLWxldmVsIEFQSS4gVGhpcyBtaWdodCBjb3ZlciB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZGVudHJpZXMsIHRoZWlyIGZsYWdzLCBvciBwZXJoYXBzIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSBjb250cm9sIHdpdGhpbiB0aGUgZGNhY2hlLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IG9mIHRoZSBvbGRlciBsb2NraW5nIGFwcHJvYWNoZXMsIHN1Y2ggYXMgdGhlIHNwaW5sb2NrcywgYXJlIGVtcGxveWVkIGF0IHRoaXMgbGV2ZWwuIEknbGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIHJlZmVyZW5jZXMgdG8gaG93IGRlbnRyaWVzIGFyZSBsaW5rZWQgaW50byB0aGUgbGFyZ2VyIGZpbGUgc3lzdGVtIG5hbWVzcGFjZS4gSSBhbSBwcmVwYXJlZCB0byBhbmFseXplIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbm9kZSBjYWNoZSBhcyB3ZWxsLCBpZiB0aGUgY29kZSBjb250YWlucyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI3OjAyLjcxNTk1MTYxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2RjYWNoZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNlbmRpZlxcbiAgODE6XFx0XFxuICA4MjpcXHQjZGVmaW5lIEROQU1FX0lOTElORV9MRU4gKEROQU1FX0lOTElORV9XT1JEUypzaXplb2YodW5zaWduZWQgbG9uZykpXFxuICA4MzpcXHRcXG4gIDg0OlxcdHVuaW9uIHNob3J0bmFtZV9zdG9yZSB7XFxuICA4NTpcXHRcXHR1bnNpZ25lZCBjaGFyIHN0cmluZ1tETkFNRV9JTkxJTkVfTEVOXTtcXG4gIDg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgd29yZHNbRE5BTUVfSU5MSU5FX1dPUkRTXTtcXG4gIDg3OlxcdH07XFxuICA4ODpcXHRcXG4gIDg5OlxcdCNkZWZpbmUgZF9sb2NrXFx0ZF9sb2NrcmVmLmxvY2tcXG4gIDkwOlxcdCNkZWZpbmUgZF9pbmFtZSBkX3Nob3J0bmFtZS5zdHJpbmdcXG4gIDkxOlxcdHN0cnVjdCBjb21wbGV0aW9uX2xpc3Q7XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0cnVjdCBkZW50cnkge1xcbiAgOTQ6XFx0XFx0LyogUkNVIGxvb2t1cCB0b3VjaGVkIGZpZWxkcyAqL1xcbiAgOTU6XFx0XFx0dW5zaWduZWQgaW50IGRfZmxhZ3M7XFx0XFx0LyogcHJvdGVjdGVkIGJ5IGRfbG9jayAqL1xcbiAgOTY6XFx0XFx0c2VxY291bnRfc3BpbmxvY2tfdCBkX3NlcTtcXHQvKiBwZXIgZGVudHJ5IHNlcWxvY2sgKi9cXG4gIDk3OlxcdFxcdHN0cnVjdCBobGlzdF9ibF9ub2RlIGRfaGFzaDtcXHQvKiBsb29rdXAgaGFzaCBsaXN0ICovXFxuICA5ODpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkX3BhcmVudDtcXHQvKiBwYXJlbnQgZGlyZWN0b3J5ICovXFxuICA5OTpcXHRcXHR1bmlvbiB7XFxuIDEwMDpcXHRcXHRzdHJ1Y3QgcXN0ciBfX2RfbmFtZTtcXHRcXHQvKiBmb3IgdXNlIE9OTFkgaW4gZnMvZGNhY2hlLmMgKi9cXG4gMTAxOlxcdFxcdGNvbnN0IHN0cnVjdCBxc3RyIGRfbmFtZTtcXG4gMTAyOlxcdFxcdH07XFxuIDEwMzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XFx0XFx0LyogV2hlcmUgdGhlIG5hbWUgYmVsb25ncyB0byAtIE5VTEwgaXNcXG4gMTA0OlxcdFxcdFxcdFxcdFxcdFxcdCAqIG5lZ2F0aXZlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI3OjAyLjcxNjAyOTg1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzI4MDEwNDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lYCBaZXJvaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYCBpcyAqZXhhY3RseSogYEROQU1FX0lOTElORV9MRU5gIGluIHNpemUuIFRoaXMgbWVhbnMgd2hlbiBJIGBtZW1zZXRgIHRoYXQgc3RyaW5nIHRvIHplcm8sIEknbSBjb21wbGV0ZWx5IHdpcGluZyB0aGUgKmVudGlyZSogYGRfc2hvcnRuYW1lYCB1bmlvbi4gQ3J1Y2lhbGx5LCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiBnb2luZyBvdXQtb2YtYm91bmRzLiBJdCB6ZXJvZXMgdGhlIHdob2xlIHRoaW5nOyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZW1haW5zLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrYWdlLiBJbiBmYWN0LCBpdCAqZWxpbWluYXRlcyogYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB0aGF0IGNvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllciwgbGlrZSBkdXJpbmcgYSBjb3B5IG9wZXJhdGlvbiBvciBldmVuIGp1c3QgYSB0cmFuc2llbnQgcmVhZCBvZiB0aGF0IGBkX3Nob3J0bmFtZWAgZmllbGQuXG5cblNvLCBib3R0b20gbGluZTogdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gS0FTQU4gYW5kIG91ciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgZm9yIHJlZ3Jlc3Npb24gdGVzdGluZy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUgdGhhdCB3YXJyYW50cyBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQgd291bGQgYmUgb3ZlcmtpbGwuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgZm9yIG15IG93biBwZWFjZSBvZiBtaW5kLCB0aGF0IEkndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzOlxuXG4xLiAgYE5lZWRzS01TQU5gOiBGYWxzZS4gQ2hlY2suXG4yLiAgYEtNU0FOUmVhc29uaW5nYDogTmVlZCB0byBpbmNsdWRlIHNvbWUgc29saWQgcmVhc29uaW5nIGNvbnRyYXN0aW5nIHRoZSBuZWVkIGZvciBLQVNBTiB2cy4gS01TQU4gaW4gdGhlIGNvZGUuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBLQVNBTiBpcyBzdWZmaWNpZW50IGluIG15IHJlYXNvbmluZy4gQ2hlY2suXG4zLiAgTm93IEkganVzdCBuZWVkIHRvIGNhbGwgdGhhdCBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZmluYWxpemUgZXZlcnl0aGluZy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBpcyBjbGVhci4gSSdtIHNhdGlzZmllZC4gVGhpcyBwYXRjaCBpcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzE5LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIyOjI3OjM1Ljk5NjEzNzE4NloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgdG8gZnVsbHkgemVybyB0aGUgZGVudHJ5IGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpIHVzaW5nIG1lbXNldCguLi4sIDAsIEROQU1FX0lOTElORV9MRU4pIGluc3RlYWQgb2Ygb25seSBzZXR0aW5nIHRoZSBsYXN0IGJ5dGUgdG8gTlVMLiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aGVyZSBjb3B5X25hbWUoKSwgc3dhcF9uYW1lcygpLCBvciBfX2RfbG9va3VwX3JjdSgpIGNvdWxkIHJlYWQgb3IgcHJvcGFnYXRlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgdGFpbCBvZiB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiBCZWNhdXNlIHRoZSBwYXRjaCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnVmZmVyIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIHRvIGZ1bGx5IHplcm8gdGhlIGRlbnRyeSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKSB1c2luZyBtZW1zZXQoLi4uLCAwLCBETkFNRV9JTkxJTkVfTEVOKSBpbnN0ZWFkIG9mIG9ubHkgc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIE5VTC4gVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2hlcmUgY29weV9uYW1lKCksIHN3YXBfbmFtZXMoKSwgb3IgX19kX2xvb2t1cF9yY3UoKSBjb3VsZCByZWFkIG9yIHByb3BhZ2F0ZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gdGhlIHRhaWwgb2YgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gQmVjYXVzZSB0aGUgcGF0Y2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3JlZ3Jlc3Npb24gdGVzdGluZyBpcyBzdWZmaWNpZW50IGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[1] Phase: Succeeded StartedAt: 2026-09-14 22:27:47 +0000 UTC FinishedAt: 2026-09-14 22:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 22:27:47 +0000 UTC FinishedAt: 2026-09-14 22:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2] Phase: Succeeded StartedAt: 2026-09-14 22:27:47 +0000 UTC FinishedAt: 2026-09-15 02:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:27:47 +0000 UTC FinishedAt: 2026-09-15 02:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:27:47 +0000 UTC FinishedAt: 2026-09-14 22:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:27:47 +0000 UTC FinishedAt: 2026-09-14 22:27:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","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-workflowqbkhv/series-workflowqbkhv-convert-artifact-3224779796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:27:57 +0000 UTC FinishedAt: 2026-09-14 22:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:27:57 +0000 UTC FinishedAt: 2026-09-14 22:44:05 +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:*2b1c7d94-9b5b-4a6b-965f-3bb147618d19,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-workflowqbkhv/series-workflowqbkhv-convert-artifact-3224779796/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": "05f47283-1644-456d-9f38-56c134e0786a", "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-workflowqbkhv/series-workflowqbkhv-build-action-798607506/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:27:57 +0000 UTC FinishedAt: 2026-09-14 22:43:59 +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:*2b1c7d94-9b5b-4a6b-965f-3bb147618d19,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-workflowqbkhv/series-workflowqbkhv-convert-artifact-3224779796/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": "05f47283-1644-456d-9f38-56c134e0786a", "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-workflowqbkhv/series-workflowqbkhv-build-action-798607506/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:44:05 +0000 UTC FinishedAt: 2026-09-14 22:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:44:05 +0000 UTC FinishedAt: 2026-09-14 22:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:44:05 +0000 UTC FinishedAt: 2026-09-14 22:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:44:05 +0000 UTC FinishedAt: 2026-09-14 22:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-workflowqbkhv/series-workflowqbkhv-convert-artifact-2472372179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:44:26 +0000 UTC FinishedAt: 2026-09-14 22:46:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:44:26 +0000 UTC FinishedAt: 2026-09-14 22:46:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*05f47283-1644-456d-9f38-56c134e0786a,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-workflowqbkhv/series-workflowqbkhv-build-action-798607506/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-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:46:18 +0000 UTC FinishedAt: 2026-09-14 22:46:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:46:18 +0000 UTC FinishedAt: 2026-09-14 22:46:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:46:18 +0000 UTC FinishedAt: 2026-09-14 23:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:46:18 +0000 UTC FinishedAt: 2026-09-14 23:02:35 +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:*2b1c7d94-9b5b-4a6b-965f-3bb147618d19,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-workflowqbkhv/series-workflowqbkhv-convert-artifact-2472372179/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": "37c419a1-1543-4d7f-803e-f7c08bb72b48", "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-workflowqbkhv/series-workflowqbkhv-build-action-3360922887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 22:46:18 +0000 UTC FinishedAt: 2026-09-14 23:02:25 +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:*2b1c7d94-9b5b-4a6b-965f-3bb147618d19,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-workflowqbkhv/series-workflowqbkhv-convert-artifact-2472372179/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": "37c419a1-1543-4d7f-803e-f7c08bb72b48", "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-workflowqbkhv/series-workflowqbkhv-build-action-3360922887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:02:35 +0000 UTC FinishedAt: 2026-09-14 23:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:02:35 +0000 UTC FinishedAt: 2026-09-14 23:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:02:35 +0000 UTC FinishedAt: 2026-09-14 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:02:35 +0000 UTC FinishedAt: 2026-09-14 23:04:15 +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:*37c419a1-1543-4d7f-803e-f7c08bb72b48,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-workflowqbkhv/series-workflowqbkhv-build-action-3360922887/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-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-15 02:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-15 02:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*05f47283-1644-456d-9f38-56c134e0786a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37c419a1-1543-4d7f-803e-f7c08bb72b48,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-workflowqbkhv/series-workflowqbkhv-build-action-798607506/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-workflowqbkhv/series-workflowqbkhv-build-action-3360922887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-14 23:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-14 23:04:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqbkhv/series-workflowqbkhv-convert-artifact-1510060364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-14 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-14 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:25 +0000 UTC FinishedAt: 2026-09-14 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:35 +0000 UTC FinishedAt: 2026-09-15 02:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbkhv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_move","d_exchange"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b179425-8a67-407f-81c4-cddd025c0305","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-09-14 23:04:35 +0000 UTC FinishedAt: 2026-09-15 02:08:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*05f47283-1644-456d-9f38-56c134e0786a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37c419a1-1543-4d7f-803e-f7c08bb72b48,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-workflowqbkhv/series-workflowqbkhv-build-action-798607506/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-workflowqbkhv/series-workflowqbkhv-build-action-3360922887/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-workflowqbkhv/series-workflowqbkhv-convert-artifact-1510060364/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,}