Name: series-workflowgzjch Phase: Succeeded StartedAt: 2026-09-11 14:17:39 +0000 UTC FinishedAt: 2026-09-11 18:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[0] Phase: Succeeded StartedAt: 2026-09-11 14:17:39 +0000 UTC FinishedAt: 2026-09-11 14:21:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 14:17:39 +0000 UTC FinishedAt: 2026-09-11 14:21:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "30aa457b-4b74-4e8b-92fb-80a98bea0b48" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "__bpf_sk_storage_map_seq_show", "bpf_sk_storage_map_seq_show", "bpf_sk_storage_map_seq_start", "bpf_sk_storage_map_seq_next", "bpf_sk_storage_map_seq_stop", "bpf_sk_storage_free", "bpf_sk_storage_lookup", "bpf_sk_storage_del" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpYCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb2ludGVyIHZhbGlkaXR5IC8gTlVMTCBkZXJlZmVyZW5jZSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgcG9pbnRlciB2YWxpZGl0eSBpc3N1ZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGJ1aWxkcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YzNhNzRjODlhOGQ1YWUwMDYwMTlhMTI2ODc4ZjA4ODE0YzcwODhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MTk6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjdkMDIyNDVhYTcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5AQCAtODA2LDYgJiM0Mzs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChzZWxlbSkge1xuIFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4mIzQzO1x0XHRcdGlmICghc2tfc3RvcmFnZSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gU0VRX1NLSVA7XG4gXHRcdFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtcbiBcdFx0XHRjdHgudmFsdWUgPSBTREFUQShzZWxlbSktXHUwMDNlZGF0YTtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzNhNzRjODlhOGQ1YWUwMDYwMTlhMTI2ODc4ZjA4ODE0YzcwODhkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MTk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwppbmRleCAxZDI5NWE4NzY5ZmFkLi43ZDAyMjQ1YWE3MDQ5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKQEAgLTgwNiw2ICYjNDM7ODA2LDggQEAgc3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKIAkJY3R4Lm1hcCA9IGluZm8tJmd0O21hcDsKIAkJaWYgKHNlbGVtKSB7CiAJCQlza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLSZndDtsb2NhbF9zdG9yYWdlKTsKJiM0MzsJCQlpZiAoIXNrX3N0b3JhZ2UpCiYjNDM7CQkJCXJldHVybiBTRVFfU0tJUDsKIAkJCWN0eC5zayA9IHNrX3N0b3JhZ2UtJmd0O293bmVyOwogCQkJY3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLSZndDtkYXRhOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTSyBTdG9yYWdlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwNi4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIG15IHByZWZlcnJlZCB0b29saW5nLCBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcsIG9yIGBncmVwcGVyYCB0byBsb2NhdGUgdGhlIHBlcnRpbmVudCBjb2RlIHdpdGggc29tZSBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFx0XHQgICAgIHZvaWQgKnZhbHVlKVxuIDc5MTpcdFxuIDc5MjpcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gNzkzOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4gNzk0Olx0e1xuIDc5NTpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gNzk2Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9za19zdG9yYWdlX21hcCBjdHggPSB7fTtcbiA3OTc6XHRcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcbiA3OTg6XHRcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XG4gNzk5Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gODAwOlx0XHRpbnQgcmV0ID0gMDtcbiA4MDE6XHRcbiA4MDI6XHRcdG1ldGEuc2VxID0gc2VxO1xuIDgwMzpcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIHNlbGVtID09IE5VTEwpO1xuIDgwNDpcdFx0aWYgKHByb2cpIHtcbiA4MDU6XHRcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIDgwNjpcdFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gODA3Olx0XHRcdGlmIChzZWxlbSkge1xuIDgwODpcdFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4gODA5Olx0XHRcdFx0aWYgKCFza19zdG9yYWdlKVxuIDgxMDpcdFx0XHRcdFx0cmV0dXJuIFNFUV9TS0lQO1xuIDgxMTpcdFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gODEyOlx0XHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gODEzOlx0XHRcdH1cbiA4MTQ6XHRcdFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXHUwMDI2Y3R4KTtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcbiA4MTc6XHRcdHJldHVybiByZXQ7XG4gODE4Olx0fVxuIDgxOTpcdFxuIDgyMDpcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDgyMTpcdHtcbiA4MjI6XHRcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xuIDgyMzpcdH1cbiA4MjQ6XHRcbiA4MjU6XHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gODI2Olx0XHRfX3JlbGVhc2VzKFJDVSlcbiA4Mjc6XHR7XG4gODI4Olx0XHRpZiAoIXYpXG4gODI5Olx0XHRcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gb2YgYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgdGhlIGluY2x1c2lvbiBhbmQgY29tcGlsYXRpb24gb2YgYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgdHJlZSBhbmQgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvZiB0aGlzIGZpbGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIOKAkyB0aGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBjb250cm9sbGluZyBvYmplY3QgZmlsZSBpbmNsdXNpb24gYW5kIGZlYXR1cmUgdG9nZ2xlcywgcmVzcGVjdGl2ZWx5LiBJJiMzOTtsbCBzZWFyY2ggc3BlY2lmaWNhbGx5IGZvciBlaXRoZXIgdGhlIG9iamVjdCBmaWxlIG5hbWUsIGBicGZfc2tfc3RvcmFnZS5vYCwgb3IgdGhlIGxpa2VseSBjb25maWd1cmF0aW9uIHN5bWJvbCwgYEJQRl9TS19TVE9SQUdFYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgSSYjMzk7bSBsb29raW5nIGZvciBhbmQgbGVhZCBtZSB0byB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9ycyBhbmQgc2tfc3RvcmFnZSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIHRoZXJlIGFyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGVkIHNldHRpbmdzIGNvbm5lY3RlZCB0byBCUEYgaXRlcmF0b3JzLCBvciB0aGUgbW9yZSBzcGVjaWZpYyBgYnBmX3NrX3N0b3JhZ2VgIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhcywgc28gSSB3YW50IHRvIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIEkgbWlnaHQgYmUgbWlzc2luZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjaGFuZ2UgaG93IGBicGZfc2tfc3RvcmFnZWAgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AgZmlsZSBpdHNlbGYuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFuZCBtb3N0IG9idmlvdXMgcGxhY2UgdG8gbG9vaywgZ2l2ZW4gaXRzIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDE5IEZhY2Vib29rICAqL1xuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sb2NhbF9zdG9yYWdlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYnBmX3NrX3N0b3JhZ2UuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3NvY2tfZGlhZy5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9idGYuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3RyYWNlLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHRERUZJTkVfQlBGX1NUT1JBR0VfQ0FDSEUoc2tfY2FjaGUpO1xuICAxOTpcdFxuICAyMDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqXG4gIDIxOlx0YnBmX3NrX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcbiAgMjI6XHR7XG4gIDIzOlx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XG4gIDI0Olx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwO1xuICAyNTpcdFxuICAyNjpcdFx0c2tfc3RvcmFnZSA9XG4gIDI3Olx0XHRcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay1cdTAwM2Vza19icGZfc3RvcmFnZSwgYnBmX3JjdV9sb2NrX2hlbGQoKSk7XG4gIDI4Olx0XHRpZiAoIXNrX3N0b3JhZ2UpXG4gIDI5Olx0XHRcdHJldHVybiBOVUxMO1xuICAzMDpcdFxuICAzMTpcdFx0c21hcCA9IChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICopbWFwO1xuICAzMjpcdFx0cmV0dXJuIGJwZl9sb2NhbF9zdG9yYWdlX2xvb2t1cChza19zdG9yYWdlLCBzbWFwLCBjYWNoZWl0X2xvY2tpdCk7XG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfZGVsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcClcbiAgMzY6XHR7XG4gIDM3Olx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqc2RhdGE7XG4gIDM4Olx0XG4gIDM5Olx0XHRzZGF0YSA9IGJwZl9za19zdG9yYWdlX2xvb2t1cChzaywgbWFwLCBmYWxzZSk7XG4gIDQwOlx0XHRpZiAoIXNkYXRhKVxuICA0MTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAgNDI6XHRcbiAgNDM6XHRcdHJldHVybiBicGZfc2VsZW1fdW5saW5rKFNFTEVNKHNkYXRhKSk7XG4gIDQ0Olx0fVxuICA0NTpcdFxuICA0NjpcdC8qIENhbGxlZCBieSBfX3NrX2Rlc3RydWN0KCkgXHUwMDI2IGJwZl9za19zdG9yYWdlX2Nsb25lKCkgKi9cbiAgNDc6XHR2b2lkIGJwZl9za19zdG9yYWdlX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxuICA0ODpcdHtcbiAgNDk6XHRcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcbiAgNTA6XHRcdHUzMiB1bmNoYXJnZTtcbiAgNTE6XHRcbiAgNTI6XHRcdHJjdV9yZWFkX2xvY2tfZG9udF9taWdyYXRlKCk7XG4gIDUzOlx0XHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX2JwZl9zdG9yYWdlKTtcbiAgNTQ6XHRcdGlmICghc2tfc3RvcmFnZSlcbiAgNTU6XHRcdFx0Z290byBvdXQ7XG4gIDU2Olx0XG4gIDU3Olx0XHR1bmNoYXJnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX2Rlc3Ryb3koc2tfc3RvcmFnZSk7XG4gIDU4Olx0XHRpZiAodW5jaGFyZ2UpXG4gIDU5Olx0XHRcdGF0b21pY19zdWIodW5jaGFyZ2UsIFx1MDAyNnNrLVx1MDAzZXNrX29tZW1fYWxsb2MpO1xuICA2MDpcdG91dDpcbiAgNjE6XHRcdHJjdV9yZWFkX3VubG9ja19taWdyYXRlKCk7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdHN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gIDY1Olx0e1xuICA2NjpcdFx0YnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2ZyZWUobWFwLCBcdTAwMjZza19jYWNoZSk7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3NrX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuICA3MDpcdHtcbiAgNzE6XHRcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2MoYXR0ciwgXHUwMDI2c2tfY2FjaGUpO1xuICA3MjpcdH1cbiAgNzM6XHRcbiAgNzQ6XHRzdGF0aWMgaW50IG5vdHN1cHBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiAgNzU6XHRcdFx0XHRcdHZvaWQgKm5leHRfa2V5KVxuICA3NjpcdHtcbiAgNzc6XHRcdHJldHVybiAtRU5PVFNVUFA7XG4gIDc4Olx0fVxuICA3OTpcdFxuICA4MDpcdHN0YXRpYyB2b2lkICpicGZfZmRfc2tfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gIDgxOlx0e1xuICA4MjpcdFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKnNkYXRhO1xuICA4MzpcdFx0c3RydWN0IHNvY2tldCAqc29jaztcbiAgODQ6XHRcdGludCBmZCwgZXJyO1xuICA4NTpcdFxuICA4NjpcdFx0ZmQgPSAqKGludCAqKWtleTtcbiAgODc6XHRcdHNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCBcdTAwMjZlcnIpO1xuICA4ODpcdFx0aWYgKHNvY2spIHtcbiAgODk6XHRcdFx0c2RhdGEgPSBicGZfc2tfc3RvcmFnZV9sb29rdXAoc29jay1cdTAwM2VzaywgbWFwLCB0cnVlKTtcbiAgOTA6XHRcdFx0c29ja2ZkX3B1dChzb2NrKTtcbiAgOTE6XHRcdFx0cmV0dXJuIHNkYXRhID8gc2RhdGEtXHUwMDNlZGF0YSA6IE5VTEw7XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdGF0aWMgbG9uZyBicGZfZmRfc2tfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gIDk4Olx0XHRcdFx0XHRcdCAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4gIDk5Olx0e1xuIDEwMDpcdFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKnNkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipQZWVyaW5nIGludG8gdGhlIERlcHRocyBvZiBgYnBmX3NrX3N0b3JhZ2UuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgYnBmX3NrX3N0b3JhZ2UuY2AsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDgwMC4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBsaWVzIHdpdGhpbiB0aGUgaXRlcmF0b3IgYW5kIG1hcCBsb2dpYyB0aGF0JiMzOTtzIGltcGxlbWVudGVkIGhlcmUuIEkgd2FudCB0byB0cmFjZSB0aGUgZmxvdywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoZSBzdG9yYWdlIGlzIGhhbmRsZWQgYXQgdGhpcyBsZXZlbC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgdHJhdmVyc2VzIHRoZSBzdHJ1Y3R1cmVzLCBkZWFscyB3aXRoIGtleXMgYW5kIHZhbHVlcywgYW5kIG1ha2VzIGRlY2lzaW9ucyBhYm91dCBkYXRhIGFjY2VzcyBhbmQgbWFuaXB1bGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXRlcmF0b3IvbWFwIGludGVyYWN0aW9uIGlzIGNyaXRpY2FsIGZvci4uLiB3ZWxsLCBmb3IgKmV2ZXJ5dGhpbmcqIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBncmlwIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdFx0c2tpcF9lbGVtcyA9IDA7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XG4gNzUzOlx0XHRpbmZvLVx1MDAzZWJ1Y2tldF9pZCA9IGk7XG4gNzU0Olx0XHRpbmZvLVx1MDAzZXNraXBfZWxlbXMgPSAwO1xuIDc1NTpcdFx0cmV0dXJuIE5VTEw7XG4gNzU2Olx0fVxuIDc1NzpcdFxuIDc1ODpcdHN0YXRpYyB2b2lkICpicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiA3NTk6XHR7XG4gNzYwOlx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW07XG4gNzYxOlx0XG4gNzYyOlx0XHRzZWxlbSA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfZmluZF9uZXh0KHNlcS1cdTAwM2Vwcml2YXRlLCBOVUxMKTtcbiA3NjM6XHRcdGlmICghc2VsZW0pXG4gNzY0Olx0XHRcdHJldHVybiBOVUxMO1xuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKCpwb3MgPT0gMClcbiA3Njc6XHRcdFx0JiM0MzsmIzQzOypwb3M7XG4gNzY4Olx0XHRyZXR1cm4gc2VsZW07XG4gNzY5Olx0fVxuIDc3MDpcdFxuIDc3MTpcdHN0YXRpYyB2b2lkICpicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsXG4gNzcyOlx0XHRcdFx0XHRcdCBsb2ZmX3QgKnBvcylcbiA3NzM6XHR7XG4gNzc0Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbiA3NzU6XHRcbiA3NzY6XHRcdCYjNDM7JiM0MzsqcG9zO1xuIDc3NzpcdFx0JiM0MzsmIzQzO2luZm8tXHUwMDNlc2tpcF9lbGVtcztcbiA3Nzg6XHRcdHJldHVybiBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX2ZpbmRfbmV4dChzZXEtXHUwMDNlcHJpdmF0ZSwgdik7XG4gNzc5Olx0fVxuIDc4MDpcdFxuIDc4MTpcdHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwIHtcbiA3ODI6XHRcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqLCBtZXRhKTtcbiA3ODM6XHRcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX21hcCAqLCBtYXApO1xuIDc4NDpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBzb2NrICosIHNrKTtcbiA3ODU6XHRcdF9fYnBmX21kX3B0cih2b2lkICosIHZhbHVlKTtcbiA3ODY6XHR9O1xuIDc4NzpcdFxuIDc4ODpcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9za19zdG9yYWdlX21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4gNzg5Olx0XHRcdCAgICAgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxuIDc5MDpcdFx0XHQgICAgIHZvaWQgKnZhbHVlKVxuIDc5MTpcdFxuIDc5MjpcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gNzkzOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4gNzk0Olx0e1xuIDc5NTpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gNzk2Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9za19zdG9yYWdlX21hcCBjdHggPSB7fTtcbiA3OTc6XHRcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcbiA3OTg6XHRcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XG4gNzk5Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gODAwOlx0XHRpbnQgcmV0ID0gMDtcbiA4MDE6XHRcbiA4MDI6XHRcdG1ldGEuc2VxID0gc2VxO1xuIDgwMzpcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIHNlbGVtID09IE5VTEwpO1xuIDgwNDpcdFx0aWYgKHByb2cpIHtcbiA4MDU6XHRcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIDgwNjpcdFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gODA3Olx0XHRcdGlmIChzZWxlbSkge1xuIDgwODpcdFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4gODA5Olx0XHRcdFx0aWYgKCFza19zdG9yYWdlKVxuIDgxMDpcdFx0XHRcdFx0cmV0dXJuIFNFUV9TS0lQO1xuIDgxMTpcdFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gODEyOlx0XHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gODEzOlx0XHRcdH1cbiA4MTQ6XHRcdFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXHUwMDI2Y3R4KTtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcbiA4MTc6XHRcdHJldHVybiByZXQ7XG4gODE4Olx0fVxuIDgxOTpcdFxuIDgyMDpcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDgyMTpcdHtcbiA4MjI6XHRcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xuIDgyMzpcdH1cbiA4MjQ6XHRcbiA4MjU6XHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gODI2Olx0XHRfX3JlbGVhc2VzKFJDVSlcbiA4Mjc6XHR7XG4gODI4Olx0XHRpZiAoIXYpXG4gODI5Olx0XHRcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XG4gODMwOlx0XHRlbHNlXG4gODMxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDgzMjpcdH1cbiA4MzM6XHRcbiA4MzQ6XHRzdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAodm9pZCAqcHJpdl9kYXRhLFxuIDgzNTpcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbiA4MzY6XHR7XG4gODM3Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKnNlcV9pbmZvID0gcHJpdl9kYXRhO1xuIDgzODpcdFxuIDgzOTpcdFx0YnBmX21hcF9pbmNfd2l0aF91cmVmKGF1eC1cdTAwM2VtYXApO1xuIDg0MDpcdFx0c2VxX2luZm8tXHUwMDNlbWFwID0gYXV4LVx1MDAzZW1hcDtcbiA4NDE6XHRcdHJldHVybiAwO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSlcbiA4NDU6XHR7XG4gODQ2Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKnNlcV9pbmZvID0gcHJpdl9kYXRhO1xuIDg0NzpcdFxuIDg0ODpcdFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKHNlcV9pbmZvLVx1MDAzZW1hcCk7XG4gODQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3NrX3N0b3JhZ2UuY2AgZm9yIFJlZ2lzdHJhdGlvbiBEZXRhaWxzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYtYmFzZWQgc29ja2V0IHN0b3JhZ2UgbWVjaGFuaXNtcyBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGJ1dCBub3cgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBgYnBmX3NrX3N0b3JhZ2UuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyDigJMgd2hlcmUgYW5kIGhvdyB0aGVzZSBCUEYgcHJvZ3JhbXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXRzIGFuZCB0aGUgc3RvcmFnZSBpdHNlbGYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZnVuY3Rpb24gY2FsbHMgcmVsYXRlZCB0byBhdHRhY2hpbmcgcHJvZ3JhbXMgdG8gc3BlY2lmaWMgc29ja2V0IHR5cGVzLCBtYXliZSBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIHNvY2sgc3RydWN0dXJlIGl0c2VsZiwgYW5kIHBlcmhhcHMgc29tZSBtZWNoYW5pc21zIGZvciBtYW5hZ2luZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIHN0b3JhZ2UgY29tcG9uZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIEJQRiBwcm9ncmFtLCB0aGUgc29ja2V0JiMzOTtzIGRhdGEsIGFuZCB0aGUgc3RvcmFnZSBsYXllci4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBhbmQgaG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBzZWNyZXRzIHRoZXJlLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NTpcdHtcbiA4NDY6XHRcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqc2VxX2luZm8gPSBwcml2X2RhdGE7XG4gODQ3Olx0XG4gODQ4Olx0XHRicGZfbWFwX3B1dF93aXRoX3VyZWYoc2VxX2luZm8tXHUwMDNlbWFwKTtcbiA4NDk6XHR9XG4gODUwOlx0XG4gODUxOlx0c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiA4NTI6XHRcdFx0XHQgICAgICAgdW5pb24gYnBmX2l0ZXJfbGlua19pbmZvICpsaW5mbyxcbiA4NTM6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4gODU0Olx0e1xuIDg1NTpcdFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiA4NTY6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuIDg1NzpcdFxuIDg1ODpcdFx0aWYgKCFsaW5mby1cdTAwM2VtYXAubWFwX2ZkKVxuIDg1OTpcdFx0XHRyZXR1cm4gLUVCQURGO1xuIDg2MDpcdFxuIDg2MTpcdFx0bWFwID0gYnBmX21hcF9nZXRfd2l0aF91cmVmKGxpbmZvLVx1MDAzZW1hcC5tYXBfZmQpO1xuIDg2MjpcdFx0aWYgKElTX0VSUihtYXApKVxuIDg2MzpcdFx0XHRyZXR1cm4gUFRSX0VSUihtYXApO1xuIDg2NDpcdFxuIDg2NTpcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRSlcbiA4NjY6XHRcdFx0Z290byBwdXRfbWFwO1xuIDg2NzpcdFxuIDg2ODpcdFx0aWYgKHByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9yZHdyX2FjY2VzcyBcdTAwM2UgbWFwLVx1MDAzZXZhbHVlX3NpemUpIHtcbiA4Njk6XHRcdFx0ZXJyID0gLUVBQ0NFUztcbiA4NzA6XHRcdFx0Z290byBwdXRfbWFwO1xuIDg3MTpcdFx0fVxuIDg3MjpcdFxuIDg3MzpcdFx0YXV4LVx1MDAzZW1hcCA9IG1hcDtcbiA4NzQ6XHRcdHJldHVybiAwO1xuIDg3NTpcdFxuIDg3NjpcdHB1dF9tYXA6XG4gODc3Olx0XHRicGZfbWFwX3B1dF93aXRoX3VyZWYobWFwKTtcbiA4Nzg6XHRcdHJldHVybiBlcnI7XG4gODc5Olx0fVxuIDg4MDpcdFxuIDg4MTpcdHN0YXRpYyB2b2lkIGJwZl9pdGVyX2RldGFjaF9tYXAoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4gODgyOlx0e1xuIDg4MzpcdFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKGF1eC1cdTAwM2VtYXApO1xuIDg4NDpcdH1cbiA4ODU6XHRcbiA4ODY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzID0ge1xuIDg4NzpcdFx0LnN0YXJ0ICA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnQsXG4gODg4Olx0XHQubmV4dCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9uZXh0LFxuIDg4OTpcdFx0LnN0b3AgICA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcCxcbiA4OTA6XHRcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXG4gODkxOlx0fTtcbiA4OTI6XHRcbiA4OTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XG4gODk0Olx0XHQuc2VxX29wc1x0XHQ9IFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzLFxuIDg5NTpcdFx0LmluaXRfc2VxX3ByaXZhdGVcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcbiA4OTY6XHRcdC5maW5pX3NlcV9wcml2YXRlXHQ9IGJwZl9pdGVyX2Zpbmlfc2tfc3RvcmFnZV9tYXAsXG4gODk3Olx0XHQuc2VxX3ByaXZfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8pLFxuIDg5ODpcdH07XG4gODk5Olx0XG4gOTAwOlx0c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xuIDkwMTpcdFx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwXCYjMzQ7LFxuIDkwMjpcdFx0LmF0dGFjaF90YXJnZXRcdFx0PSBicGZfaXRlcl9hdHRhY2hfbWFwLFxuIDkwMzpcdFx0LmRldGFjaF90YXJnZXRcdFx0PSBicGZfaXRlcl9kZXRhY2hfbWFwLFxuIDkwNDpcdFx0LnNob3dfZmRpbmZvXHRcdD0gYnBmX2l0ZXJfbWFwX3Nob3dfZmRpbmZvLFxuIDkwNTpcdFx0LmZpbGxfbGlua19pbmZvXHRcdD0gYnBmX2l0ZXJfbWFwX2ZpbGxfbGlua19pbmZvLFxuIDkwNjpcdFx0LmN0eF9hcmdfaW5mb19zaXplXHQ9IDIsXG4gOTA3Olx0XHQuY3R4X2FyZ19pbmZvXHRcdD0ge1xuIDkwODpcdFx0XHR7IG9mZnNldG9mKHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwLCBzayksXG4gOTA5Olx0XHRcdCAgUFRSX1RPX0JURl9JRF9PUl9OVUxMIH0sXG4gOTEwOlx0XHRcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAsIHZhbHVlKSxcbiA5MTE6XHRcdFx0ICBQVFJfVE9fQlVGIHwgUFRSX01BWUJFX05VTEwgfSxcbiA5MTI6XHRcdH0sXG4gOTEzOlx0XHQuc2VxX2luZm9cdFx0PSBcdTAwMjZpdGVyX3NlcV9pbmZvLFxuIDkxNDpcdH07XG4gOTE1Olx0XG4gOTE2Olx0c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuIDkxNzpcdHtcbiA5MTg6XHRcdGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID1cbiA5MTk6XHRcdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG4gOTIwOlx0XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xuIDkyMTpcdH1cbiA5MjI6XHRsYXRlX2luaXRjYWxsKGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgQlBGIFNvY2tldCBTdG9yYWdlIFZ1bG5lcmFiaWxpdHkgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGFuZCB0cnlpbmcgdG8gZGV0ZXJtaW5lIGl0cyByZWxldmFuY2UgZm9yIGZ1enppbmcuIFNwZWNpZmljYWxseSwgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCwgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY291bGQgb2NjdXIgaWYgYHNlbGVtLSZndDtsb2NhbF9zdG9yYWdlYCBpcyBOVUxMIHVuZGVyIFJDVSAoaGFwcGVucyB3aGVuIHRoZSBzb2NrZXQgb3Igc3RvcmFnZSBlbGVtZW50IGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseSkuIFRoZSBmaXggaW50cm9kdWNlcyBhIGNoZWNrLCBgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCBiZWZvcmUgYWNjZXNzaW5nIGBza19zdG9yYWdlLSZndDtvd25lcmAuIFNpbXBsZSBlbm91Z2guCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGU/IEFic29sdXRlbHkuIFRoZSBCUEYgc29ja2V0IHN0b3JhZ2UgbWFwIGl0ZXJhdGlvbiBpcyBhIGNvcmUgQlBGIGZlYXR1cmUsIGV4cG9zZWQgdmlhIGBicGYoQlBGX0lURVJfQ1JFQVRFLCAuLi4pYCBhbmQgYGJwZihCUEZfTElOS19DUkVBVEUsIC4uLilgLCBhbmQgdGhlbiByZWFkaW5nIHRoZSBpdGVyIGZkIHZpYSBgcmVhZCgpYCBjYWxscywgc2VxX2ZpbGUgb3BlcmF0aW9ucy4gIFdlIGNhbiB0cmlnZ2VyIHRoaXMgYnkgY29uY3VycmVudGx5IGNyZWF0aW5nL2RlbGV0aW5nIHNvY2tldHMgb3IgdXBkYXRpbmcgc29ja2V0IHN0b3JhZ2UgbWFwcywgd2hpY2ggbWVhbnMgc3l6a2FsbGVyIGNhbiBhYnNvbHV0ZWx5IGhpdCB0aGlzIHdpdGggQlBGIHN5c2NhbGwgZW5hYmxlZC4gVGhpcyBpcyAxMDAlIHJlYWNoYWJsZSBpbiBhIHN5emthbGxlci91c2Vyc3BhY2UgZW52aXJvbm1lbnQuCgpTbywgaXQmIzM5O3MgcmVhY2hhYmxlIOKAkyBjaGVjayEgIFdvcnRoRnV6emluZyDigJMgY2hlY2shIE5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scy4gIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbi4gQnV0IHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5vbi1zdGF0aWMgY291bnRlcnBhcnRzIGFzIHdlbGwgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWV0aGluZzogYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHRgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9maW5kX25leHRgLCBgYnBmX2l0ZXJfcnVuX3Byb2dgLCBgYnBmX3NrX3N0b3JhZ2VfbG9va3VwYCwgYGJwZl9za19zdG9yYWdlX2RlbGAsIGFuZCBgYnBmX3NrX3N0b3JhZ2VfZnJlZWAuIFdlJiMzOTtsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBhbmQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYXJlIHByZXNlbnQgYXMgc3ltYm9scyBpbiB0aGUgdm1saW51eCBpbWFnZS4gRXZlbiBpZiBzdGF0aWMsIHN5emthbGxlcuKAmXMga2Nvdi9zeW1ib2wgZmlsdGVycyBjYW4gaGFuZGxlIHRoZW0gaWYgY29tcGlsZWQgaW50byB2bWxpbnV4LiAgV2UgaGF2ZSB0byBjaGVjayBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgb3IgcmVsYXRlZCBpdGVyYXRvciBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIHRvIGNvdmVyIG91ciBiYXNlcy4KCkEgcXVpY2sgY2hlY2sgb2YgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub2AsIHNvIEJQRiBzeXNjYWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQuIEFuZCBpdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBhIGdyZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgS2NvbmZpZyBkZXBlbmRlbmNpZXMgb3IgY29kZWJhc2UgbWVudGlvbnMgb2YgYGJwZl9za19zdG9yYWdlYCBvciBgYnBmX2l0ZXJfcmVnX3RhcmdldGAuIExldCYjMzk7cyBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTkwMD1zdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8gPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTUtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkxNjpzdGF0aWMgaW50IF9faW5pdCBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KHZvaWQpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNy17XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MjEtfVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MjI6bGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEtub3dpbmcgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIGl0JiMzOTtsbCBiZSBpbiBvbmUgb2YgdGhvc2UsIG9yIHBlcmhhcHMgY3Jvc3MtcmVmZXJlbmNlZCBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHN5c2NhbGwgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBCUEYgS2NvbmZpZyBJbnNwZWN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzY29wZSBvdXQgYXJvdW5kIGxpbmUgMjcuIEl0JiMzOTtzIGEgZ2VuZXJhbCBhcHByb2FjaCB3aGVuIHN0YXJ0aW5nIGFuIGludmVzdGlnYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBjb2RlYmFzZSwgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSBlc3NlbnRpYWwgaW4gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgc3BlY2lmaWMgbGluZSBudW1iZXIgaXMganVzdCBhIHN0YXJ0aW5nIHBvaW50OyBpdCYjMzk7cyBsaWtlbHkgYSBmb2NhbCBhcmVhLCBlaXRoZXIgYSBtYWluIHNlY3Rpb24sIG9yIHNvbWV0aGluZyB0aGF0IGJyYW5jaGVzIG91dCBpbnRvIG11bHRpcGxlIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSBpbW1lZGlhdGUgY2x1ZXMgdGhhdCBnaXZlIGFuIGluZGljYXRpb24gb2YgaG93IEJQRiBpcyBlbmFibGVkL2Rpc2FibGVkIG9yIGNvbmZpZ3VyZWQuIFRoaXMgcHJlbGltaW5hcnkgc2NhbiB3aWxsIHByb3ZpZGUgYSByb2FkbWFwIGZvciBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAxOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9yIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGl0ZXJhdG9yIGlzc3VlLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBgTkVUYCBjb25maWcsIGJlY2F1c2UgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgaXNuJiMzOTt0IGluY2x1ZGVkIHVubGVzcyBgQ09ORklHX05FVGAgaXMgZXhwbGljaXRseSBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IGRlcGVuZGVuY3kgdG8ga2VlcCBpbiBtaW5kLiBJIGtub3cgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCBhcmUgcmVsZXZhbnQgaGVyZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgSSYjMzk7bSBleGFtaW5pbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSByZXF1aXJlIEJURiwgYEJQRl9QUkVMT0FEYCwgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsICppbiBhZGRpdGlvbiB0byoganVzdCBoYXZpbmcgYEJQRl9TWVNDQUxMYCBlbmFibGVkLCBmb3IgdGhlIEJQRiBpdGVyYXRvcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBmbG93IGFuZCBkZXBlbmRlbmNpZXMsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBleGFtaW5lIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIGRpcmVjdGx5IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvcnMuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gaG93IHRoZXNlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyB7XG4gIDExOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gIDEyOlx0XHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbztcbiAgMTM6XHRcdHUzMiBidGZfaWQ7XHQvKiBjYWNoZWQgdmFsdWUgKi9cbiAgMTQ6XHR9O1xuICAxNTpcdFxuICAxNjpcdHN0cnVjdCBicGZfaXRlcl9saW5rIHtcbiAgMTc6XHRcdHN0cnVjdCBicGZfbGluayBsaW5rO1xuICAxODpcdFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvIGF1eDtcbiAgMTk6XHRcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XG4gIDIwOlx0fTtcbiAgMjE6XHRcbiAgMjI6XHRzdHJ1Y3QgYnBmX2l0ZXJfcHJpdl9kYXRhIHtcbiAgMjM6XHRcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XG4gIDI0Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gKnNlcV9pbmZvO1xuICAyNTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuICAyNjpcdFx0dTY0IHNlc3Npb25faWQ7XG4gIDI3Olx0XHR1NjQgc2VxX251bTtcbiAgMjg6XHRcdGJvb2wgZG9uZV9zdG9wO1xuICAyOTpcdFx0dTggdGFyZ2V0X3ByaXZhdGVbXSBfX2FsaWduZWQoOCk7XG4gIDMwOlx0fTtcbiAgMzE6XHRcbiAgMzI6XHRzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB0YXJnZXRzID0gTElTVF9IRUFEX0lOSVQodGFyZ2V0cyk7XG4gIDMzOlx0c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRzX211dGV4KTtcbiAgMzQ6XHRcbiAgMzU6XHQvKiBwcm90ZWN0IGJwZl9pdGVyX2xpbmsgY2hhbmdlcyAqL1xuICAzNjpcdHN0YXRpYyBERUZJTkVfTVVURVgobGlua19tdXRleCk7XG4gIDM3Olx0XG4gIDM4Olx0LyogaW5jcmVtZW50ZWQgb24gZXZlcnkgb3BlbmVkIHNlcV9maWxlICovXG4gIDM5Olx0c3RhdGljIGF0b21pYzY0X3Qgc2Vzc2lvbl9pZDtcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgSXRlcmF0b3JzIGFuZCBCVEYgSW5mb3JtYXRpb24gZm9yIFNvY2tldCBTdG9yYWdlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgQlBGIGl0ZXJhdG9yIHN0dWZmIHdpdGggc29ja2V0IHN0b3JhZ2UgaXMgd29ya2luZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgREVCVUdfSU5GT19CVEZgIGlzIGVuYWJsZWQsIHNvIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgaW50byBga2VybmVsL2JwZi9LY29uZmlnYCBvciB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIHRvIGNvbmZpcm0uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpdGVyYXRvciBpdHNlbGYgaXMgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byBgYnRmX3NvY2tfaWRzYCBhbmQgd2hhdGV2ZXIgdGhlIEJQRiBpdGVyYXRvciByZXF1aXJlbWVudHMgYXJlIGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGJlY2F1c2UgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIEJQRiBzayBzdG9yYWdlIGFuZCBpdGVyYXRvciBzdHVmZiByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXM6CgpgYGBjCnN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZCkKewoJYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPQoJCWJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdOwoJcmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoJmFtcDticGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pOwp9CmxhdGVfaW5pdGNhbGwoYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCk7CmBgYAoKT2theSwgc28gaXQgc2VlbXMgbGlrZSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nIGluIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0YC4gIEFuZCB0aGF0IGZ1bmN0aW9uIGlzIHJlZmVyZW5jaW5nIGBidGZfc29ja19pZHNgIHdpdGggYEJURl9TT0NLX1RZUEVfU09DS2AuIFRoYXQgbG9va3Mga2V5LiBJIHNlZSBpdCYjMzk7cyB1c2luZyBCVEYgSUQgZm9yIGEgY29udGV4dCBhcmd1bWVudC4gSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mb2AgYXMgd2VsbC4gVGhlIGNhbGwgdG8gYGJwZl9pdGVyX3JlZ190YXJnZXRgIHRlbGxzIG1lIGl0JiMzOTtzIHJlZ2lzdGVyaW5nIGEgdGFyZ2V0LiBUaGUgYGxhdGVfaW5pdGNhbGxgIG1lYW5zIGl0JiMzOTtzIGhhcHBlbmluZyBsYXRlciwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB3aGVuIGRlcGVuZGVuY2llcyBhcmUgcmVhZHkuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gYGJ0Zl9zb2NrX2lkc2AgYW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgYXJyYXkgaG9sZHMgYW5kIGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgc3BlY2lmaWMgQlRGIGluZm9ybWF0aW9uIGlzIGJlaW5nIHVzZWQgdG8gY2hhcmFjdGVyaXplIHRoZXNlIHNvY2tldCB0eXBlcyBmb3IgQlBGLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfc29ja19pZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjY0PU1BWF9CVEZfU09DS19UWVBFLFxuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTI2Ni1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oOjI2NzpleHRlcm4gdTMyIGJ0Zl9zb2NrX2lkc1tdO1xuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY4LSNlbmRpZlxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTk0PXZvaWQgYnBmX2xzbV9maW5kX2Nncm91cF9zaGltKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0xMDgtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzoxMDk6XHRpZiAoYXJnc1swXS50eXBlID09IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tFVF0pXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0xMTAtXHRcdCpicGZfZnVuYyA9IF9fY2dyb3VwX2JwZl9ydW5fbHNtX3NvY2tldDtcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjExMTpcdGVsc2UgaWYgKGFyZ3NbMF0udHlwZSA9PSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXSlcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTExMi1cdFx0KmJwZl9mdW5jID0gX19jZ3JvdXBfYnBmX3J1bl9sc21fc29jaztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTA5Nj1zdGF0aWMgdTMyICpyZWcyYnRmX2lkc1tfX0JQRl9SRUdfVFlQRV9NQVhdID0ge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTUwOTctI2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDk4Olx0W1BUUl9UT19TT0NLRVRdID0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS10sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTA5OTpcdFtQVFJfVE9fU09DS19DT01NT05dID0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUxMDA6XHRbUFRSX1RPX1RDUF9TT0NLXSA9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF0sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEwMS0jZW5kaWZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgYnRmX2lkX3NvY2tfY29tbW9uX3R5cGVzID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTUyLVx0fSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTUzOlx0LmJ0Zl9pZCA9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTU0LX07XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MDM9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDA4LVx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MDk6XHQuYXJnMl9idGZfaWRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MTAtXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MTU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDIwLVx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MjE6XHQuYXJnMl9idGZfaWRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjItXHQuYWxsb3dlZFx0PSBicGZfc2tfc3RvcmFnZV90cmFjaW5nX2FsbG93ZWQsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE4LVx0YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTk6XHRcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MjAtXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTg5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTQ6QlRGX0lEX0xJU1RfR0xPQkFMKGJ0Zl9zb2NrX2lkcywgTUFYX0JURl9TT0NLX1RZUEUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NS0jZGVmaW5lIEJURl9TT0NLX1RZUEUobmFtZSwgdHlwZSkgQlRGX0lEKHN0cnVjdCwgdHlwZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIxMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3A2X3NvY2tfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTYtXHQuYXJnMV90eXBlXHRcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIxNzpcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQNl0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIxOC19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjI4PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjMyLVx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMzM6XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzNC19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjU3PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjYxLVx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNjI6XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF9UV10sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2My19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjgwPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2tfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyODQtXHQuYXJnMV90eXBlXHRcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI4NTpcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQX1JFUV0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI4Ni19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMzAxPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VkcDZfc29ja19wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMwNS1cdC5hcmcxX3R5cGVcdFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMzA2Olx0LnJldF9idGZfaWRcdFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFA2XSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzA3LX07XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIzMjE9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdW5peF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzI1LVx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIzMjY6XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIzMjctfTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMzNT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzM5LVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIzNDA6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9NUFRDUF0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjM0MS19O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTk4Nj1zdGF0aWMgaW50IF9faW5pdCBicGZfc29ja21hcF9pdGVyX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5ODgtXHRzb2NrX21hcF9pdGVyX3JlZy5jdHhfYXJnX2luZm9bMV0uYnRmX2lkID1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk4OTpcdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OTAtXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZzb2NrX21hcF9pdGVyX3JlZyk7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNjQxPXN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQyLXtcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY0MzpcdHRjcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQ0LVx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dGNwX3JlZ19pbmZvKSlcbi0tXG5uZXQvaXB2NC91ZHAuYz0zOTAwPXN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L2lwdjQvdWRwLmMtMzkwMS17XG5uZXQvaXB2NC91ZHAuYzozOTAyOlx0dWRwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFBdO1xubmV0L2lwdjQvdWRwLmMtMzkwMy1cdGlmIChicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNnVkcF9yZWdfaW5mbykpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM5MzM9c3RhdGljIHZvaWQgX19pbml0IGJwZl9pdGVyX3JlZ2lzdGVyKHZvaWQpXG5uZXQvdW5peC9hZl91bml4LmMtMzkzNC17XG5uZXQvdW5peC9hZl91bml4LmM6MzkzNTpcdHVuaXhfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdO1xubmV0L3VuaXgvYWZfdW5peC5jLTM5MzYtXHRpZiAoYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZ1bml4X3JlZ19pbmZvKSlcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yNjM9TUFYX0JURl9TT0NLX1RZUEUsXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY1LVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjY2OmV4dGVybiB1MzIgYnRmX3NvY2tfaWRzW107XG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yNjctI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjA4CgkJCQkJCQlvdXRwdXQ6IDIzOQoJCQkJCQkJdGhvdWdodHM6IDQ4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTb2NrZXQgTG9jYWwgU3RvcmFnZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBicGZfc2tfc3RvcmFnZS5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBCUEYgaXRlcmF0b3JzIGZvciBzb2NrZXQgbG9jYWwgc3RvcmFnZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0cz8gVGhpcyBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29uY3VycmVudCBvcGVyYXRpb25zIG1lbnRpb25lZC4gYHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSlgIHJldHVybmluZyBOVUxMIGR1cmluZyBhIEJQRiBpdGVyYXRvciBvcGVyYXRpb24gaXMgYSByZWQgZmxhZy4KClRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSByZWxldmFudCBmb3IgZW5hYmxpbmcgdGhlIEJQRiBzeXN0ZW0gY2FsbCBhbmQgbmV0d29ya2luZyBmZWF0dXJlcywgcmVzcGVjdGl2ZWx5LCB3aGljaCBhcmUgcHJlcmVxdWlzaXRlcyBoZXJlLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlybWVkIHRoYXQgdGhleSBhcmUgYWxsIHNwZWNpZmljIHRvIHRoZSBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwIGFuZCBpdHMgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uIFRoZXNlIGluY2x1ZGU6IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHRgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCwgYGJwZl9za19zdG9yYWdlX2ZyZWVgLCBgYnBmX3NrX3N0b3JhZ2VfbG9va3VwYCwgYW5kIGBicGZfc2tfc3RvcmFnZV9kZWxgLiBUaGF0IGxvb2tzIHJpZ2h0LiBHaXZlbiB0aGUgTlVMTCBjaGVjaywgSSBjYW4gc2VlIHRoYXQgYWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBCUEYgaXRlcmF0b3JzIG9uIGBCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRWAgbWFwcy4KCkJlZm9yZSBJIGZpbmFsaXplIG15IHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBhbGwgdGhlIGRldGFpbHMgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQuIE15IGNvbmNsdXNpb25zIGFyZTogVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kIHRoZSByZWFzb25pbmcgaXMgc29saWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgTlVMTCBjaGVjayB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSlgIHJldHVybnMgTlVMTCB3aGVuIGR1bXBpbmcgZWxlbWVudHMgdXNpbmcgQlBGIGl0ZXJhdG9ycyBhbmQsIHdpdGhvdXQgaXQsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS0mZ3Q7b3duZXJgLiBJIHRoaW5rIHRoZSBzeW1ib2xzIEkmIzM5O3ZlIGlkZW50aWZpZWQgY292ZXIgdGhlIGNyaXRpY2FsIGFyZWFzIHRoYXQgbmVlZCB0ZXN0aW5nLiBTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBvbiBgc2tfc3RvcmFnZWAgKGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgKSBhZnRlciBjYWxsaW5nIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSlgIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBza19zdG9yYWdlLVx1MDAzZW93bmVyYC4gXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvaW50ZXIgdmFsaWRpdHkgLyBOVUxMIGRlcmVmZXJlbmNlIGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBwb2ludGVyIHZhbGlkaXR5IGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYnVpbGRzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljM2E3NGM4OWE4ZDVhZTAwNjAxOWExMjY4NzhmMDg4MTRjNzA4OGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoxOTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCmluZGV4IDFkMjk1YTg3NjlmYWQuLjdkMDIyNDVhYTcwNDkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwpAQCAtODA2LDYgJiM0Mzs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAogCQljdHgubWFwID0gaW5mby0mZ3Q7bWFwOwogCQlpZiAoc2VsZW0pIHsKIAkJCXNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tJmd0O2xvY2FsX3N0b3JhZ2UpOwomIzQzOwkJCWlmICghc2tfc3RvcmFnZSkKJiM0MzsJCQkJcmV0dXJuIFNFUV9TS0lQOwogCQkJY3R4LnNrID0gc2tfc3RvcmFnZS0mZ3Q7b3duZXI7CiAJCQljdHgudmFsdWUgPSBTREFUQShzZWxlbSktJmd0O2RhdGE7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBhIEJQRiBTSyBTdG9yYWdlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBBbHJpZ2h0LCBoZXJlJiMzOTtzIHdoYXQgd2UgaGF2ZTogYSBjaGFuZ2UgaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgZm9yIGBza19zdG9yYWdlYCBiZWluZyBOVUxMIHdpdGhpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLiBTcGVjaWZpY2FsbHksIGlmIGBzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZWAgZGVyZWZlcmVuY2VzIHRvIE5VTEwsIGl0IHJldHVybnMgYFNFUV9TS0lQYC4KClRoZSBjb3JlIG9mIG15IGFuYWx5c2lzIGNlbnRlcnMgYXJvdW5kIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBOVUxMIGNoZWNrIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgbGlrZSB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhpcyBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IHVzaW5nIGEgYHJlYWQtZmlsZWAgY29tbWFuZCBvciBgZ3JlcHBlcmAgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNlbGVtLSZndDtsb2NhbF9zdG9yYWdlYCBpcyBwb3B1bGF0ZWQsIHdoYXQgYHNrX3N0b3JhZ2VgIHJlcHJlc2VudHMsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgKmNvdWxkKiBiZSBOVUxMLiBUaGUgYFNFUV9TS0lQYCByZXR1cm4gc3VnZ2VzdHMgdGhpcyBpcyBsaWtlbHkgYSBzZXF1ZW5jZSBmaWxlIG9wZXJhdGlvbiwgYW5kIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBwYXRjaCBhZmZlY3RzIHBvdGVudGlhbCBkYXRhIHJhY2VzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aXRoaW4gdGhhdCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlIHBvdGVudGlhbCBzdGF0ZXMgZXhwb3NlZCByZXF1aXJlIEtNU0FOIHRvIGNoZWNrIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdFx0ICAgICB2b2lkICp2YWx1ZSlcbiA3OTE6XHRcbiA3OTI6XHRzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIDc5MzpcdFx0XHRcdFx0XHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuIDc5NDpcdHtcbiA3OTU6XHRcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuIDc5NjpcdFx0c3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAgY3R4ID0ge307XG4gNzk3Olx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XG4gNzk4Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuIDc5OTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDgwMDpcdFx0aW50IHJldCA9IDA7XG4gODAxOlx0XG4gODAyOlx0XHRtZXRhLnNlcSA9IHNlcTtcbiA4MDM6XHRcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcdTAwMjZtZXRhLCBzZWxlbSA9PSBOVUxMKTtcbiA4MDQ6XHRcdGlmIChwcm9nKSB7XG4gODA1Olx0XHRcdGN0eC5tZXRhID0gXHUwMDI2bWV0YTtcbiA4MDY6XHRcdFx0Y3R4Lm1hcCA9IGluZm8tXHUwMDNlbWFwO1xuIDgwNzpcdFx0XHRpZiAoc2VsZW0pIHtcbiA4MDg6XHRcdFx0XHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpO1xuIDgwOTpcdFx0XHRcdGlmICghc2tfc3RvcmFnZSlcbiA4MTA6XHRcdFx0XHRcdHJldHVybiBTRVFfU0tJUDtcbiA4MTE6XHRcdFx0XHRjdHguc2sgPSBza19zdG9yYWdlLVx1MDAzZW93bmVyO1xuIDgxMjpcdFx0XHRcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cdTAwM2VkYXRhO1xuIDgxMzpcdFx0XHR9XG4gODE0Olx0XHRcdHJldCA9IGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFx1MDAyNmN0eCk7XG4gODE1Olx0XHR9XG4gODE2Olx0XG4gODE3Olx0XHRyZXR1cm4gcmV0O1xuIDgxODpcdH1cbiA4MTk6XHRcbiA4MjA6XHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiA4MjE6XHR7XG4gODIyOlx0XHRyZXR1cm4gX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbiA4MjM6XHR9XG4gODI0Olx0XG4gODI1Olx0c3RhdGljIHZvaWQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDgyNjpcdFx0X19yZWxlYXNlcyhSQ1UpXG4gODI3Olx0e1xuIDgyODpcdFx0aWYgKCF2KVxuIDgyOTpcdFx0XHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xuIDgzMDpcdFx0ZWxzZVxuIDgzMTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4MzI6XHR9XG4gODMzOlx0XG4gODM0Olx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSxcbiA4MzU6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4gODM2Olx0e1xuIDgzNzpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICpzZXFfaW5mbyA9IHByaXZfZGF0YTtcbiA4Mzg6XHRcbiA4Mzk6XHRcdGJwZl9tYXBfaW5jX3dpdGhfdXJlZihhdXgtXHUwMDNlbWFwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxNwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA1NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgUHJldmVudGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YC4gVGhlIGNyaXRpY2FsIGxpbmUgaXMgYHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tJmd0O2xvY2FsX3N0b3JhZ2UpO2AgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIGBjdHguc2sgPSBza19zdG9yYWdlLSZndDtvd25lcjtgLiBXaXRob3V0IGEgY2hlY2ssIGlmIGBza19zdG9yYWdlYCBpcyBOVUxMLCB3ZSYjMzk7cmUgZ29pbmcgdG8gY3Jhc2gsIHBsYWluIGFuZCBzaW1wbGUuCgpUaGlzIHBhdGNoIHNtYXJ0bHkgYWRkcmVzc2VzIHRoYXQgYnkgYWRkaW5nIGFuIGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgIGJlZm9yZSB0aGUgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGxpbmUuIEEgc29saWQgZGVmZW5zaXZlIG1hbmV1dmVyLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UgZm9yIGl0ZXJhdGluZyBvdmVyIG1hcCBlbGVtZW50cyBhbmQgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IHRyeSB0byBhY2Nlc3MgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBkYXRhLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGluLCBhbmQgSSBuZWVkIHRvIGJlICpzdXJlKiB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIG5ldyByaXNrcy4gRG9lcyB0aGlzIHBhdGNoOgoKKiAgIFJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55LgoqICAgUGFzcyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlIG9yIGNvbmRpdGlvbmFscz8gTm8sIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBgY3R4YCBpcyB6ZXJvLWluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kLgoqICAgRml4IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlPyBBYnNvbHV0ZWx5LCB0aGF0JiMzOTtzIGl0cyBwcmltYXJ5IGZ1bmN0aW9uLiBXZSYjMzk7cmUgcHJldmVudGluZyBhIGtlcm5lbCBwYW5pYy4KKiAgIFJlcXVpcmUgS01TQU4/IE5vdCBpbiB0aGUgc2xpZ2h0ZXN0LiBUaGUgcHJvYmxlbSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIGRlcmVmZXJlbmNlLCBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZywgcGFnZSBmYXVsdCwgb3IgS0FTQU4sIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4KClRvIGRvdWJsZS1jaGVjayB0aGUgS01TQU4gY3JpdGVyaWEsIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGVtIGluIG15IGhlYWQ6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBoZXJlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aCBjaGVja3MsIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzPyBEZWZpbml0ZWx5IG5vdC4KClRoZSBwYXRjaCYjMzk7cyBnb2FsIGlzIHRvIHByZXZlbnQgYSB2ZXJ5IHNwZWNpZmljIHR5cGUgb2YgY3Jhc2ggYnkgYXZvaWRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBJJiMzOTtsbCBhbHNvIGFkZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AsIGZvY3VzaW5nIG9uIHRoZSBOVUxMIGNoZWNrIGFuZCB0aGUgYWJzZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhpcyBpcyBhIGNsZWFuIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpYCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb2ludGVyIHZhbGlkaXR5IC8gTlVMTCBkZXJlZmVyZW5jZSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgcG9pbnRlciB2YWxpZGl0eSBpc3N1ZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGJ1aWxkcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBvbiBgc2tfc3RvcmFnZWAgKGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgKSBhZnRlciBjYWxsaW5nIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSlgIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBza19zdG9yYWdlLVx1MDAzZW93bmVyYC4gXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvaW50ZXIgdmFsaWRpdHkgLyBOVUxMIGRlcmVmZXJlbmNlIGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBwb2ludGVyIHZhbGlkaXR5IGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYnVpbGRzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MTk6NDQuNzMyMzkxODc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1MDc4MzM3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnRcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9mcmVlXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9sb29rdXBcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2RlbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKWAgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KClgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG9pbnRlciB2YWxpZGl0eSAvIE5VTEwgZGVyZWZlcmVuY2UgaXNzdWUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3MuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHBvaW50ZXIgdmFsaWRpdHkgaXNzdWVzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBidWlsZHMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXIgd2hlbiBpdGVyYXRpbmcgb3ZlciBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEYgc29ja2V0IHN0b3JhZ2UgbWFwcyBhbmQgQlBGIGl0ZXJhdG9yIGxpbmtzKSBhbmQgaXMgd29ydGh3aGlsZSB0byBmdXp6IGZvciBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoxOTo0NC43MzIzOTc4MDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDA5NzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDljM2E3NGM4OWE4ZDVhZTAwNjAxOWExMjY4NzhmMDg4MTRjNzA4OGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MTk6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcXG5pbmRleCAxZDI5NWE4NzY5ZmFkLi43ZDAyMjQ1YWE3MDQ5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcXG4rKysgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXFxuQEAgLTgwNiw2ICs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxcbiBcXHRcXHRjdHgubWFwID0gaW5mby1cXHUwMDNlbWFwO1xcbiBcXHRcXHRpZiAoc2VsZW0pIHtcXG4gXFx0XFx0XFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSk7XFxuK1xcdFxcdFxcdGlmICghc2tfc3RvcmFnZSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIFNFUV9TS0lQO1xcbiBcXHRcXHRcXHRjdHguc2sgPSBza19zdG9yYWdlLVxcdTAwM2Vvd25lcjtcXG4gXFx0XFx0XFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVxcdTAwM2VkYXRhO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjE5OjQ1LjI3NzI2NDgwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzIzODc5NTU4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnRcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9mcmVlXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9sb29rdXBcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXIgd2hlbiBpdGVyYXRpbmcgb3ZlciBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEYgc29ja2V0IHN0b3JhZ2UgbWFwcyBhbmQgQlBGIGl0ZXJhdG9yIGxpbmtzKSBhbmQgaXMgd29ydGh3aGlsZSB0byBmdXp6IGZvciBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljM2E3NGM4OWE4ZDVhZTAwNjAxOWExMjY4NzhmMDg4MTRjNzA4OGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoxOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5pbmRleCAxZDI5NWE4NzY5ZmFkLi43ZDAyMjQ1YWE3MDQ5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuKysrIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuQEAgLTgwNiw2ICs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChzZWxlbSkge1xuIFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4rXHRcdFx0aWYgKCFza19zdG9yYWdlKVxuK1x0XHRcdFx0cmV0dXJuIFNFUV9TS0lQO1xuIFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gXHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjE5OjQ1LjI3NzI2NjE2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODgwOTcxMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFNLIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwNi4gSSdsbCBwcm9iYWJseSB1c2UgbXkgcHJlZmVycmVkIHRvb2xpbmcsIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3Qgdmlldywgb3IgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcGVydGluZW50IGNvZGUgd2l0aCBzb21lIGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3QuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjAzLjE1ODI0MTEzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdFxcdCAgICAgdm9pZCAqdmFsdWUpXFxuIDc5MTpcXHRcXG4gNzkyOlxcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIDc5MzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiA3OTY6XFx0XFx0c3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAgY3R4ID0ge307XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuIDc5ODpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbiA3OTk6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA4MDA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgwMTpcXHRcXG4gODAyOlxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbiA4MDM6XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCBzZWxlbSA9PSBOVUxMKTtcXG4gODA0OlxcdFxcdGlmIChwcm9nKSB7XFxuIDgwNTpcXHRcXHRcXHRjdHgubWV0YSA9IFxcdTAwMjZtZXRhO1xcbiA4MDY6XFx0XFx0XFx0Y3R4Lm1hcCA9IGluZm8tXFx1MDAzZW1hcDtcXG4gODA3OlxcdFxcdFxcdGlmIChzZWxlbSkge1xcbiA4MDg6XFx0XFx0XFx0XFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSk7XFxuIDgwOTpcXHRcXHRcXHRcXHRpZiAoIXNrX3N0b3JhZ2UpXFxuIDgxMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gU0VRX1NLSVA7XFxuIDgxMTpcXHRcXHRcXHRcXHRjdHguc2sgPSBza19zdG9yYWdlLVxcdTAwM2Vvd25lcjtcXG4gODEyOlxcdFxcdFxcdFxcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cXHUwMDNlZGF0YTtcXG4gODEzOlxcdFxcdFxcdH1cXG4gODE0OlxcdFxcdFxcdHJldCA9IGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFxcdTAwMjZjdHgpO1xcbiA4MTU6XFx0XFx0fVxcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTg6XFx0fVxcbiA4MTk6XFx0XFxuIDgyMDpcXHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gODIxOlxcdHtcXG4gODIyOlxcdFxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbiA4MjM6XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDgyNjpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4gODI3OlxcdHtcXG4gODI4OlxcdFxcdGlmICghdilcXG4gODI5OlxcdFxcdFxcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjAzLjE1ODMyODEzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTY3OTUyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgdGhlIGluY2x1c2lvbiBhbmQgY29tcGlsYXRpb24gb2YgYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgdHJlZSBhbmQgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgdHJpZ2dlciB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGNvbnRyb2xsaW5nIG9iamVjdCBmaWxlIGluY2x1c2lvbiBhbmQgZmVhdHVyZSB0b2dnbGVzLCByZXNwZWN0aXZlbHkuIEknbGwgc2VhcmNoIHNwZWNpZmljYWxseSBmb3IgZWl0aGVyIHRoZSBvYmplY3QgZmlsZSBuYW1lLCBgYnBmX3NrX3N0b3JhZ2Uub2AsIG9yIHRoZSBsaWtlbHkgY29uZmlndXJhdGlvbiBzeW1ib2wsIGBCUEZfU0tfU1RPUkFHRWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IEknbSBsb29raW5nIGZvciBhbmQgbGVhZCBtZSB0byB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDowNS4yNTUxMjY5NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NzM4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX3N0b3JhZ2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDctaWZkZWYgQ09ORklHX0lORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MDUuMzA3MDA2ODY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NTk3OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBJdGVyYXRvcnMgYW5kIHNrX3N0b3JhZ2UgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHJlbGF0ZWQgc2V0dGluZ3MgY29ubmVjdGVkIHRvIEJQRiBpdGVyYXRvcnMsIG9yIHRoZSBtb3JlIHNwZWNpZmljIGBicGZfc2tfc3RvcmFnZWAgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoZSBnZW5lcmFsIGFyZWFzLCBzbyBJIHdhbnQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBJIG1pZ2h0IGJlIG1pc3NpbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcywgSSdsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjaGFuZ2UgaG93IGBicGZfc2tfc3RvcmFnZWAgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgb2YgbG9va2luZyBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyB3aXRoaW4gdGhlIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCBmaWxlIGl0c2VsZi4gVGhhdCdzIHRoZSBmaXJzdCBhbmQgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIGxvb2ssIGdpdmVuIGl0cyBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MDcuNjgyOTg4OTQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodCAoYykgMjAxOSBGYWNlYm9vayAgKi9cXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0LmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmX2lkcy5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9sb2NhbF9zdG9yYWdlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3NvY2tfZGlhZy5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYnRmLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0REVGSU5FX0JQRl9TVE9SQUdFX0NBQ0hFKHNrX2NhY2hlKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0c3RhdGljIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpcXG4gIDIxOlxcdGJwZl9za19zdG9yYWdlX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXAsIGJvb2wgY2FjaGVpdF9sb2NraXQpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuICAyNDpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwO1xcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHRza19zdG9yYWdlID1cXG4gIDI3OlxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIGJwZl9yY3VfbG9ja19oZWxkKCkpO1xcbiAgMjg6XFx0XFx0aWYgKCFza19zdG9yYWdlKVxcbiAgMjk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdHNtYXAgPSAoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqKW1hcDtcXG4gIDMyOlxcdFxcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9sb29rdXAoc2tfc3RvcmFnZSwgc21hcCwgY2FjaGVpdF9sb2NraXQpO1xcbiAgMzM6XFx0fVxcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXApXFxuICAzNjpcXHR7XFxuICAzNzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqc2RhdGE7XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdHNkYXRhID0gYnBmX3NrX3N0b3JhZ2VfbG9va3VwKHNrLCBtYXAsIGZhbHNlKTtcXG4gIDQwOlxcdFxcdGlmICghc2RhdGEpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0cmV0dXJuIGJwZl9zZWxlbV91bmxpbmsoU0VMRU0oc2RhdGEpKTtcXG4gIDQ0OlxcdH1cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0LyogQ2FsbGVkIGJ5IF9fc2tfZGVzdHJ1Y3QoKSBcXHUwMDI2IGJwZl9za19zdG9yYWdlX2Nsb25lKCkgKi9cXG4gIDQ3OlxcdHZvaWQgYnBmX3NrX3N0b3JhZ2VfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuICA0ODpcXHR7XFxuICA0OTpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuICA1MDpcXHRcXHR1MzIgdW5jaGFyZ2U7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHJjdV9yZWFkX2xvY2tfZG9udF9taWdyYXRlKCk7XFxuICA1MzpcXHRcXHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNrLVxcdTAwM2Vza19icGZfc3RvcmFnZSk7XFxuICA1NDpcXHRcXHRpZiAoIXNrX3N0b3JhZ2UpXFxuICA1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0dW5jaGFyZ2UgPSBicGZfbG9jYWxfc3RvcmFnZV9kZXN0cm95KHNrX3N0b3JhZ2UpO1xcbiAgNTg6XFx0XFx0aWYgKHVuY2hhcmdlKVxcbiAgNTk6XFx0XFx0XFx0YXRvbWljX3N1Yih1bmNoYXJnZSwgXFx1MDAyNnNrLVxcdTAwM2Vza19vbWVtX2FsbG9jKTtcXG4gIDYwOlxcdG91dDpcXG4gIDYxOlxcdFxcdHJjdV9yZWFkX3VubG9ja19taWdyYXRlKCk7XFxuICA2MjpcXHR9XFxuICA2MzpcXHRcXG4gIDY0OlxcdHN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRicGZfbG9jYWxfc3RvcmFnZV9tYXBfZnJlZShtYXAsIFxcdTAwMjZza19jYWNoZSk7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3NrX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0cmV0dXJuIGJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvYyhhdHRyLCBcXHUwMDI2c2tfY2FjaGUpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW50IG5vdHN1cHBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gIDc1OlxcdFxcdFxcdFxcdFxcdHZvaWQgKm5leHRfa2V5KVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gIDc4OlxcdH1cXG4gIDc5OlxcdFxcbiAgODA6XFx0c3RhdGljIHZvaWQgKmJwZl9mZF9za19zdG9yYWdlX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gIDgxOlxcdHtcXG4gIDgyOlxcdFxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpzZGF0YTtcXG4gIDgzOlxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuICA4NDpcXHRcXHRpbnQgZmQsIGVycjtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ZmQgPSAqKGludCAqKWtleTtcXG4gIDg3OlxcdFxcdHNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCBcXHUwMDI2ZXJyKTtcXG4gIDg4OlxcdFxcdGlmIChzb2NrKSB7XFxuICA4OTpcXHRcXHRcXHRzZGF0YSA9IGJwZl9za19zdG9yYWdlX2xvb2t1cChzb2NrLVxcdTAwM2VzaywgbWFwLCB0cnVlKTtcXG4gIDkwOlxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuICA5MTpcXHRcXHRcXHRyZXR1cm4gc2RhdGEgPyBzZGF0YS1cXHUwMDNlZGF0YSA6IE5VTEw7XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBsb25nIGJwZl9mZF9za19zdG9yYWdlX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gIDk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxuICA5OTpcXHR7XFxuIDEwMDpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqc2RhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjA3LjY4MzEwODQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Nzg3Mjg0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgRGVwdGhzIG9mIGBicGZfc2tfc3RvcmFnZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBicGZfc2tfc3RvcmFnZS5jYCwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgODAwLiBUaGUgY29yZSBvZiB0aGlzIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBpdGVyYXRvciBhbmQgbWFwIGxvZ2ljIHRoYXQncyBpbXBsZW1lbnRlZCBoZXJlLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGZsb3csIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGUgc3RvcmFnZSBpcyBoYW5kbGVkIGF0IHRoaXMgbGV2ZWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIHRyYXZlcnNlcyB0aGUgc3RydWN0dXJlcywgZGVhbHMgd2l0aCBrZXlzIGFuZCB2YWx1ZXMsIGFuZCBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgZGF0YSBhY2Nlc3MgYW5kIG1hbmlwdWxhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGl0ZXJhdG9yL21hcCBpbnRlcmFjdGlvbiBpcyBjcml0aWNhbCBmb3IuLi4gd2VsbCwgZm9yICpldmVyeXRoaW5nKiBhdCB0aGlzIHBvaW50LiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZ3JpcCBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MTAuNjYxODQwMzAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTA6XFx0XFx0XFx0c2tpcF9lbGVtcyA9IDA7XFxuIDc1MTpcXHRcXHR9XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdGluZm8tXFx1MDAzZWJ1Y2tldF9pZCA9IGk7XFxuIDc1NDpcXHRcXHRpbmZvLVxcdTAwM2Vza2lwX2VsZW1zID0gMDtcXG4gNzU1OlxcdFxcdHJldHVybiBOVUxMO1xcbiA3NTY6XFx0fVxcbiA3NTc6XFx0XFxuIDc1ODpcXHRzdGF0aWMgdm9pZCAqYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuIDc1OTpcXHR7XFxuIDc2MDpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW07XFxuIDc2MTpcXHRcXG4gNzYyOlxcdFxcdHNlbGVtID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9maW5kX25leHQoc2VxLVxcdTAwM2Vwcml2YXRlLCBOVUxMKTtcXG4gNzYzOlxcdFxcdGlmICghc2VsZW0pXFxuIDc2NDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0aWYgKCpwb3MgPT0gMClcXG4gNzY3OlxcdFxcdFxcdCsrKnBvcztcXG4gNzY4OlxcdFxcdHJldHVybiBzZWxlbTtcXG4gNzY5OlxcdH1cXG4gNzcwOlxcdFxcbiA3NzE6XFx0c3RhdGljIHZvaWQgKmJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdixcXG4gNzcyOlxcdFxcdFxcdFxcdFxcdFxcdCBsb2ZmX3QgKnBvcylcXG4gNzczOlxcdHtcXG4gNzc0OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0KysqcG9zO1xcbiA3Nzc6XFx0XFx0KytpbmZvLVxcdTAwM2Vza2lwX2VsZW1zO1xcbiA3Nzg6XFx0XFx0cmV0dXJuIGJwZl9za19zdG9yYWdlX21hcF9zZXFfZmluZF9uZXh0KHNlcS1cXHUwMDNlcHJpdmF0ZSwgdik7XFxuIDc3OTpcXHR9XFxuIDc4MDpcXHRcXG4gNzgxOlxcdHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwIHtcXG4gNzgyOlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqLCBtZXRhKTtcXG4gNzgzOlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX21hcCAqLCBtYXApO1xcbiA3ODQ6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBzb2NrICosIHNrKTtcXG4gNzg1OlxcdFxcdF9fYnBmX21kX3B0cih2b2lkICosIHZhbHVlKTtcXG4gNzg2OlxcdH07XFxuIDc4NzpcXHRcXG4gNzg4OlxcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9za19zdG9yYWdlX21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuIDc4OTpcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcXG4gNzkwOlxcdFxcdFxcdCAgICAgdm9pZCAqdmFsdWUpXFxuIDc5MTpcXHRcXG4gNzkyOlxcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIDc5MzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiA3OTY6XFx0XFx0c3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAgY3R4ID0ge307XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuIDc5ODpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbiA3OTk6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA4MDA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgwMTpcXHRcXG4gODAyOlxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbiA4MDM6XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCBzZWxlbSA9PSBOVUxMKTtcXG4gODA0OlxcdFxcdGlmIChwcm9nKSB7XFxuIDgwNTpcXHRcXHRcXHRjdHgubWV0YSA9IFxcdTAwMjZtZXRhO1xcbiA4MDY6XFx0XFx0XFx0Y3R4Lm1hcCA9IGluZm8tXFx1MDAzZW1hcDtcXG4gODA3OlxcdFxcdFxcdGlmIChzZWxlbSkge1xcbiA4MDg6XFx0XFx0XFx0XFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSk7XFxuIDgwOTpcXHRcXHRcXHRcXHRpZiAoIXNrX3N0b3JhZ2UpXFxuIDgxMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gU0VRX1NLSVA7XFxuIDgxMTpcXHRcXHRcXHRcXHRjdHguc2sgPSBza19zdG9yYWdlLVxcdTAwM2Vvd25lcjtcXG4gODEyOlxcdFxcdFxcdFxcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cXHUwMDNlZGF0YTtcXG4gODEzOlxcdFxcdFxcdH1cXG4gODE0OlxcdFxcdFxcdHJldCA9IGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFxcdTAwMjZjdHgpO1xcbiA4MTU6XFx0XFx0fVxcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTg6XFx0fVxcbiA4MTk6XFx0XFxuIDgyMDpcXHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gODIxOlxcdHtcXG4gODIyOlxcdFxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbiA4MjM6XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDgyNjpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4gODI3OlxcdHtcXG4gODI4OlxcdFxcdGlmICghdilcXG4gODI5OlxcdFxcdFxcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XFxuIDgzMDpcXHRcXHRlbHNlXFxuIDgzMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODMyOlxcdH1cXG4gODMzOlxcdFxcbiA4MzQ6XFx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSxcXG4gODM1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbiA4MzY6XFx0e1xcbiA4Mzc6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICpzZXFfaW5mbyA9IHByaXZfZGF0YTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0YnBmX21hcF9pbmNfd2l0aF91cmVmKGF1eC1cXHUwMDNlbWFwKTtcXG4gODQwOlxcdFxcdHNlcV9pbmZvLVxcdTAwM2VtYXAgPSBhdXgtXFx1MDAzZW1hcDtcXG4gODQxOlxcdFxcdHJldHVybiAwO1xcbiA4NDI6XFx0fVxcbiA4NDM6XFx0XFxuIDg0NDpcXHRzdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSlcXG4gODQ1OlxcdHtcXG4gODQ2OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqc2VxX2luZm8gPSBwcml2X2RhdGE7XFxuIDg0NzpcXHRcXG4gODQ4OlxcdFxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihzZXFfaW5mby1cXHUwMDNlbWFwKTtcXG4gODQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MTAuNjYyMDc3ODMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzI2MTc1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJwZl9za19zdG9yYWdlLmNgIGZvciBSZWdpc3RyYXRpb24gRGV0YWlscyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYtYmFzZWQgc29ja2V0IHN0b3JhZ2UgbWVjaGFuaXNtcyBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgYnV0IG5vdyBpdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHNlZS4uLiB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBgYnBmX3NrX3N0b3JhZ2UuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIOKAkyB3aGVyZSBhbmQgaG93IHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHNvY2tldHMgYW5kIHRoZSBzdG9yYWdlIGl0c2VsZi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gYXR0YWNoaW5nIHByb2dyYW1zIHRvIHNwZWNpZmljIHNvY2tldCB0eXBlcywgbWF5YmUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzb2NrIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCBwZXJoYXBzIHNvbWUgbWVjaGFuaXNtcyBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzdG9yYWdlIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBCUEYgcHJvZ3JhbSwgdGhlIHNvY2tldCdzIGRhdGEsIGFuZCB0aGUgc3RvcmFnZSBsYXllci4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIGFuZCBob3BlZnVsbHksIEknbGwgZmluZCB0aGUgc2VjcmV0cyB0aGVyZS4gTGV0J3MgZ2V0IGNyYWNraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDoxNC4xMzQ2OTgzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDU6XFx0e1xcbiA4NDY6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICpzZXFfaW5mbyA9IHByaXZfZGF0YTtcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKHNlcV9pbmZvLVxcdTAwM2VtYXApO1xcbiA4NDk6XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHRzdGF0aWMgaW50IGJwZl9pdGVyX2F0dGFjaF9tYXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiA4NTI6XFx0XFx0XFx0XFx0ICAgICAgIHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyAqbGluZm8sXFxuIDg1MzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuIDg1NDpcXHR7XFxuIDg1NTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbiA4NTY6XFx0XFx0aW50IGVyciA9IC1FSU5WQUw7XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmICghbGluZm8tXFx1MDAzZW1hcC5tYXBfZmQpXFxuIDg1OTpcXHRcXHRcXHRyZXR1cm4gLUVCQURGO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRtYXAgPSBicGZfbWFwX2dldF93aXRoX3VyZWYobGluZm8tXFx1MDAzZW1hcC5tYXBfZmQpO1xcbiA4NjI6XFx0XFx0aWYgKElTX0VSUihtYXApKVxcbiA4NjM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWFwKTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1NLX1NUT1JBR0UpXFxuIDg2NjpcXHRcXHRcXHRnb3RvIHB1dF9tYXA7XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9yZHdyX2FjY2VzcyBcXHUwMDNlIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSkge1xcbiA4Njk6XFx0XFx0XFx0ZXJyID0gLUVBQ0NFUztcXG4gODcwOlxcdFxcdFxcdGdvdG8gcHV0X21hcDtcXG4gODcxOlxcdFxcdH1cXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0YXV4LVxcdTAwM2VtYXAgPSBtYXA7XFxuIDg3NDpcXHRcXHRyZXR1cm4gMDtcXG4gODc1OlxcdFxcbiA4NzY6XFx0cHV0X21hcDpcXG4gODc3OlxcdFxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihtYXApO1xcbiA4Nzg6XFx0XFx0cmV0dXJuIGVycjtcXG4gODc5OlxcdH1cXG4gODgwOlxcdFxcbiA4ODE6XFx0c3RhdGljIHZvaWQgYnBmX2l0ZXJfZGV0YWNoX21hcChzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4gODgyOlxcdHtcXG4gODgzOlxcdFxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihhdXgtXFx1MDAzZW1hcCk7XFxuIDg4NDpcXHR9XFxuIDg4NTpcXHRcXG4gODg2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuIDg4NzpcXHRcXHQuc3RhcnQgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydCxcXG4gODg4OlxcdFxcdC5uZXh0ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHQsXFxuIDg4OTpcXHRcXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxcbiA4OTA6XFx0XFx0LnNob3cgICA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyxcXG4gODkxOlxcdH07XFxuIDg5MjpcXHRcXG4gODkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcXG4gODk0OlxcdFxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXFxuIDg5NTpcXHRcXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcXG4gODk2OlxcdFxcdC5maW5pX3NlcV9wcml2YXRlXFx0PSBicGZfaXRlcl9maW5pX3NrX3N0b3JhZ2VfbWFwLFxcbiA4OTc6XFx0XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8pLFxcbiA4OTg6XFx0fTtcXG4gODk5OlxcdFxcbiA5MDA6XFx0c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xcbiA5MDE6XFx0XFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImJwZl9za19zdG9yYWdlX21hcFxcXCIsXFxuIDkwMjpcXHRcXHQuYXR0YWNoX3RhcmdldFxcdFxcdD0gYnBmX2l0ZXJfYXR0YWNoX21hcCxcXG4gOTAzOlxcdFxcdC5kZXRhY2hfdGFyZ2V0XFx0XFx0PSBicGZfaXRlcl9kZXRhY2hfbWFwLFxcbiA5MDQ6XFx0XFx0LnNob3dfZmRpbmZvXFx0XFx0PSBicGZfaXRlcl9tYXBfc2hvd19mZGluZm8sXFxuIDkwNTpcXHRcXHQuZmlsbF9saW5rX2luZm9cXHRcXHQ9IGJwZl9pdGVyX21hcF9maWxsX2xpbmtfaW5mbyxcXG4gOTA2OlxcdFxcdC5jdHhfYXJnX2luZm9fc2l6ZVxcdD0gMixcXG4gOTA3OlxcdFxcdC5jdHhfYXJnX2luZm9cXHRcXHQ9IHtcXG4gOTA4OlxcdFxcdFxcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAsIHNrKSxcXG4gOTA5OlxcdFxcdFxcdCAgUFRSX1RPX0JURl9JRF9PUl9OVUxMIH0sXFxuIDkxMDpcXHRcXHRcXHR7IG9mZnNldG9mKHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwLCB2YWx1ZSksXFxuIDkxMTpcXHRcXHRcXHQgIFBUUl9UT19CVUYgfCBQVFJfTUFZQkVfTlVMTCB9LFxcbiA5MTI6XFx0XFx0fSxcXG4gOTEzOlxcdFxcdC5zZXFfaW5mb1xcdFxcdD0gXFx1MDAyNml0ZXJfc2VxX2luZm8sXFxuIDkxNDpcXHR9O1xcbiA5MTU6XFx0XFxuIDkxNjpcXHRzdGF0aWMgaW50IF9faW5pdCBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KHZvaWQpXFxuIDkxNzpcXHR7XFxuIDkxODpcXHRcXHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XFxuIDkxOTpcXHRcXHRcXHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcXG4gOTIwOlxcdFxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xcbiA5MjE6XFx0fVxcbiA5MjI6XFx0bGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MTQuMTM0ODIyMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2MTc3ODM1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBCUEYgU29ja2V0IFN0b3JhZ2UgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AgYW5kIHRyeWluZyB0byBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBmb3IgZnV6emluZy4gU3BlY2lmaWNhbGx5LCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjb3VsZCBvY2N1ciBpZiBgc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZWAgaXMgTlVMTCB1bmRlciBSQ1UgKGhhcHBlbnMgd2hlbiB0aGUgc29ja2V0IG9yIHN0b3JhZ2UgZWxlbWVudCBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkpLiBUaGUgZml4IGludHJvZHVjZXMgYSBjaGVjaywgYGlmICghc2tfc3RvcmFnZSkgcmV0dXJuIFNFUV9TS0lQO2AgYmVmb3JlIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIFNpbXBsZSBlbm91Z2guXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhlIEJQRiBzb2NrZXQgc3RvcmFnZSBtYXAgaXRlcmF0aW9uIGlzIGEgY29yZSBCUEYgZmVhdHVyZSwgZXhwb3NlZCB2aWEgYGJwZihCUEZfSVRFUl9DUkVBVEUsIC4uLilgIGFuZCBgYnBmKEJQRl9MSU5LX0NSRUFURSwgLi4uKWAsIGFuZCB0aGVuIHJlYWRpbmcgdGhlIGl0ZXIgZmQgdmlhIGByZWFkKClgIGNhbGxzLCBzZXFfZmlsZSBvcGVyYXRpb25zLiAgV2UgY2FuIHRyaWdnZXIgdGhpcyBieSBjb25jdXJyZW50bHkgY3JlYXRpbmcvZGVsZXRpbmcgc29ja2V0cyBvciB1cGRhdGluZyBzb2NrZXQgc3RvcmFnZSBtYXBzLCB3aGljaCBtZWFucyBzeXprYWxsZXIgY2FuIGFic29sdXRlbHkgaGl0IHRoaXMgd2l0aCBCUEYgc3lzY2FsbCBlbmFibGVkLiBUaGlzIGlzIDEwMCUgcmVhY2hhYmxlIGluIGEgc3l6a2FsbGVyL3VzZXJzcGFjZSBlbnZpcm9ubWVudC5cblxuU28sIGl0J3MgcmVhY2hhYmxlIOKAkyBjaGVjayEgIFdvcnRoRnV6emluZyDigJMgY2hlY2shIE5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzLiAgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSBwYWluLiBCdXQgd2UgbmVlZCB0byBjaGVjayB0aGUgbm9uLXN0YXRpYyBjb3VudGVycGFydHMgYXMgd2VsbCB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZXRoaW5nOiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCwgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0YCwgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX2ZpbmRfbmV4dGAsIGBicGZfaXRlcl9ydW5fcHJvZ2AsIGBicGZfc2tfc3RvcmFnZV9sb29rdXBgLCBgYnBmX3NrX3N0b3JhZ2VfZGVsYCwgYW5kIGBicGZfc2tfc3RvcmFnZV9mcmVlYC4gV2UnbGwgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFyZSBwcmVzZW50IGFzIHN5bWJvbHMgaW4gdGhlIHZtbGludXggaW1hZ2UuIEV2ZW4gaWYgc3RhdGljLCBzeXprYWxsZXLigJlzIGtjb3Yvc3ltYm9sIGZpbHRlcnMgY2FuIGhhbmRsZSB0aGVtIGlmIGNvbXBpbGVkIGludG8gdm1saW51eC4gIFdlIGhhdmUgdG8gY2hlY2sgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG9yIHJlbGF0ZWQgaXRlcmF0b3IgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0byBjb3ZlciBvdXIgYmFzZXMuXG5cbkEgcXVpY2sgY2hlY2sgb2YgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vYCwgc28gQlBGIHN5c2NhbGwgbmVlZHMgdG8gYmUgZW5hYmxlZC4gQW5kIGl0J3MgcHJvYmFibHkgd29ydGggYSBncmVwIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIEtjb25maWcgZGVwZW5kZW5jaWVzIG9yIGNvZGViYXNlIG1lbnRpb25zIG9mIGBicGZfc2tfc3RvcmFnZWAgb3IgYGJwZl9pdGVyX3JlZ190YXJnZXRgLiBMZXQncyBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjI2Ljc1MjYwOTMyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNDkwNzU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTAwPXN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE1LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTE2OnN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNy17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMS19XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MjI6bGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MjguNjU3NTIyNDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjEwNDU5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQnbGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjMwLjc3ODU3MDQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3NDg3MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjMyLjcwNjA2MzA5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTAwNzQxNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQlBGIEtjb25maWcgSW5zcGVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNjb3BlIG91dCBhcm91bmQgbGluZSAyNy4gSXQncyBhIGdlbmVyYWwgYXBwcm9hY2ggd2hlbiBzdGFydGluZyBhbiBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgZXNzZW50aWFsIGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhlIHNwZWNpZmljIGxpbmUgbnVtYmVyIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludDsgaXQncyBsaWtlbHkgYSBmb2NhbCBhcmVhLCBlaXRoZXIgYSBtYWluIHNlY3Rpb24sIG9yIHNvbWV0aGluZyB0aGF0IGJyYW5jaGVzIG91dCBpbnRvIG11bHRpcGxlIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSBpbW1lZGlhdGUgY2x1ZXMgdGhhdCBnaXZlIGFuIGluZGljYXRpb24gb2YgaG93IEJQRiBpcyBlbmFibGVkL2Rpc2FibGVkIG9yIGNvbmZpZ3VyZWQuIFRoaXMgcHJlbGltaW5hcnkgc2NhbiB3aWxsIHByb3ZpZGUgYSByb2FkbWFwIGZvciBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MzQuNjA2ODA3MDQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcXG4gIDYzOlxcdFxcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxcbiAgNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjM0LjYwNjg3NTY0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDE1NTAyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9yIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRvciBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGBORVRgIGNvbmZpZywgYmVjYXVzZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBpc24ndCBpbmNsdWRlZCB1bmxlc3MgYENPTkZJR19ORVRgIGlzIGV4cGxpY2l0bHkgZW5hYmxlZC4gVGhhdCdzIGEga2V5IGRlcGVuZGVuY3kgdG8ga2VlcCBpbiBtaW5kLiBJIGtub3cgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCBhcmUgcmVsZXZhbnQgaGVyZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgYW5kIHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBJJ20gZXhhbWluaW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSByZXF1aXJlIEJURiwgYEJQRl9QUkVMT0FEYCwgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsICppbiBhZGRpdGlvbiB0byoganVzdCBoYXZpbmcgYEJQRl9TWVNDQUxMYCBlbmFibGVkLCBmb3IgdGhlIEJQRiBpdGVyYXRvcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb2RlIGZsb3cgYW5kIGRlcGVuZGVuY2llcywgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBleGFtaW5lIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIGRpcmVjdGx5IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvcnMuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gaG93IHRoZXNlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjM3LjYyMjM4MTc2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0c3RydWN0IGJwZl9pdGVyX3RhcmdldF9pbmZvIHtcXG4gIDExOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gIDEyOlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgKnJlZ19pbmZvO1xcbiAgMTM6XFx0XFx0dTMyIGJ0Zl9pZDtcXHQvKiBjYWNoZWQgdmFsdWUgKi9cXG4gIDE0OlxcdH07XFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0cnVjdCBicGZfaXRlcl9saW5rIHtcXG4gIDE3OlxcdFxcdHN0cnVjdCBicGZfbGluayBsaW5rO1xcbiAgMTg6XFx0XFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvIGF1eDtcXG4gIDE5OlxcdFxcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3QgYnBmX2l0ZXJfcHJpdl9kYXRhIHtcXG4gIDIzOlxcdFxcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XFxuICAyNDpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gKnNlcV9pbmZvO1xcbiAgMjU6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiAgMjY6XFx0XFx0dTY0IHNlc3Npb25faWQ7XFxuICAyNzpcXHRcXHR1NjQgc2VxX251bTtcXG4gIDI4OlxcdFxcdGJvb2wgZG9uZV9zdG9wO1xcbiAgMjk6XFx0XFx0dTggdGFyZ2V0X3ByaXZhdGVbXSBfX2FsaWduZWQoOCk7XFxuICAzMDpcXHR9O1xcbiAgMzE6XFx0XFxuICAzMjpcXHRzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB0YXJnZXRzID0gTElTVF9IRUFEX0lOSVQodGFyZ2V0cyk7XFxuICAzMzpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHRhcmdldHNfbXV0ZXgpO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBwcm90ZWN0IGJwZl9pdGVyX2xpbmsgY2hhbmdlcyAqL1xcbiAgMzY6XFx0c3RhdGljIERFRklORV9NVVRFWChsaW5rX211dGV4KTtcXG4gIDM3OlxcdFxcbiAgMzg6XFx0LyogaW5jcmVtZW50ZWQgb24gZXZlcnkgb3BlbmVkIHNlcV9maWxlICovXFxuICAzOTpcXHRzdGF0aWMgYXRvbWljNjRfdCBzZXNzaW9uX2lkO1xcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjM3LjYyMjQ5MjAxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjk5NDU0NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9ycyBhbmQgQlRGIEluZm9ybWF0aW9uIGZvciBTb2NrZXQgU3RvcmFnZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBCUEYgaXRlcmF0b3Igc3R1ZmYgd2l0aCBzb2NrZXQgc3RvcmFnZSBpcyB3b3JraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIGBERUJVR19JTkZPX0JURmAgaXMgZW5hYmxlZCwgc28gSSdsbCBwcm9iYWJseSBsb29rIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyB0byBjb25maXJtLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGl0ZXJhdG9yIGl0c2VsZiBpcyBzZXQgdXAuIEknbGwgbmVlZCB0byBsb29rIGludG8gYGJ0Zl9zb2NrX2lkc2AgYW5kIHdoYXRldmVyIHRoZSBCUEYgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIGFyZSBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCBiZWNhdXNlIHRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIEJQRiBzayBzdG9yYWdlIGFuZCBpdGVyYXRvciBzdHVmZiByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXM6XG5cbmBgYGNcbnN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcbntcblx0YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPVxuXHRcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xuXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xufVxubGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcbmBgYFxuXG5Pa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBoYXBwZW5pbmcgaW4gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXRgLiAgQW5kIHRoYXQgZnVuY3Rpb24gaXMgcmVmZXJlbmNpbmcgYGJ0Zl9zb2NrX2lkc2Agd2l0aCBgQlRGX1NPQ0tfVFlQRV9TT0NLYC4gVGhhdCBsb29rcyBrZXkuIEkgc2VlIGl0J3MgdXNpbmcgQlRGIElEIGZvciBhIGNvbnRleHQgYXJndW1lbnQuIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm9gIGFzIHdlbGwuIFRoZSBjYWxsIHRvIGBicGZfaXRlcl9yZWdfdGFyZ2V0YCB0ZWxscyBtZSBpdCdzIHJlZ2lzdGVyaW5nIGEgdGFyZ2V0LiBUaGUgYGxhdGVfaW5pdGNhbGxgIG1lYW5zIGl0J3MgaGFwcGVuaW5nIGxhdGVyLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSByZWFkeS5cblxuVWx0aW1hdGVseSwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gYGJ0Zl9zb2NrX2lkc2AgYW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgYXJyYXkgaG9sZHMgYW5kIGhvdyBpdCdzIHBvcHVsYXRlZC4gVGhhdCB3aWxsIHRlbGwgbWUgd2hhdCBzcGVjaWZpYyBCVEYgaW5mb3JtYXRpb24gaXMgYmVpbmcgdXNlZCB0byBjaGFyYWN0ZXJpemUgdGhlc2Ugc29ja2V0IHR5cGVzIGZvciBCUEYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6NDQuOTIxOTQ5NTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgzODc2Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl9zb2NrX2lkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yNjQ9TUFYX0JURl9TT0NLX1RZUEUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yNjYtXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjY3OmV4dGVybiB1MzIgYnRmX3NvY2tfaWRzW107XFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY4LSNlbmRpZlxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9OTQ9dm9pZCBicGZfbHNtX2ZpbmRfY2dyb3VwX3NoaW0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMTA4LVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjEwOTpcXHRpZiAoYXJnc1swXS50eXBlID09IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tFVF0pXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMTEwLVxcdFxcdCpicGZfZnVuYyA9IF9fY2dyb3VwX2JwZl9ydW5fbHNtX3NvY2tldDtcXG5rZXJuZWwvYnBmL2JwZl9sc20uYzoxMTE6XFx0ZWxzZSBpZiAoYXJnc1swXS50eXBlID09IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdKVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTExMi1cXHRcXHQqYnBmX2Z1bmMgPSBfX2Nncm91cF9icGZfcnVuX2xzbV9zb2NrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUwOTY9c3RhdGljIHUzMiAqcmVnMmJ0Zl9pZHNbX19CUEZfUkVHX1RZUEVfTUFYXSA9IHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTA5Ny0jaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDk4OlxcdFtQVFJfVE9fU09DS0VUXSA9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTA5OTpcXHRbUFRSX1RPX1NPQ0tfQ09NTU9OXSA9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLX0NPTU1PTl0sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUxMDA6XFx0W1BUUl9UT19UQ1BfU09DS10gPSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEwMS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBidGZfaWRfc29ja19jb21tb25fdHlwZXMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE1Mi1cXHR9LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTUzOlxcdC5idGZfaWQgPSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTU0LX07XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTQwMz1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X3RyYWNpbmdfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQwOC1cXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NDA5OlxcdC5hcmcyX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQxMC1cXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MTU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjAtXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQyMTpcXHQuYXJnMl9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLX0NPTU1PTl0sXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjItXFx0LmFsbG93ZWRcXHQ9IGJwZl9za19zdG9yYWdlX3RyYWNpbmdfYWxsb3dlZCxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTE2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE4LVxcdGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkxOTpcXHRcXHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMC1cXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTg5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTQ6QlRGX0lEX0xJU1RfR0xPQkFMKGJ0Zl9zb2NrX2lkcywgTUFYX0JURl9TT0NLX1RZUEUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTUtI2RlZmluZSBCVEZfU09DS19UWVBFKG5hbWUsIHR5cGUpIEJURl9JRChzdHJ1Y3QsIHR5cGUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIxMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3A2X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIxNi1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIxNzpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUDZdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjE4LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIyOD1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjMyLVxcdC5hcmcxX3R5cGVcXHRcXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjMzOlxcdC5yZXRfYnRmX2lkXFx0XFx0PSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQXSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzNC19O1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyNTc9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2MS1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2MjpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF9UV10sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjMtfTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjgwPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI4NC1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI4NTpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF9SRVFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjg2LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMwMT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b191ZHA2X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMwNS1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjMwNjpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VEUDZdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzA3LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMyMT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b191bml4X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMyNS1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjMyNjpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzI3LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMzNT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIzMzktXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjM0MDpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX01QVENQXSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjM0MS19O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xOTg2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9zb2NrbWFwX2l0ZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTg4LVxcdHNvY2tfbWFwX2l0ZXJfcmVnLmN0eF9hcmdfaW5mb1sxXS5idGZfaWQgPVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk4OTpcXHRcXHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OTAtXFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnNvY2tfbWFwX2l0ZXJfcmVnKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzY0MT1zdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NDIte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY0MzpcXHR0Y3BfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NDQtXFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnRjcF9yZWdfaW5mbykpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zOTAwPXN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxcbm5ldC9pcHY0L3VkcC5jLTM5MDEte1xcbm5ldC9pcHY0L3VkcC5jOjM5MDI6XFx0dWRwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFBdO1xcbm5ldC9pcHY0L3VkcC5jLTM5MDMtXFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVkcF9yZWdfaW5mbykpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzkzMz1zdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvdW5peC9hZl91bml4LmMtMzkzNC17XFxubmV0L3VuaXgvYWZfdW5peC5jOjM5MzU6XFx0dW5peF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVU5JWF07XFxubmV0L3VuaXgvYWZfdW5peC5jLTM5MzYtXFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVuaXhfcmVnX2luZm8pKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjYzPU1BWF9CVEZfU09DS19UWVBFLFxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY1LVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oOjI2NjpleHRlcm4gdTMyIGJ0Zl9zb2NrX2lkc1tdO1xcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTI2Ny0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6NDYuNzA1ODMzNjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4ODExNDIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IExvY2FsIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGJwZl9za19zdG9yYWdlLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIEJQRiBpdGVyYXRvcnMgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KClgLiBNeSBpbml0aWFsIHRob3VnaHRzPyBUaGlzIGxvb2tzIGxpa2UgaXQgY291bGQgYmUgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgbWVudGlvbmVkLiBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpYCByZXR1cm5pbmcgTlVMTCBkdXJpbmcgYSBCUEYgaXRlcmF0b3Igb3BlcmF0aW9uIGlzIGEgcmVkIGZsYWcuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gVGhleSdyZSBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciBlbmFibGluZyB0aGUgQlBGIHN5c3RlbSBjYWxsIGFuZCBuZXR3b3JraW5nIGZlYXR1cmVzLCByZXNwZWN0aXZlbHksIHdoaWNoIGFyZSBwcmVyZXF1aXNpdGVzIGhlcmUuXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlybWVkIHRoYXQgdGhleSBhcmUgYWxsIHNwZWNpZmljIHRvIHRoZSBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwIGFuZCBpdHMgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uIFRoZXNlIGluY2x1ZGU6IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHRgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCwgYGJwZl9za19zdG9yYWdlX2ZyZWVgLCBgYnBmX3NrX3N0b3JhZ2VfbG9va3VwYCwgYW5kIGBicGZfc2tfc3RvcmFnZV9kZWxgLiBUaGF0IGxvb2tzIHJpZ2h0LiBHaXZlbiB0aGUgTlVMTCBjaGVjaywgSSBjYW4gc2VlIHRoYXQgYWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBCUEYgaXRlcmF0b3JzIG9uIGBCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRWAgbWFwcy5cblxuQmVmb3JlIEkgZmluYWxpemUgbXkgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYCwgSSdsbCBkb3VibGUtY2hlY2sgYWxsIHRoZSBkZXRhaWxzIHRvIGJlIHN1cmUgZXZlcnl0aGluZyBpcyBhbGlnbmVkLiBNeSBjb25jbHVzaW9ucyBhcmU6IFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIE5VTEwgY2hlY2sgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSlgIHJldHVybnMgTlVMTCB3aGVuIGR1bXBpbmcgZWxlbWVudHMgdXNpbmcgQlBGIGl0ZXJhdG9ycyBhbmQsIHdpdGhvdXQgaXQsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIEkgdGhpbmsgdGhlIHN5bWJvbHMgSSd2ZSBpZGVudGlmaWVkIGNvdmVyIHRoZSBjcml0aWNhbCBhcmVhcyB0aGF0IG5lZWQgdGVzdGluZy4gU28sIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MDgsIk91dHB1dFRva2VucyI6MjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjU3LjU4Njk3ODUwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjM5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd1wiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9uZXh0XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2ZyZWVcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfZGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKSBpbiBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIHRvIGFkZCBhIGNoZWNrIGZvciBOVUxMIHNrX3N0b3JhZ2UgYmVmb3JlIGFjY2Vzc2luZyBza19zdG9yYWdlLVxcdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnRcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9mcmVlXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9sb29rdXBcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXIgd2hlbiBpdGVyYXRpbmcgb3ZlciBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEYgc29ja2V0IHN0b3JhZ2UgbWFwcyBhbmQgQlBGIGl0ZXJhdG9yIGxpbmtzKSBhbmQgaXMgd29ydGh3aGlsZSB0byBmdXp6IGZvciBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDo1Ny42NjUyMjQ5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NzQ5OTAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDo1Ny42NjU3NjU5MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNTc0NDQ0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBvbiBgc2tfc3RvcmFnZWAgKGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgKSBhZnRlciBjYWxsaW5nIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXFx1MDAzZWxvY2FsX3N0b3JhZ2UpYCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXJgLiBcXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb2ludGVyIHZhbGlkaXR5IC8gTlVMTCBkZXJlZmVyZW5jZSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgcG9pbnRlciB2YWxpZGl0eSBpc3N1ZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGJ1aWxkcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWMzYTc0Yzg5YThkNWFlMDA2MDE5YTEyNjg3OGYwODgxNGM3MDg4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjE5OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjdkMDIyNDVhYTcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG4rKysgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5AQCAtODA2LDYgKzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKHNlbGVtKSB7XG4gXHRcdFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtcbitcdFx0XHRpZiAoIXNrX3N0b3JhZ2UpXG4rXHRcdFx0XHRyZXR1cm4gU0VRX1NLSVA7XG4gXHRcdFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtcbiBcdFx0XHRjdHgudmFsdWUgPSBTREFUQShzZWxlbSktXHUwMDNlZGF0YTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6NTcuNjY1NzY2NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY3ODM0MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGEgQlBGIFNLIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBBbHJpZ2h0LCBoZXJlJ3Mgd2hhdCB3ZSBoYXZlOiBhIGNoYW5nZSBpbiBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIGNoZWNrIGZvciBgc2tfc3RvcmFnZWAgYmVpbmcgTlVMTCB3aXRoaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YC4gU3BlY2lmaWNhbGx5LCBpZiBgc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZWAgZGVyZWZlcmVuY2VzIHRvIE5VTEwsIGl0IHJldHVybnMgYFNFUV9TS0lQYC5cblxuVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgY2VudGVycyBhcm91bmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IE5VTEwgY2hlY2sgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdkIGxpa2UgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoaXMgY29kZSwgc28gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IHVzaW5nIGEgYHJlYWQtZmlsZWAgY29tbWFuZCBvciBgZ3JlcHBlcmAgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2VgIGlzIHBvcHVsYXRlZCwgd2hhdCBgc2tfc3RvcmFnZWAgcmVwcmVzZW50cywgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCAqY291bGQqIGJlIE5VTEwuIFRoZSBgU0VRX1NLSVBgIHJldHVybiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIHNlcXVlbmNlIGZpbGUgb3BlcmF0aW9uLCBhbmQgSSdkIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgcGF0Y2ggYWZmZWN0cyBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBwb3RlbnRpYWwgc3RhdGVzIGV4cG9zZWQgcmVxdWlyZSBLTVNBTiB0byBjaGVjayB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMTowMy4zNDQxMTA2MDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTA6XFx0XFx0XFx0ICAgICB2b2lkICp2YWx1ZSlcXG4gNzkxOlxcdFxcbiA3OTI6XFx0c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4gNzkzOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxuIDc5NDpcXHR7XFxuIDc5NTpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDc5NjpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9za19zdG9yYWdlX21hcCBjdHggPSB7fTtcXG4gNzk3OlxcdFxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcXG4gNzk4OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XFxuIDc5OTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIDgwMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0bWV0YS5zZXEgPSBzZXE7XFxuIDgwMzpcXHRcXHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXFx1MDAyNm1ldGEsIHNlbGVtID09IE5VTEwpO1xcbiA4MDQ6XFx0XFx0aWYgKHByb2cpIHtcXG4gODA1OlxcdFxcdFxcdGN0eC5tZXRhID0gXFx1MDAyNm1ldGE7XFxuIDgwNjpcXHRcXHRcXHRjdHgubWFwID0gaW5mby1cXHUwMDNlbWFwO1xcbiA4MDc6XFx0XFx0XFx0aWYgKHNlbGVtKSB7XFxuIDgwODpcXHRcXHRcXHRcXHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKTtcXG4gODA5OlxcdFxcdFxcdFxcdGlmICghc2tfc3RvcmFnZSlcXG4gODEwOlxcdFxcdFxcdFxcdFxcdHJldHVybiBTRVFfU0tJUDtcXG4gODExOlxcdFxcdFxcdFxcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyO1xcbiA4MTI6XFx0XFx0XFx0XFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVxcdTAwM2VkYXRhO1xcbiA4MTM6XFx0XFx0XFx0fVxcbiA4MTQ6XFx0XFx0XFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXFx1MDAyNmN0eCk7XFxuIDgxNTpcXHRcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdHJldHVybiByZXQ7XFxuIDgxODpcXHR9XFxuIDgxOTpcXHRcXG4gODIwOlxcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiA4MjE6XFx0e1xcbiA4MjI6XFx0XFx0cmV0dXJuIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XFxuIDgyMzpcXHR9XFxuIDgyNDpcXHRcXG4gODI1OlxcdHN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gODI2OlxcdFxcdF9fcmVsZWFzZXMoUkNVKVxcbiA4Mjc6XFx0e1xcbiA4Mjg6XFx0XFx0aWYgKCF2KVxcbiA4Mjk6XFx0XFx0XFx0KHZvaWQpX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcXG4gODMwOlxcdFxcdGVsc2VcXG4gODMxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4MzI6XFx0fVxcbiA4MzM6XFx0XFxuIDgzNDpcXHRzdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAodm9pZCAqcHJpdl9kYXRhLFxcbiA4MzU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuIDgzNjpcXHR7XFxuIDgzNzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKnNlcV9pbmZvID0gcHJpdl9kYXRhO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRicGZfbWFwX2luY193aXRoX3VyZWYoYXV4LVxcdTAwM2VtYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMTowMy4zNDQyMDMxOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5NTk4Njg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBQcmV2ZW50aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLiBUaGUgY3JpdGljYWwgbGluZSBpcyBgc2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtgIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBgY3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtgLiBXaXRob3V0IGEgY2hlY2ssIGlmIGBza19zdG9yYWdlYCBpcyBOVUxMLCB3ZSdyZSBnb2luZyB0byBjcmFzaCwgcGxhaW4gYW5kIHNpbXBsZS5cblxuVGhpcyBwYXRjaCBzbWFydGx5IGFkZHJlc3NlcyB0aGF0IGJ5IGFkZGluZyBhbiBgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCBiZWZvcmUgdGhlIHBvdGVudGlhbGx5IGRhbmdlcm91cyBsaW5lLiBBIHNvbGlkIGRlZmVuc2l2ZSBtYW5ldXZlci4gVGhpcyBpcyBnb29kIHByYWN0aWNlIGZvciBpdGVyYXRpbmcgb3ZlciBtYXAgZWxlbWVudHMgYW5kIGVuc3VyaW5nIHdlIGRvbid0IHRyeSB0byBhY2Nlc3MgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHdoZXJlIG15IGV4cGVydGlzZSBjb21lcyBpbiwgYW5kIEkgbmVlZCB0byBiZSAqc3VyZSogd2UgYXJlbid0IGludHJvZHVjaW5nIG5ldyByaXNrcy4gRG9lcyB0aGlzIHBhdGNoOlxuXG4qICAgUmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEknbSBub3Qgc2VlaW5nIGFueS5cbiogICBQYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2Ugb3IgY29uZGl0aW9uYWxzPyBObywgYW5kIHRoYXQncyBjcml0aWNhbC4gYGN0eGAgaXMgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgZ29vZC5cbiogICBGaXggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2U/IEFic29sdXRlbHksIHRoYXQncyBpdHMgcHJpbWFyeSBmdW5jdGlvbi4gV2UncmUgcHJldmVudGluZyBhIGtlcm5lbCBwYW5pYy5cbiogICBSZXF1aXJlIEtNU0FOPyBOb3QgaW4gdGhlIHNsaWdodGVzdC4gVGhlIHByb2JsZW0gaXMgYSBzdHJhaWdodGZvcndhcmQgTlVMTCBkZXJlZmVyZW5jZSwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcsIHBhZ2UgZmF1bHQsIG9yIEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG5cblRvIGRvdWJsZS1jaGVjayB0aGUgS01TQU4gY3JpdGVyaWEsIEknbSBnb2luZyB0aHJvdWdoIHRoZW0gaW4gbXkgaGVhZDpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLCBub3QgaGVyZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGggY2hlY2tzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzcz8gRGVmaW5pdGVseSBub3QuXG5cblRoZSBwYXRjaCdzIGdvYWwgaXMgdG8gcHJldmVudCBhIHZlcnkgc3BlY2lmaWMgdHlwZSBvZiBjcmFzaCBieSBhdm9pZGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4gSSdsbCBhbHNvIGFkZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AsIGZvY3VzaW5nIG9uIHRoZSBOVUxMIGNoZWNrIGFuZCB0aGUgYWJzZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhpcyBpcyBhIGNsZWFuIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNywiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMToxMC4yNDAxOTI0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKWAgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KClgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG9pbnRlciB2YWxpZGl0eSAvIE5VTEwgZGVyZWZlcmVuY2UgaXNzdWUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3MuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHBvaW50ZXIgdmFsaWRpdHkgaXNzdWVzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBidWlsZHMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIG9uIGBza19zdG9yYWdlYCAoYGlmICghc2tfc3RvcmFnZSkgcmV0dXJuIFNFUV9TS0lQO2ApIGFmdGVyIGNhbGxpbmcgYHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSlgIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBza19zdG9yYWdlLVxcdTAwM2Vvd25lcmAuIFxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvaW50ZXIgdmFsaWRpdHkgLyBOVUxMIGRlcmVmZXJlbmNlIGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBwb2ludGVyIHZhbGlkaXR5IGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYnVpbGRzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgzjch[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 14:17:39 +0000 UTC FinishedAt: 2026-09-11 14:21:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "30aa457b-4b74-4e8b-92fb-80a98bea0b48" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "__bpf_sk_storage_map_seq_show", "bpf_sk_storage_map_seq_show", "bpf_sk_storage_map_seq_start", "bpf_sk_storage_map_seq_next", "bpf_sk_storage_map_seq_stop", "bpf_sk_storage_free", "bpf_sk_storage_lookup", "bpf_sk_storage_del" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpYCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb2ludGVyIHZhbGlkaXR5IC8gTlVMTCBkZXJlZmVyZW5jZSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgcG9pbnRlciB2YWxpZGl0eSBpc3N1ZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGJ1aWxkcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YzNhNzRjODlhOGQ1YWUwMDYwMTlhMTI2ODc4ZjA4ODE0YzcwODhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MTk6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjdkMDIyNDVhYTcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5AQCAtODA2LDYgJiM0Mzs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChzZWxlbSkge1xuIFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4mIzQzO1x0XHRcdGlmICghc2tfc3RvcmFnZSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gU0VRX1NLSVA7XG4gXHRcdFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtcbiBcdFx0XHRjdHgudmFsdWUgPSBTREFUQShzZWxlbSktXHUwMDNlZGF0YTtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzNhNzRjODlhOGQ1YWUwMDYwMTlhMTI2ODc4ZjA4ODE0YzcwODhkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MTk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwppbmRleCAxZDI5NWE4NzY5ZmFkLi43ZDAyMjQ1YWE3MDQ5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKQEAgLTgwNiw2ICYjNDM7ODA2LDggQEAgc3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKIAkJY3R4Lm1hcCA9IGluZm8tJmd0O21hcDsKIAkJaWYgKHNlbGVtKSB7CiAJCQlza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLSZndDtsb2NhbF9zdG9yYWdlKTsKJiM0MzsJCQlpZiAoIXNrX3N0b3JhZ2UpCiYjNDM7CQkJCXJldHVybiBTRVFfU0tJUDsKIAkJCWN0eC5zayA9IHNrX3N0b3JhZ2UtJmd0O293bmVyOwogCQkJY3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLSZndDtkYXRhOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTSyBTdG9yYWdlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwNi4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIG15IHByZWZlcnJlZCB0b29saW5nLCBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcsIG9yIGBncmVwcGVyYCB0byBsb2NhdGUgdGhlIHBlcnRpbmVudCBjb2RlIHdpdGggc29tZSBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFx0XHQgICAgIHZvaWQgKnZhbHVlKVxuIDc5MTpcdFxuIDc5MjpcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gNzkzOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4gNzk0Olx0e1xuIDc5NTpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gNzk2Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9za19zdG9yYWdlX21hcCBjdHggPSB7fTtcbiA3OTc6XHRcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcbiA3OTg6XHRcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XG4gNzk5Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gODAwOlx0XHRpbnQgcmV0ID0gMDtcbiA4MDE6XHRcbiA4MDI6XHRcdG1ldGEuc2VxID0gc2VxO1xuIDgwMzpcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIHNlbGVtID09IE5VTEwpO1xuIDgwNDpcdFx0aWYgKHByb2cpIHtcbiA4MDU6XHRcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIDgwNjpcdFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gODA3Olx0XHRcdGlmIChzZWxlbSkge1xuIDgwODpcdFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4gODA5Olx0XHRcdFx0aWYgKCFza19zdG9yYWdlKVxuIDgxMDpcdFx0XHRcdFx0cmV0dXJuIFNFUV9TS0lQO1xuIDgxMTpcdFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gODEyOlx0XHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gODEzOlx0XHRcdH1cbiA4MTQ6XHRcdFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXHUwMDI2Y3R4KTtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcbiA4MTc6XHRcdHJldHVybiByZXQ7XG4gODE4Olx0fVxuIDgxOTpcdFxuIDgyMDpcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDgyMTpcdHtcbiA4MjI6XHRcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xuIDgyMzpcdH1cbiA4MjQ6XHRcbiA4MjU6XHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gODI2Olx0XHRfX3JlbGVhc2VzKFJDVSlcbiA4Mjc6XHR7XG4gODI4Olx0XHRpZiAoIXYpXG4gODI5Olx0XHRcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gb2YgYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgdGhlIGluY2x1c2lvbiBhbmQgY29tcGlsYXRpb24gb2YgYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgdHJlZSBhbmQgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvZiB0aGlzIGZpbGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgYE1ha2VmaWxlYCBhbmQgYEtjb25maWdgIGZpbGVzIOKAkyB0aGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBjb250cm9sbGluZyBvYmplY3QgZmlsZSBpbmNsdXNpb24gYW5kIGZlYXR1cmUgdG9nZ2xlcywgcmVzcGVjdGl2ZWx5LiBJJiMzOTtsbCBzZWFyY2ggc3BlY2lmaWNhbGx5IGZvciBlaXRoZXIgdGhlIG9iamVjdCBmaWxlIG5hbWUsIGBicGZfc2tfc3RvcmFnZS5vYCwgb3IgdGhlIGxpa2VseSBjb25maWd1cmF0aW9uIHN5bWJvbCwgYEJQRl9TS19TVE9SQUdFYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgSSYjMzk7bSBsb29raW5nIGZvciBhbmQgbGVhZCBtZSB0byB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9ycyBhbmQgc2tfc3RvcmFnZSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIHRoZXJlIGFyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGVkIHNldHRpbmdzIGNvbm5lY3RlZCB0byBCUEYgaXRlcmF0b3JzLCBvciB0aGUgbW9yZSBzcGVjaWZpYyBgYnBmX3NrX3N0b3JhZ2VgIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhcywgc28gSSB3YW50IHRvIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIEkgbWlnaHQgYmUgbWlzc2luZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjaGFuZ2UgaG93IGBicGZfc2tfc3RvcmFnZWAgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AgZmlsZSBpdHNlbGYuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFuZCBtb3N0IG9idmlvdXMgcGxhY2UgdG8gbG9vaywgZ2l2ZW4gaXRzIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDE5IEZhY2Vib29rICAqL1xuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sb2NhbF9zdG9yYWdlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYnBmX3NrX3N0b3JhZ2UuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3NvY2tfZGlhZy5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9idGYuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3RyYWNlLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHRERUZJTkVfQlBGX1NUT1JBR0VfQ0FDSEUoc2tfY2FjaGUpO1xuICAxOTpcdFxuICAyMDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqXG4gIDIxOlx0YnBmX3NrX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcbiAgMjI6XHR7XG4gIDIzOlx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XG4gIDI0Olx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwO1xuICAyNTpcdFxuICAyNjpcdFx0c2tfc3RvcmFnZSA9XG4gIDI3Olx0XHRcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay1cdTAwM2Vza19icGZfc3RvcmFnZSwgYnBmX3JjdV9sb2NrX2hlbGQoKSk7XG4gIDI4Olx0XHRpZiAoIXNrX3N0b3JhZ2UpXG4gIDI5Olx0XHRcdHJldHVybiBOVUxMO1xuICAzMDpcdFxuICAzMTpcdFx0c21hcCA9IChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICopbWFwO1xuICAzMjpcdFx0cmV0dXJuIGJwZl9sb2NhbF9zdG9yYWdlX2xvb2t1cChza19zdG9yYWdlLCBzbWFwLCBjYWNoZWl0X2xvY2tpdCk7XG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfZGVsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcClcbiAgMzY6XHR7XG4gIDM3Olx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqc2RhdGE7XG4gIDM4Olx0XG4gIDM5Olx0XHRzZGF0YSA9IGJwZl9za19zdG9yYWdlX2xvb2t1cChzaywgbWFwLCBmYWxzZSk7XG4gIDQwOlx0XHRpZiAoIXNkYXRhKVxuICA0MTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAgNDI6XHRcbiAgNDM6XHRcdHJldHVybiBicGZfc2VsZW1fdW5saW5rKFNFTEVNKHNkYXRhKSk7XG4gIDQ0Olx0fVxuICA0NTpcdFxuICA0NjpcdC8qIENhbGxlZCBieSBfX3NrX2Rlc3RydWN0KCkgXHUwMDI2IGJwZl9za19zdG9yYWdlX2Nsb25lKCkgKi9cbiAgNDc6XHR2b2lkIGJwZl9za19zdG9yYWdlX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxuICA0ODpcdHtcbiAgNDk6XHRcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcbiAgNTA6XHRcdHUzMiB1bmNoYXJnZTtcbiAgNTE6XHRcbiAgNTI6XHRcdHJjdV9yZWFkX2xvY2tfZG9udF9taWdyYXRlKCk7XG4gIDUzOlx0XHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX2JwZl9zdG9yYWdlKTtcbiAgNTQ6XHRcdGlmICghc2tfc3RvcmFnZSlcbiAgNTU6XHRcdFx0Z290byBvdXQ7XG4gIDU2Olx0XG4gIDU3Olx0XHR1bmNoYXJnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX2Rlc3Ryb3koc2tfc3RvcmFnZSk7XG4gIDU4Olx0XHRpZiAodW5jaGFyZ2UpXG4gIDU5Olx0XHRcdGF0b21pY19zdWIodW5jaGFyZ2UsIFx1MDAyNnNrLVx1MDAzZXNrX29tZW1fYWxsb2MpO1xuICA2MDpcdG91dDpcbiAgNjE6XHRcdHJjdV9yZWFkX3VubG9ja19taWdyYXRlKCk7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdHN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gIDY1Olx0e1xuICA2NjpcdFx0YnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2ZyZWUobWFwLCBcdTAwMjZza19jYWNoZSk7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3NrX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuICA3MDpcdHtcbiAgNzE6XHRcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2MoYXR0ciwgXHUwMDI2c2tfY2FjaGUpO1xuICA3MjpcdH1cbiAgNzM6XHRcbiAgNzQ6XHRzdGF0aWMgaW50IG5vdHN1cHBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiAgNzU6XHRcdFx0XHRcdHZvaWQgKm5leHRfa2V5KVxuICA3NjpcdHtcbiAgNzc6XHRcdHJldHVybiAtRU5PVFNVUFA7XG4gIDc4Olx0fVxuICA3OTpcdFxuICA4MDpcdHN0YXRpYyB2b2lkICpicGZfZmRfc2tfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gIDgxOlx0e1xuICA4MjpcdFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKnNkYXRhO1xuICA4MzpcdFx0c3RydWN0IHNvY2tldCAqc29jaztcbiAgODQ6XHRcdGludCBmZCwgZXJyO1xuICA4NTpcdFxuICA4NjpcdFx0ZmQgPSAqKGludCAqKWtleTtcbiAgODc6XHRcdHNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCBcdTAwMjZlcnIpO1xuICA4ODpcdFx0aWYgKHNvY2spIHtcbiAgODk6XHRcdFx0c2RhdGEgPSBicGZfc2tfc3RvcmFnZV9sb29rdXAoc29jay1cdTAwM2VzaywgbWFwLCB0cnVlKTtcbiAgOTA6XHRcdFx0c29ja2ZkX3B1dChzb2NrKTtcbiAgOTE6XHRcdFx0cmV0dXJuIHNkYXRhID8gc2RhdGEtXHUwMDNlZGF0YSA6IE5VTEw7XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdGF0aWMgbG9uZyBicGZfZmRfc2tfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gIDk4Olx0XHRcdFx0XHRcdCAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4gIDk5Olx0e1xuIDEwMDpcdFx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKnNkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipQZWVyaW5nIGludG8gdGhlIERlcHRocyBvZiBgYnBmX3NrX3N0b3JhZ2UuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgYnBmX3NrX3N0b3JhZ2UuY2AsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDgwMC4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBsaWVzIHdpdGhpbiB0aGUgaXRlcmF0b3IgYW5kIG1hcCBsb2dpYyB0aGF0JiMzOTtzIGltcGxlbWVudGVkIGhlcmUuIEkgd2FudCB0byB0cmFjZSB0aGUgZmxvdywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoZSBzdG9yYWdlIGlzIGhhbmRsZWQgYXQgdGhpcyBsZXZlbC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgdHJhdmVyc2VzIHRoZSBzdHJ1Y3R1cmVzLCBkZWFscyB3aXRoIGtleXMgYW5kIHZhbHVlcywgYW5kIG1ha2VzIGRlY2lzaW9ucyBhYm91dCBkYXRhIGFjY2VzcyBhbmQgbWFuaXB1bGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXRlcmF0b3IvbWFwIGludGVyYWN0aW9uIGlzIGNyaXRpY2FsIGZvci4uLiB3ZWxsLCBmb3IgKmV2ZXJ5dGhpbmcqIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBncmlwIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdFx0c2tpcF9lbGVtcyA9IDA7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XG4gNzUzOlx0XHRpbmZvLVx1MDAzZWJ1Y2tldF9pZCA9IGk7XG4gNzU0Olx0XHRpbmZvLVx1MDAzZXNraXBfZWxlbXMgPSAwO1xuIDc1NTpcdFx0cmV0dXJuIE5VTEw7XG4gNzU2Olx0fVxuIDc1NzpcdFxuIDc1ODpcdHN0YXRpYyB2b2lkICpicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiA3NTk6XHR7XG4gNzYwOlx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW07XG4gNzYxOlx0XG4gNzYyOlx0XHRzZWxlbSA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfZmluZF9uZXh0KHNlcS1cdTAwM2Vwcml2YXRlLCBOVUxMKTtcbiA3NjM6XHRcdGlmICghc2VsZW0pXG4gNzY0Olx0XHRcdHJldHVybiBOVUxMO1xuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKCpwb3MgPT0gMClcbiA3Njc6XHRcdFx0JiM0MzsmIzQzOypwb3M7XG4gNzY4Olx0XHRyZXR1cm4gc2VsZW07XG4gNzY5Olx0fVxuIDc3MDpcdFxuIDc3MTpcdHN0YXRpYyB2b2lkICpicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsXG4gNzcyOlx0XHRcdFx0XHRcdCBsb2ZmX3QgKnBvcylcbiA3NzM6XHR7XG4gNzc0Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbiA3NzU6XHRcbiA3NzY6XHRcdCYjNDM7JiM0MzsqcG9zO1xuIDc3NzpcdFx0JiM0MzsmIzQzO2luZm8tXHUwMDNlc2tpcF9lbGVtcztcbiA3Nzg6XHRcdHJldHVybiBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX2ZpbmRfbmV4dChzZXEtXHUwMDNlcHJpdmF0ZSwgdik7XG4gNzc5Olx0fVxuIDc4MDpcdFxuIDc4MTpcdHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwIHtcbiA3ODI6XHRcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqLCBtZXRhKTtcbiA3ODM6XHRcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX21hcCAqLCBtYXApO1xuIDc4NDpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBzb2NrICosIHNrKTtcbiA3ODU6XHRcdF9fYnBmX21kX3B0cih2b2lkICosIHZhbHVlKTtcbiA3ODY6XHR9O1xuIDc4NzpcdFxuIDc4ODpcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9za19zdG9yYWdlX21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4gNzg5Olx0XHRcdCAgICAgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxuIDc5MDpcdFx0XHQgICAgIHZvaWQgKnZhbHVlKVxuIDc5MTpcdFxuIDc5MjpcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gNzkzOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4gNzk0Olx0e1xuIDc5NTpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gNzk2Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9za19zdG9yYWdlX21hcCBjdHggPSB7fTtcbiA3OTc6XHRcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcbiA3OTg6XHRcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XG4gNzk5Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gODAwOlx0XHRpbnQgcmV0ID0gMDtcbiA4MDE6XHRcbiA4MDI6XHRcdG1ldGEuc2VxID0gc2VxO1xuIDgwMzpcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIHNlbGVtID09IE5VTEwpO1xuIDgwNDpcdFx0aWYgKHByb2cpIHtcbiA4MDU6XHRcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIDgwNjpcdFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gODA3Olx0XHRcdGlmIChzZWxlbSkge1xuIDgwODpcdFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4gODA5Olx0XHRcdFx0aWYgKCFza19zdG9yYWdlKVxuIDgxMDpcdFx0XHRcdFx0cmV0dXJuIFNFUV9TS0lQO1xuIDgxMTpcdFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gODEyOlx0XHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gODEzOlx0XHRcdH1cbiA4MTQ6XHRcdFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXHUwMDI2Y3R4KTtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcbiA4MTc6XHRcdHJldHVybiByZXQ7XG4gODE4Olx0fVxuIDgxOTpcdFxuIDgyMDpcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDgyMTpcdHtcbiA4MjI6XHRcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xuIDgyMzpcdH1cbiA4MjQ6XHRcbiA4MjU6XHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gODI2Olx0XHRfX3JlbGVhc2VzKFJDVSlcbiA4Mjc6XHR7XG4gODI4Olx0XHRpZiAoIXYpXG4gODI5Olx0XHRcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XG4gODMwOlx0XHRlbHNlXG4gODMxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDgzMjpcdH1cbiA4MzM6XHRcbiA4MzQ6XHRzdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAodm9pZCAqcHJpdl9kYXRhLFxuIDgzNTpcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbiA4MzY6XHR7XG4gODM3Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKnNlcV9pbmZvID0gcHJpdl9kYXRhO1xuIDgzODpcdFxuIDgzOTpcdFx0YnBmX21hcF9pbmNfd2l0aF91cmVmKGF1eC1cdTAwM2VtYXApO1xuIDg0MDpcdFx0c2VxX2luZm8tXHUwMDNlbWFwID0gYXV4LVx1MDAzZW1hcDtcbiA4NDE6XHRcdHJldHVybiAwO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSlcbiA4NDU6XHR7XG4gODQ2Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKnNlcV9pbmZvID0gcHJpdl9kYXRhO1xuIDg0NzpcdFxuIDg0ODpcdFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKHNlcV9pbmZvLVx1MDAzZW1hcCk7XG4gODQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3NrX3N0b3JhZ2UuY2AgZm9yIFJlZ2lzdHJhdGlvbiBEZXRhaWxzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYtYmFzZWQgc29ja2V0IHN0b3JhZ2UgbWVjaGFuaXNtcyBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGJ1dCBub3cgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBgYnBmX3NrX3N0b3JhZ2UuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyDigJMgd2hlcmUgYW5kIGhvdyB0aGVzZSBCUEYgcHJvZ3JhbXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXRzIGFuZCB0aGUgc3RvcmFnZSBpdHNlbGYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZnVuY3Rpb24gY2FsbHMgcmVsYXRlZCB0byBhdHRhY2hpbmcgcHJvZ3JhbXMgdG8gc3BlY2lmaWMgc29ja2V0IHR5cGVzLCBtYXliZSBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIHNvY2sgc3RydWN0dXJlIGl0c2VsZiwgYW5kIHBlcmhhcHMgc29tZSBtZWNoYW5pc21zIGZvciBtYW5hZ2luZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIHN0b3JhZ2UgY29tcG9uZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIEJQRiBwcm9ncmFtLCB0aGUgc29ja2V0JiMzOTtzIGRhdGEsIGFuZCB0aGUgc3RvcmFnZSBsYXllci4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBhbmQgaG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBzZWNyZXRzIHRoZXJlLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NTpcdHtcbiA4NDY6XHRcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqc2VxX2luZm8gPSBwcml2X2RhdGE7XG4gODQ3Olx0XG4gODQ4Olx0XHRicGZfbWFwX3B1dF93aXRoX3VyZWYoc2VxX2luZm8tXHUwMDNlbWFwKTtcbiA4NDk6XHR9XG4gODUwOlx0XG4gODUxOlx0c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiA4NTI6XHRcdFx0XHQgICAgICAgdW5pb24gYnBmX2l0ZXJfbGlua19pbmZvICpsaW5mbyxcbiA4NTM6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4gODU0Olx0e1xuIDg1NTpcdFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiA4NTY6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuIDg1NzpcdFxuIDg1ODpcdFx0aWYgKCFsaW5mby1cdTAwM2VtYXAubWFwX2ZkKVxuIDg1OTpcdFx0XHRyZXR1cm4gLUVCQURGO1xuIDg2MDpcdFxuIDg2MTpcdFx0bWFwID0gYnBmX21hcF9nZXRfd2l0aF91cmVmKGxpbmZvLVx1MDAzZW1hcC5tYXBfZmQpO1xuIDg2MjpcdFx0aWYgKElTX0VSUihtYXApKVxuIDg2MzpcdFx0XHRyZXR1cm4gUFRSX0VSUihtYXApO1xuIDg2NDpcdFxuIDg2NTpcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRSlcbiA4NjY6XHRcdFx0Z290byBwdXRfbWFwO1xuIDg2NzpcdFxuIDg2ODpcdFx0aWYgKHByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9yZHdyX2FjY2VzcyBcdTAwM2UgbWFwLVx1MDAzZXZhbHVlX3NpemUpIHtcbiA4Njk6XHRcdFx0ZXJyID0gLUVBQ0NFUztcbiA4NzA6XHRcdFx0Z290byBwdXRfbWFwO1xuIDg3MTpcdFx0fVxuIDg3MjpcdFxuIDg3MzpcdFx0YXV4LVx1MDAzZW1hcCA9IG1hcDtcbiA4NzQ6XHRcdHJldHVybiAwO1xuIDg3NTpcdFxuIDg3NjpcdHB1dF9tYXA6XG4gODc3Olx0XHRicGZfbWFwX3B1dF93aXRoX3VyZWYobWFwKTtcbiA4Nzg6XHRcdHJldHVybiBlcnI7XG4gODc5Olx0fVxuIDg4MDpcdFxuIDg4MTpcdHN0YXRpYyB2b2lkIGJwZl9pdGVyX2RldGFjaF9tYXAoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4gODgyOlx0e1xuIDg4MzpcdFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKGF1eC1cdTAwM2VtYXApO1xuIDg4NDpcdH1cbiA4ODU6XHRcbiA4ODY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzID0ge1xuIDg4NzpcdFx0LnN0YXJ0ICA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnQsXG4gODg4Olx0XHQubmV4dCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9uZXh0LFxuIDg4OTpcdFx0LnN0b3AgICA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcCxcbiA4OTA6XHRcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXG4gODkxOlx0fTtcbiA4OTI6XHRcbiA4OTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XG4gODk0Olx0XHQuc2VxX29wc1x0XHQ9IFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzLFxuIDg5NTpcdFx0LmluaXRfc2VxX3ByaXZhdGVcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcbiA4OTY6XHRcdC5maW5pX3NlcV9wcml2YXRlXHQ9IGJwZl9pdGVyX2Zpbmlfc2tfc3RvcmFnZV9tYXAsXG4gODk3Olx0XHQuc2VxX3ByaXZfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8pLFxuIDg5ODpcdH07XG4gODk5Olx0XG4gOTAwOlx0c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xuIDkwMTpcdFx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwXCYjMzQ7LFxuIDkwMjpcdFx0LmF0dGFjaF90YXJnZXRcdFx0PSBicGZfaXRlcl9hdHRhY2hfbWFwLFxuIDkwMzpcdFx0LmRldGFjaF90YXJnZXRcdFx0PSBicGZfaXRlcl9kZXRhY2hfbWFwLFxuIDkwNDpcdFx0LnNob3dfZmRpbmZvXHRcdD0gYnBmX2l0ZXJfbWFwX3Nob3dfZmRpbmZvLFxuIDkwNTpcdFx0LmZpbGxfbGlua19pbmZvXHRcdD0gYnBmX2l0ZXJfbWFwX2ZpbGxfbGlua19pbmZvLFxuIDkwNjpcdFx0LmN0eF9hcmdfaW5mb19zaXplXHQ9IDIsXG4gOTA3Olx0XHQuY3R4X2FyZ19pbmZvXHRcdD0ge1xuIDkwODpcdFx0XHR7IG9mZnNldG9mKHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwLCBzayksXG4gOTA5Olx0XHRcdCAgUFRSX1RPX0JURl9JRF9PUl9OVUxMIH0sXG4gOTEwOlx0XHRcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAsIHZhbHVlKSxcbiA5MTE6XHRcdFx0ICBQVFJfVE9fQlVGIHwgUFRSX01BWUJFX05VTEwgfSxcbiA5MTI6XHRcdH0sXG4gOTEzOlx0XHQuc2VxX2luZm9cdFx0PSBcdTAwMjZpdGVyX3NlcV9pbmZvLFxuIDkxNDpcdH07XG4gOTE1Olx0XG4gOTE2Olx0c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuIDkxNzpcdHtcbiA5MTg6XHRcdGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID1cbiA5MTk6XHRcdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG4gOTIwOlx0XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xuIDkyMTpcdH1cbiA5MjI6XHRsYXRlX2luaXRjYWxsKGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgQlBGIFNvY2tldCBTdG9yYWdlIFZ1bG5lcmFiaWxpdHkgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGFuZCB0cnlpbmcgdG8gZGV0ZXJtaW5lIGl0cyByZWxldmFuY2UgZm9yIGZ1enppbmcuIFNwZWNpZmljYWxseSwgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCwgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY291bGQgb2NjdXIgaWYgYHNlbGVtLSZndDtsb2NhbF9zdG9yYWdlYCBpcyBOVUxMIHVuZGVyIFJDVSAoaGFwcGVucyB3aGVuIHRoZSBzb2NrZXQgb3Igc3RvcmFnZSBlbGVtZW50IGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseSkuIFRoZSBmaXggaW50cm9kdWNlcyBhIGNoZWNrLCBgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCBiZWZvcmUgYWNjZXNzaW5nIGBza19zdG9yYWdlLSZndDtvd25lcmAuIFNpbXBsZSBlbm91Z2guCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGU/IEFic29sdXRlbHkuIFRoZSBCUEYgc29ja2V0IHN0b3JhZ2UgbWFwIGl0ZXJhdGlvbiBpcyBhIGNvcmUgQlBGIGZlYXR1cmUsIGV4cG9zZWQgdmlhIGBicGYoQlBGX0lURVJfQ1JFQVRFLCAuLi4pYCBhbmQgYGJwZihCUEZfTElOS19DUkVBVEUsIC4uLilgLCBhbmQgdGhlbiByZWFkaW5nIHRoZSBpdGVyIGZkIHZpYSBgcmVhZCgpYCBjYWxscywgc2VxX2ZpbGUgb3BlcmF0aW9ucy4gIFdlIGNhbiB0cmlnZ2VyIHRoaXMgYnkgY29uY3VycmVudGx5IGNyZWF0aW5nL2RlbGV0aW5nIHNvY2tldHMgb3IgdXBkYXRpbmcgc29ja2V0IHN0b3JhZ2UgbWFwcywgd2hpY2ggbWVhbnMgc3l6a2FsbGVyIGNhbiBhYnNvbHV0ZWx5IGhpdCB0aGlzIHdpdGggQlBGIHN5c2NhbGwgZW5hYmxlZC4gVGhpcyBpcyAxMDAlIHJlYWNoYWJsZSBpbiBhIHN5emthbGxlci91c2Vyc3BhY2UgZW52aXJvbm1lbnQuCgpTbywgaXQmIzM5O3MgcmVhY2hhYmxlIOKAkyBjaGVjayEgIFdvcnRoRnV6emluZyDigJMgY2hlY2shIE5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scy4gIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbi4gQnV0IHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5vbi1zdGF0aWMgY291bnRlcnBhcnRzIGFzIHdlbGwgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWV0aGluZzogYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHRgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9maW5kX25leHRgLCBgYnBmX2l0ZXJfcnVuX3Byb2dgLCBgYnBmX3NrX3N0b3JhZ2VfbG9va3VwYCwgYGJwZl9za19zdG9yYWdlX2RlbGAsIGFuZCBgYnBmX3NrX3N0b3JhZ2VfZnJlZWAuIFdlJiMzOTtsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBhbmQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYXJlIHByZXNlbnQgYXMgc3ltYm9scyBpbiB0aGUgdm1saW51eCBpbWFnZS4gRXZlbiBpZiBzdGF0aWMsIHN5emthbGxlcuKAmXMga2Nvdi9zeW1ib2wgZmlsdGVycyBjYW4gaGFuZGxlIHRoZW0gaWYgY29tcGlsZWQgaW50byB2bWxpbnV4LiAgV2UgaGF2ZSB0byBjaGVjayBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgb3IgcmVsYXRlZCBpdGVyYXRvciBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIHRvIGNvdmVyIG91ciBiYXNlcy4KCkEgcXVpY2sgY2hlY2sgb2YgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub2AsIHNvIEJQRiBzeXNjYWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQuIEFuZCBpdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBhIGdyZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgS2NvbmZpZyBkZXBlbmRlbmNpZXMgb3IgY29kZWJhc2UgbWVudGlvbnMgb2YgYGJwZl9za19zdG9yYWdlYCBvciBgYnBmX2l0ZXJfcmVnX3RhcmdldGAuIExldCYjMzk7cyBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTkwMD1zdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8gPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTUtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkxNjpzdGF0aWMgaW50IF9faW5pdCBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KHZvaWQpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNy17XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MjEtfVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MjI6bGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEtub3dpbmcgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIGl0JiMzOTtsbCBiZSBpbiBvbmUgb2YgdGhvc2UsIG9yIHBlcmhhcHMgY3Jvc3MtcmVmZXJlbmNlZCBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHN5c2NhbGwgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBCUEYgS2NvbmZpZyBJbnNwZWN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzY29wZSBvdXQgYXJvdW5kIGxpbmUgMjcuIEl0JiMzOTtzIGEgZ2VuZXJhbCBhcHByb2FjaCB3aGVuIHN0YXJ0aW5nIGFuIGludmVzdGlnYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBjb2RlYmFzZSwgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSBlc3NlbnRpYWwgaW4gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgc3BlY2lmaWMgbGluZSBudW1iZXIgaXMganVzdCBhIHN0YXJ0aW5nIHBvaW50OyBpdCYjMzk7cyBsaWtlbHkgYSBmb2NhbCBhcmVhLCBlaXRoZXIgYSBtYWluIHNlY3Rpb24sIG9yIHNvbWV0aGluZyB0aGF0IGJyYW5jaGVzIG91dCBpbnRvIG11bHRpcGxlIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSBpbW1lZGlhdGUgY2x1ZXMgdGhhdCBnaXZlIGFuIGluZGljYXRpb24gb2YgaG93IEJQRiBpcyBlbmFibGVkL2Rpc2FibGVkIG9yIGNvbmZpZ3VyZWQuIFRoaXMgcHJlbGltaW5hcnkgc2NhbiB3aWxsIHByb3ZpZGUgYSByb2FkbWFwIGZvciBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAxOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9yIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGl0ZXJhdG9yIGlzc3VlLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBgTkVUYCBjb25maWcsIGJlY2F1c2UgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgaXNuJiMzOTt0IGluY2x1ZGVkIHVubGVzcyBgQ09ORklHX05FVGAgaXMgZXhwbGljaXRseSBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IGRlcGVuZGVuY3kgdG8ga2VlcCBpbiBtaW5kLiBJIGtub3cgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCBhcmUgcmVsZXZhbnQgaGVyZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgSSYjMzk7bSBleGFtaW5pbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSByZXF1aXJlIEJURiwgYEJQRl9QUkVMT0FEYCwgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsICppbiBhZGRpdGlvbiB0byoganVzdCBoYXZpbmcgYEJQRl9TWVNDQUxMYCBlbmFibGVkLCBmb3IgdGhlIEJQRiBpdGVyYXRvcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBmbG93IGFuZCBkZXBlbmRlbmNpZXMsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBleGFtaW5lIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIGRpcmVjdGx5IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvcnMuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gaG93IHRoZXNlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyB7XG4gIDExOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gIDEyOlx0XHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbztcbiAgMTM6XHRcdHUzMiBidGZfaWQ7XHQvKiBjYWNoZWQgdmFsdWUgKi9cbiAgMTQ6XHR9O1xuICAxNTpcdFxuICAxNjpcdHN0cnVjdCBicGZfaXRlcl9saW5rIHtcbiAgMTc6XHRcdHN0cnVjdCBicGZfbGluayBsaW5rO1xuICAxODpcdFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvIGF1eDtcbiAgMTk6XHRcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XG4gIDIwOlx0fTtcbiAgMjE6XHRcbiAgMjI6XHRzdHJ1Y3QgYnBmX2l0ZXJfcHJpdl9kYXRhIHtcbiAgMjM6XHRcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XG4gIDI0Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gKnNlcV9pbmZvO1xuICAyNTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuICAyNjpcdFx0dTY0IHNlc3Npb25faWQ7XG4gIDI3Olx0XHR1NjQgc2VxX251bTtcbiAgMjg6XHRcdGJvb2wgZG9uZV9zdG9wO1xuICAyOTpcdFx0dTggdGFyZ2V0X3ByaXZhdGVbXSBfX2FsaWduZWQoOCk7XG4gIDMwOlx0fTtcbiAgMzE6XHRcbiAgMzI6XHRzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB0YXJnZXRzID0gTElTVF9IRUFEX0lOSVQodGFyZ2V0cyk7XG4gIDMzOlx0c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRzX211dGV4KTtcbiAgMzQ6XHRcbiAgMzU6XHQvKiBwcm90ZWN0IGJwZl9pdGVyX2xpbmsgY2hhbmdlcyAqL1xuICAzNjpcdHN0YXRpYyBERUZJTkVfTVVURVgobGlua19tdXRleCk7XG4gIDM3Olx0XG4gIDM4Olx0LyogaW5jcmVtZW50ZWQgb24gZXZlcnkgb3BlbmVkIHNlcV9maWxlICovXG4gIDM5Olx0c3RhdGljIGF0b21pYzY0X3Qgc2Vzc2lvbl9pZDtcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgSXRlcmF0b3JzIGFuZCBCVEYgSW5mb3JtYXRpb24gZm9yIFNvY2tldCBTdG9yYWdlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgQlBGIGl0ZXJhdG9yIHN0dWZmIHdpdGggc29ja2V0IHN0b3JhZ2UgaXMgd29ya2luZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgREVCVUdfSU5GT19CVEZgIGlzIGVuYWJsZWQsIHNvIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgaW50byBga2VybmVsL2JwZi9LY29uZmlnYCBvciB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIHRvIGNvbmZpcm0uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpdGVyYXRvciBpdHNlbGYgaXMgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byBgYnRmX3NvY2tfaWRzYCBhbmQgd2hhdGV2ZXIgdGhlIEJQRiBpdGVyYXRvciByZXF1aXJlbWVudHMgYXJlIGluIHRoaXMgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGJlY2F1c2UgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIEJQRiBzayBzdG9yYWdlIGFuZCBpdGVyYXRvciBzdHVmZiByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXM6CgpgYGBjCnN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZCkKewoJYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPQoJCWJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdOwoJcmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoJmFtcDticGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pOwp9CmxhdGVfaW5pdGNhbGwoYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCk7CmBgYAoKT2theSwgc28gaXQgc2VlbXMgbGlrZSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nIGluIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0YC4gIEFuZCB0aGF0IGZ1bmN0aW9uIGlzIHJlZmVyZW5jaW5nIGBidGZfc29ja19pZHNgIHdpdGggYEJURl9TT0NLX1RZUEVfU09DS2AuIFRoYXQgbG9va3Mga2V5LiBJIHNlZSBpdCYjMzk7cyB1c2luZyBCVEYgSUQgZm9yIGEgY29udGV4dCBhcmd1bWVudC4gSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mb2AgYXMgd2VsbC4gVGhlIGNhbGwgdG8gYGJwZl9pdGVyX3JlZ190YXJnZXRgIHRlbGxzIG1lIGl0JiMzOTtzIHJlZ2lzdGVyaW5nIGEgdGFyZ2V0LiBUaGUgYGxhdGVfaW5pdGNhbGxgIG1lYW5zIGl0JiMzOTtzIGhhcHBlbmluZyBsYXRlciwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB3aGVuIGRlcGVuZGVuY2llcyBhcmUgcmVhZHkuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gYGJ0Zl9zb2NrX2lkc2AgYW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgYXJyYXkgaG9sZHMgYW5kIGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgc3BlY2lmaWMgQlRGIGluZm9ybWF0aW9uIGlzIGJlaW5nIHVzZWQgdG8gY2hhcmFjdGVyaXplIHRoZXNlIHNvY2tldCB0eXBlcyBmb3IgQlBGLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfc29ja19pZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjY0PU1BWF9CVEZfU09DS19UWVBFLFxuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTI2Ni1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oOjI2NzpleHRlcm4gdTMyIGJ0Zl9zb2NrX2lkc1tdO1xuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY4LSNlbmRpZlxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTk0PXZvaWQgYnBmX2xzbV9maW5kX2Nncm91cF9zaGltKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0xMDgtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzoxMDk6XHRpZiAoYXJnc1swXS50eXBlID09IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tFVF0pXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0xMTAtXHRcdCpicGZfZnVuYyA9IF9fY2dyb3VwX2JwZl9ydW5fbHNtX3NvY2tldDtcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjExMTpcdGVsc2UgaWYgKGFyZ3NbMF0udHlwZSA9PSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXSlcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTExMi1cdFx0KmJwZl9mdW5jID0gX19jZ3JvdXBfYnBmX3J1bl9sc21fc29jaztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTA5Nj1zdGF0aWMgdTMyICpyZWcyYnRmX2lkc1tfX0JQRl9SRUdfVFlQRV9NQVhdID0ge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTUwOTctI2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDk4Olx0W1BUUl9UT19TT0NLRVRdID0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS10sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTA5OTpcdFtQVFJfVE9fU09DS19DT01NT05dID0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUxMDA6XHRbUFRSX1RPX1RDUF9TT0NLXSA9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF0sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEwMS0jZW5kaWZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgYnRmX2lkX3NvY2tfY29tbW9uX3R5cGVzID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTUyLVx0fSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTUzOlx0LmJ0Zl9pZCA9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTU0LX07XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MDM9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDA4LVx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MDk6XHQuYXJnMl9idGZfaWRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MTAtXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MTU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDIwLVx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MjE6XHQuYXJnMl9idGZfaWRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjItXHQuYWxsb3dlZFx0PSBicGZfc2tfc3RvcmFnZV90cmFjaW5nX2FsbG93ZWQsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE4LVx0YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTk6XHRcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MjAtXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTg5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTQ6QlRGX0lEX0xJU1RfR0xPQkFMKGJ0Zl9zb2NrX2lkcywgTUFYX0JURl9TT0NLX1RZUEUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NS0jZGVmaW5lIEJURl9TT0NLX1RZUEUobmFtZSwgdHlwZSkgQlRGX0lEKHN0cnVjdCwgdHlwZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIxMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3A2X3NvY2tfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTYtXHQuYXJnMV90eXBlXHRcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIxNzpcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQNl0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIxOC19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjI4PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjMyLVx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMzM6XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzNC19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjU3PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjYxLVx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNjI6XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF9UV10sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2My19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjgwPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2tfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyODQtXHQuYXJnMV90eXBlXHRcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI4NTpcdC5yZXRfYnRmX2lkXHRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQX1JFUV0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI4Ni19O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMzAxPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3VkcDZfc29ja19wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMwNS1cdC5hcmcxX3R5cGVcdFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMzA2Olx0LnJldF9idGZfaWRcdFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFA2XSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzA3LX07XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIzMjE9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdW5peF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzI1LVx0LmFyZzFfdHlwZVx0XHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIzMjY6XHQucmV0X2J0Zl9pZFx0XHQ9IFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIzMjctfTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMzNT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzM5LVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIzNDA6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9NUFRDUF0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjM0MS19O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTk4Nj1zdGF0aWMgaW50IF9faW5pdCBicGZfc29ja21hcF9pdGVyX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5ODgtXHRzb2NrX21hcF9pdGVyX3JlZy5jdHhfYXJnX2luZm9bMV0uYnRmX2lkID1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk4OTpcdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OTAtXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZzb2NrX21hcF9pdGVyX3JlZyk7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNjQxPXN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQyLXtcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY0MzpcdHRjcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQ0LVx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dGNwX3JlZ19pbmZvKSlcbi0tXG5uZXQvaXB2NC91ZHAuYz0zOTAwPXN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L2lwdjQvdWRwLmMtMzkwMS17XG5uZXQvaXB2NC91ZHAuYzozOTAyOlx0dWRwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFBdO1xubmV0L2lwdjQvdWRwLmMtMzkwMy1cdGlmIChicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNnVkcF9yZWdfaW5mbykpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM5MzM9c3RhdGljIHZvaWQgX19pbml0IGJwZl9pdGVyX3JlZ2lzdGVyKHZvaWQpXG5uZXQvdW5peC9hZl91bml4LmMtMzkzNC17XG5uZXQvdW5peC9hZl91bml4LmM6MzkzNTpcdHVuaXhfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdO1xubmV0L3VuaXgvYWZfdW5peC5jLTM5MzYtXHRpZiAoYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZ1bml4X3JlZ19pbmZvKSlcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yNjM9TUFYX0JURl9TT0NLX1RZUEUsXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY1LVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjY2OmV4dGVybiB1MzIgYnRmX3NvY2tfaWRzW107XG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yNjctI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjA4CgkJCQkJCQlvdXRwdXQ6IDIzOQoJCQkJCQkJdGhvdWdodHM6IDQ4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTb2NrZXQgTG9jYWwgU3RvcmFnZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBicGZfc2tfc3RvcmFnZS5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBCUEYgaXRlcmF0b3JzIGZvciBzb2NrZXQgbG9jYWwgc3RvcmFnZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0cz8gVGhpcyBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29uY3VycmVudCBvcGVyYXRpb25zIG1lbnRpb25lZC4gYHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSlgIHJldHVybmluZyBOVUxMIGR1cmluZyBhIEJQRiBpdGVyYXRvciBvcGVyYXRpb24gaXMgYSByZWQgZmxhZy4KClRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSByZWxldmFudCBmb3IgZW5hYmxpbmcgdGhlIEJQRiBzeXN0ZW0gY2FsbCBhbmQgbmV0d29ya2luZyBmZWF0dXJlcywgcmVzcGVjdGl2ZWx5LCB3aGljaCBhcmUgcHJlcmVxdWlzaXRlcyBoZXJlLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlybWVkIHRoYXQgdGhleSBhcmUgYWxsIHNwZWNpZmljIHRvIHRoZSBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwIGFuZCBpdHMgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uIFRoZXNlIGluY2x1ZGU6IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHRgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCwgYGJwZl9za19zdG9yYWdlX2ZyZWVgLCBgYnBmX3NrX3N0b3JhZ2VfbG9va3VwYCwgYW5kIGBicGZfc2tfc3RvcmFnZV9kZWxgLiBUaGF0IGxvb2tzIHJpZ2h0LiBHaXZlbiB0aGUgTlVMTCBjaGVjaywgSSBjYW4gc2VlIHRoYXQgYWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBCUEYgaXRlcmF0b3JzIG9uIGBCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRWAgbWFwcy4KCkJlZm9yZSBJIGZpbmFsaXplIG15IHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBhbGwgdGhlIGRldGFpbHMgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQuIE15IGNvbmNsdXNpb25zIGFyZTogVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kIHRoZSByZWFzb25pbmcgaXMgc29saWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgTlVMTCBjaGVjayB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSlgIHJldHVybnMgTlVMTCB3aGVuIGR1bXBpbmcgZWxlbWVudHMgdXNpbmcgQlBGIGl0ZXJhdG9ycyBhbmQsIHdpdGhvdXQgaXQsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS0mZ3Q7b3duZXJgLiBJIHRoaW5rIHRoZSBzeW1ib2xzIEkmIzM5O3ZlIGlkZW50aWZpZWQgY292ZXIgdGhlIGNyaXRpY2FsIGFyZWFzIHRoYXQgbmVlZCB0ZXN0aW5nLiBTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBvbiBgc2tfc3RvcmFnZWAgKGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgKSBhZnRlciBjYWxsaW5nIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSlgIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBza19zdG9yYWdlLVx1MDAzZW93bmVyYC4gXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvaW50ZXIgdmFsaWRpdHkgLyBOVUxMIGRlcmVmZXJlbmNlIGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBwb2ludGVyIHZhbGlkaXR5IGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYnVpbGRzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljM2E3NGM4OWE4ZDVhZTAwNjAxOWExMjY4NzhmMDg4MTRjNzA4OGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoxOTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCmluZGV4IDFkMjk1YTg3NjlmYWQuLjdkMDIyNDVhYTcwNDkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwpAQCAtODA2LDYgJiM0Mzs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAogCQljdHgubWFwID0gaW5mby0mZ3Q7bWFwOwogCQlpZiAoc2VsZW0pIHsKIAkJCXNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tJmd0O2xvY2FsX3N0b3JhZ2UpOwomIzQzOwkJCWlmICghc2tfc3RvcmFnZSkKJiM0MzsJCQkJcmV0dXJuIFNFUV9TS0lQOwogCQkJY3R4LnNrID0gc2tfc3RvcmFnZS0mZ3Q7b3duZXI7CiAJCQljdHgudmFsdWUgPSBTREFUQShzZWxlbSktJmd0O2RhdGE7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBhIEJQRiBTSyBTdG9yYWdlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBBbHJpZ2h0LCBoZXJlJiMzOTtzIHdoYXQgd2UgaGF2ZTogYSBjaGFuZ2UgaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgZm9yIGBza19zdG9yYWdlYCBiZWluZyBOVUxMIHdpdGhpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLiBTcGVjaWZpY2FsbHksIGlmIGBzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZWAgZGVyZWZlcmVuY2VzIHRvIE5VTEwsIGl0IHJldHVybnMgYFNFUV9TS0lQYC4KClRoZSBjb3JlIG9mIG15IGFuYWx5c2lzIGNlbnRlcnMgYXJvdW5kIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBOVUxMIGNoZWNrIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgbGlrZSB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhpcyBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IHVzaW5nIGEgYHJlYWQtZmlsZWAgY29tbWFuZCBvciBgZ3JlcHBlcmAgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNlbGVtLSZndDtsb2NhbF9zdG9yYWdlYCBpcyBwb3B1bGF0ZWQsIHdoYXQgYHNrX3N0b3JhZ2VgIHJlcHJlc2VudHMsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgKmNvdWxkKiBiZSBOVUxMLiBUaGUgYFNFUV9TS0lQYCByZXR1cm4gc3VnZ2VzdHMgdGhpcyBpcyBsaWtlbHkgYSBzZXF1ZW5jZSBmaWxlIG9wZXJhdGlvbiwgYW5kIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBwYXRjaCBhZmZlY3RzIHBvdGVudGlhbCBkYXRhIHJhY2VzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aXRoaW4gdGhhdCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlIHBvdGVudGlhbCBzdGF0ZXMgZXhwb3NlZCByZXF1aXJlIEtNU0FOIHRvIGNoZWNrIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdFx0ICAgICB2b2lkICp2YWx1ZSlcbiA3OTE6XHRcbiA3OTI6XHRzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIDc5MzpcdFx0XHRcdFx0XHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuIDc5NDpcdHtcbiA3OTU6XHRcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuIDc5NjpcdFx0c3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAgY3R4ID0ge307XG4gNzk3Olx0XHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XG4gNzk4Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuIDc5OTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDgwMDpcdFx0aW50IHJldCA9IDA7XG4gODAxOlx0XG4gODAyOlx0XHRtZXRhLnNlcSA9IHNlcTtcbiA4MDM6XHRcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcdTAwMjZtZXRhLCBzZWxlbSA9PSBOVUxMKTtcbiA4MDQ6XHRcdGlmIChwcm9nKSB7XG4gODA1Olx0XHRcdGN0eC5tZXRhID0gXHUwMDI2bWV0YTtcbiA4MDY6XHRcdFx0Y3R4Lm1hcCA9IGluZm8tXHUwMDNlbWFwO1xuIDgwNzpcdFx0XHRpZiAoc2VsZW0pIHtcbiA4MDg6XHRcdFx0XHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpO1xuIDgwOTpcdFx0XHRcdGlmICghc2tfc3RvcmFnZSlcbiA4MTA6XHRcdFx0XHRcdHJldHVybiBTRVFfU0tJUDtcbiA4MTE6XHRcdFx0XHRjdHguc2sgPSBza19zdG9yYWdlLVx1MDAzZW93bmVyO1xuIDgxMjpcdFx0XHRcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cdTAwM2VkYXRhO1xuIDgxMzpcdFx0XHR9XG4gODE0Olx0XHRcdHJldCA9IGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFx1MDAyNmN0eCk7XG4gODE1Olx0XHR9XG4gODE2Olx0XG4gODE3Olx0XHRyZXR1cm4gcmV0O1xuIDgxODpcdH1cbiA4MTk6XHRcbiA4MjA6XHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiA4MjE6XHR7XG4gODIyOlx0XHRyZXR1cm4gX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbiA4MjM6XHR9XG4gODI0Olx0XG4gODI1Olx0c3RhdGljIHZvaWQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDgyNjpcdFx0X19yZWxlYXNlcyhSQ1UpXG4gODI3Olx0e1xuIDgyODpcdFx0aWYgKCF2KVxuIDgyOTpcdFx0XHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xuIDgzMDpcdFx0ZWxzZVxuIDgzMTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4MzI6XHR9XG4gODMzOlx0XG4gODM0Olx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSxcbiA4MzU6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4gODM2Olx0e1xuIDgzNzpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICpzZXFfaW5mbyA9IHByaXZfZGF0YTtcbiA4Mzg6XHRcbiA4Mzk6XHRcdGJwZl9tYXBfaW5jX3dpdGhfdXJlZihhdXgtXHUwMDNlbWFwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxNwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA1NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgUHJldmVudGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YC4gVGhlIGNyaXRpY2FsIGxpbmUgaXMgYHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tJmd0O2xvY2FsX3N0b3JhZ2UpO2AgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIGBjdHguc2sgPSBza19zdG9yYWdlLSZndDtvd25lcjtgLiBXaXRob3V0IGEgY2hlY2ssIGlmIGBza19zdG9yYWdlYCBpcyBOVUxMLCB3ZSYjMzk7cmUgZ29pbmcgdG8gY3Jhc2gsIHBsYWluIGFuZCBzaW1wbGUuCgpUaGlzIHBhdGNoIHNtYXJ0bHkgYWRkcmVzc2VzIHRoYXQgYnkgYWRkaW5nIGFuIGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgIGJlZm9yZSB0aGUgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGxpbmUuIEEgc29saWQgZGVmZW5zaXZlIG1hbmV1dmVyLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UgZm9yIGl0ZXJhdGluZyBvdmVyIG1hcCBlbGVtZW50cyBhbmQgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IHRyeSB0byBhY2Nlc3MgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBkYXRhLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgd2hlcmUgbXkgZXhwZXJ0aXNlIGNvbWVzIGluLCBhbmQgSSBuZWVkIHRvIGJlICpzdXJlKiB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIG5ldyByaXNrcy4gRG9lcyB0aGlzIHBhdGNoOgoKKiAgIFJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55LgoqICAgUGFzcyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlIG9yIGNvbmRpdGlvbmFscz8gTm8sIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBgY3R4YCBpcyB6ZXJvLWluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kLgoqICAgRml4IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlPyBBYnNvbHV0ZWx5LCB0aGF0JiMzOTtzIGl0cyBwcmltYXJ5IGZ1bmN0aW9uLiBXZSYjMzk7cmUgcHJldmVudGluZyBhIGtlcm5lbCBwYW5pYy4KKiAgIFJlcXVpcmUgS01TQU4/IE5vdCBpbiB0aGUgc2xpZ2h0ZXN0LiBUaGUgcHJvYmxlbSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIGRlcmVmZXJlbmNlLCBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZywgcGFnZSBmYXVsdCwgb3IgS0FTQU4sIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4KClRvIGRvdWJsZS1jaGVjayB0aGUgS01TQU4gY3JpdGVyaWEsIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGVtIGluIG15IGhlYWQ6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBoZXJlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aCBjaGVja3MsIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzPyBEZWZpbml0ZWx5IG5vdC4KClRoZSBwYXRjaCYjMzk7cyBnb2FsIGlzIHRvIHByZXZlbnQgYSB2ZXJ5IHNwZWNpZmljIHR5cGUgb2YgY3Jhc2ggYnkgYXZvaWRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLiBJJiMzOTtsbCBhbHNvIGFkZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AsIGZvY3VzaW5nIG9uIHRoZSBOVUxMIGNoZWNrIGFuZCB0aGUgYWJzZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhpcyBpcyBhIGNsZWFuIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpYCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb2ludGVyIHZhbGlkaXR5IC8gTlVMTCBkZXJlZmVyZW5jZSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgcG9pbnRlciB2YWxpZGl0eSBpc3N1ZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGJ1aWxkcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBvbiBgc2tfc3RvcmFnZWAgKGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgKSBhZnRlciBjYWxsaW5nIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSlgIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBza19zdG9yYWdlLVx1MDAzZW93bmVyYC4gXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvaW50ZXIgdmFsaWRpdHkgLyBOVUxMIGRlcmVmZXJlbmNlIGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBwb2ludGVyIHZhbGlkaXR5IGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYnVpbGRzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MTk6NDQuNzMyMzkxODc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1MDc4MzM3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnRcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9mcmVlXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9sb29rdXBcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2RlbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKWAgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KClgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG9pbnRlciB2YWxpZGl0eSAvIE5VTEwgZGVyZWZlcmVuY2UgaXNzdWUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3MuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHBvaW50ZXIgdmFsaWRpdHkgaXNzdWVzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBidWlsZHMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXIgd2hlbiBpdGVyYXRpbmcgb3ZlciBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEYgc29ja2V0IHN0b3JhZ2UgbWFwcyBhbmQgQlBGIGl0ZXJhdG9yIGxpbmtzKSBhbmQgaXMgd29ydGh3aGlsZSB0byBmdXp6IGZvciBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoxOTo0NC43MzIzOTc4MDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDA5NzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDljM2E3NGM4OWE4ZDVhZTAwNjAxOWExMjY4NzhmMDg4MTRjNzA4OGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MTk6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcXG5pbmRleCAxZDI5NWE4NzY5ZmFkLi43ZDAyMjQ1YWE3MDQ5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcXG4rKysgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXFxuQEAgLTgwNiw2ICs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxcbiBcXHRcXHRjdHgubWFwID0gaW5mby1cXHUwMDNlbWFwO1xcbiBcXHRcXHRpZiAoc2VsZW0pIHtcXG4gXFx0XFx0XFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSk7XFxuK1xcdFxcdFxcdGlmICghc2tfc3RvcmFnZSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIFNFUV9TS0lQO1xcbiBcXHRcXHRcXHRjdHguc2sgPSBza19zdG9yYWdlLVxcdTAwM2Vvd25lcjtcXG4gXFx0XFx0XFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVxcdTAwM2VkYXRhO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjE5OjQ1LjI3NzI2NDgwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzIzODc5NTU4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnRcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9mcmVlXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9sb29rdXBcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXIgd2hlbiBpdGVyYXRpbmcgb3ZlciBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEYgc29ja2V0IHN0b3JhZ2UgbWFwcyBhbmQgQlBGIGl0ZXJhdG9yIGxpbmtzKSBhbmQgaXMgd29ydGh3aGlsZSB0byBmdXp6IGZvciBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljM2E3NGM4OWE4ZDVhZTAwNjAxOWExMjY4NzhmMDg4MTRjNzA4OGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoxOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5pbmRleCAxZDI5NWE4NzY5ZmFkLi43ZDAyMjQ1YWE3MDQ5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuKysrIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuQEAgLTgwNiw2ICs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChzZWxlbSkge1xuIFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4rXHRcdFx0aWYgKCFza19zdG9yYWdlKVxuK1x0XHRcdFx0cmV0dXJuIFNFUV9TS0lQO1xuIFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gXHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjE5OjQ1LjI3NzI2NjE2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODgwOTcxMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFNLIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDgwNi4gSSdsbCBwcm9iYWJseSB1c2UgbXkgcHJlZmVycmVkIHRvb2xpbmcsIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3Qgdmlldywgb3IgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcGVydGluZW50IGNvZGUgd2l0aCBzb21lIGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3QuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjAzLjE1ODI0MTEzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdFxcdCAgICAgdm9pZCAqdmFsdWUpXFxuIDc5MTpcXHRcXG4gNzkyOlxcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIDc5MzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiA3OTY6XFx0XFx0c3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAgY3R4ID0ge307XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuIDc5ODpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbiA3OTk6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA4MDA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgwMTpcXHRcXG4gODAyOlxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbiA4MDM6XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCBzZWxlbSA9PSBOVUxMKTtcXG4gODA0OlxcdFxcdGlmIChwcm9nKSB7XFxuIDgwNTpcXHRcXHRcXHRjdHgubWV0YSA9IFxcdTAwMjZtZXRhO1xcbiA4MDY6XFx0XFx0XFx0Y3R4Lm1hcCA9IGluZm8tXFx1MDAzZW1hcDtcXG4gODA3OlxcdFxcdFxcdGlmIChzZWxlbSkge1xcbiA4MDg6XFx0XFx0XFx0XFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSk7XFxuIDgwOTpcXHRcXHRcXHRcXHRpZiAoIXNrX3N0b3JhZ2UpXFxuIDgxMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gU0VRX1NLSVA7XFxuIDgxMTpcXHRcXHRcXHRcXHRjdHguc2sgPSBza19zdG9yYWdlLVxcdTAwM2Vvd25lcjtcXG4gODEyOlxcdFxcdFxcdFxcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cXHUwMDNlZGF0YTtcXG4gODEzOlxcdFxcdFxcdH1cXG4gODE0OlxcdFxcdFxcdHJldCA9IGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFxcdTAwMjZjdHgpO1xcbiA4MTU6XFx0XFx0fVxcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTg6XFx0fVxcbiA4MTk6XFx0XFxuIDgyMDpcXHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gODIxOlxcdHtcXG4gODIyOlxcdFxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbiA4MjM6XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDgyNjpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4gODI3OlxcdHtcXG4gODI4OlxcdFxcdGlmICghdilcXG4gODI5OlxcdFxcdFxcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjAzLjE1ODMyODEzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTY3OTUyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgdGhlIGluY2x1c2lvbiBhbmQgY29tcGlsYXRpb24gb2YgYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgdHJlZSBhbmQgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgdHJpZ2dlciB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGNvbnRyb2xsaW5nIG9iamVjdCBmaWxlIGluY2x1c2lvbiBhbmQgZmVhdHVyZSB0b2dnbGVzLCByZXNwZWN0aXZlbHkuIEknbGwgc2VhcmNoIHNwZWNpZmljYWxseSBmb3IgZWl0aGVyIHRoZSBvYmplY3QgZmlsZSBuYW1lLCBgYnBmX3NrX3N0b3JhZ2Uub2AsIG9yIHRoZSBsaWtlbHkgY29uZmlndXJhdGlvbiBzeW1ib2wsIGBCUEZfU0tfU1RPUkFHRWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IEknbSBsb29raW5nIGZvciBhbmQgbGVhZCBtZSB0byB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDowNS4yNTUxMjY5NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NzM4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX3N0b3JhZ2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDctaWZkZWYgQ09ORklHX0lORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MDUuMzA3MDA2ODY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NTk3OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBJdGVyYXRvcnMgYW5kIHNrX3N0b3JhZ2UgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHJlbGF0ZWQgc2V0dGluZ3MgY29ubmVjdGVkIHRvIEJQRiBpdGVyYXRvcnMsIG9yIHRoZSBtb3JlIHNwZWNpZmljIGBicGZfc2tfc3RvcmFnZWAgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoZSBnZW5lcmFsIGFyZWFzLCBzbyBJIHdhbnQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBJIG1pZ2h0IGJlIG1pc3NpbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcywgSSdsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBjaGFuZ2UgaG93IGBicGZfc2tfc3RvcmFnZWAgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgb2YgbG9va2luZyBmb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyB3aXRoaW4gdGhlIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCBmaWxlIGl0c2VsZi4gVGhhdCdzIHRoZSBmaXJzdCBhbmQgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIGxvb2ssIGdpdmVuIGl0cyBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MDcuNjgyOTg4OTQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodCAoYykgMjAxOSBGYWNlYm9vayAgKi9cXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0LmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmX2lkcy5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9sb2NhbF9zdG9yYWdlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3NvY2tfZGlhZy5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYnRmLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0REVGSU5FX0JQRl9TVE9SQUdFX0NBQ0hFKHNrX2NhY2hlKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0c3RhdGljIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpcXG4gIDIxOlxcdGJwZl9za19zdG9yYWdlX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXAsIGJvb2wgY2FjaGVpdF9sb2NraXQpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuICAyNDpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwO1xcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHRza19zdG9yYWdlID1cXG4gIDI3OlxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIGJwZl9yY3VfbG9ja19oZWxkKCkpO1xcbiAgMjg6XFx0XFx0aWYgKCFza19zdG9yYWdlKVxcbiAgMjk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdHNtYXAgPSAoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqKW1hcDtcXG4gIDMyOlxcdFxcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9sb29rdXAoc2tfc3RvcmFnZSwgc21hcCwgY2FjaGVpdF9sb2NraXQpO1xcbiAgMzM6XFx0fVxcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXApXFxuICAzNjpcXHR7XFxuICAzNzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqc2RhdGE7XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdHNkYXRhID0gYnBmX3NrX3N0b3JhZ2VfbG9va3VwKHNrLCBtYXAsIGZhbHNlKTtcXG4gIDQwOlxcdFxcdGlmICghc2RhdGEpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0cmV0dXJuIGJwZl9zZWxlbV91bmxpbmsoU0VMRU0oc2RhdGEpKTtcXG4gIDQ0OlxcdH1cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0LyogQ2FsbGVkIGJ5IF9fc2tfZGVzdHJ1Y3QoKSBcXHUwMDI2IGJwZl9za19zdG9yYWdlX2Nsb25lKCkgKi9cXG4gIDQ3OlxcdHZvaWQgYnBmX3NrX3N0b3JhZ2VfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuICA0ODpcXHR7XFxuICA0OTpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuICA1MDpcXHRcXHR1MzIgdW5jaGFyZ2U7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHJjdV9yZWFkX2xvY2tfZG9udF9taWdyYXRlKCk7XFxuICA1MzpcXHRcXHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNrLVxcdTAwM2Vza19icGZfc3RvcmFnZSk7XFxuICA1NDpcXHRcXHRpZiAoIXNrX3N0b3JhZ2UpXFxuICA1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0dW5jaGFyZ2UgPSBicGZfbG9jYWxfc3RvcmFnZV9kZXN0cm95KHNrX3N0b3JhZ2UpO1xcbiAgNTg6XFx0XFx0aWYgKHVuY2hhcmdlKVxcbiAgNTk6XFx0XFx0XFx0YXRvbWljX3N1Yih1bmNoYXJnZSwgXFx1MDAyNnNrLVxcdTAwM2Vza19vbWVtX2FsbG9jKTtcXG4gIDYwOlxcdG91dDpcXG4gIDYxOlxcdFxcdHJjdV9yZWFkX3VubG9ja19taWdyYXRlKCk7XFxuICA2MjpcXHR9XFxuICA2MzpcXHRcXG4gIDY0OlxcdHN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRicGZfbG9jYWxfc3RvcmFnZV9tYXBfZnJlZShtYXAsIFxcdTAwMjZza19jYWNoZSk7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3NrX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0cmV0dXJuIGJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvYyhhdHRyLCBcXHUwMDI2c2tfY2FjaGUpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW50IG5vdHN1cHBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gIDc1OlxcdFxcdFxcdFxcdFxcdHZvaWQgKm5leHRfa2V5KVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gIDc4OlxcdH1cXG4gIDc5OlxcdFxcbiAgODA6XFx0c3RhdGljIHZvaWQgKmJwZl9mZF9za19zdG9yYWdlX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gIDgxOlxcdHtcXG4gIDgyOlxcdFxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpzZGF0YTtcXG4gIDgzOlxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuICA4NDpcXHRcXHRpbnQgZmQsIGVycjtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ZmQgPSAqKGludCAqKWtleTtcXG4gIDg3OlxcdFxcdHNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCBcXHUwMDI2ZXJyKTtcXG4gIDg4OlxcdFxcdGlmIChzb2NrKSB7XFxuICA4OTpcXHRcXHRcXHRzZGF0YSA9IGJwZl9za19zdG9yYWdlX2xvb2t1cChzb2NrLVxcdTAwM2VzaywgbWFwLCB0cnVlKTtcXG4gIDkwOlxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuICA5MTpcXHRcXHRcXHRyZXR1cm4gc2RhdGEgPyBzZGF0YS1cXHUwMDNlZGF0YSA6IE5VTEw7XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBsb25nIGJwZl9mZF9za19zdG9yYWdlX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gIDk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxuICA5OTpcXHR7XFxuIDEwMDpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZGF0YSAqc2RhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjA3LjY4MzEwODQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Nzg3Mjg0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgRGVwdGhzIG9mIGBicGZfc2tfc3RvcmFnZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBicGZfc2tfc3RvcmFnZS5jYCwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgODAwLiBUaGUgY29yZSBvZiB0aGlzIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBpdGVyYXRvciBhbmQgbWFwIGxvZ2ljIHRoYXQncyBpbXBsZW1lbnRlZCBoZXJlLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGZsb3csIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGUgc3RvcmFnZSBpcyBoYW5kbGVkIGF0IHRoaXMgbGV2ZWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIHRyYXZlcnNlcyB0aGUgc3RydWN0dXJlcywgZGVhbHMgd2l0aCBrZXlzIGFuZCB2YWx1ZXMsIGFuZCBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgZGF0YSBhY2Nlc3MgYW5kIG1hbmlwdWxhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGl0ZXJhdG9yL21hcCBpbnRlcmFjdGlvbiBpcyBjcml0aWNhbCBmb3IuLi4gd2VsbCwgZm9yICpldmVyeXRoaW5nKiBhdCB0aGlzIHBvaW50LiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZ3JpcCBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MTAuNjYxODQwMzAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTA6XFx0XFx0XFx0c2tpcF9lbGVtcyA9IDA7XFxuIDc1MTpcXHRcXHR9XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdGluZm8tXFx1MDAzZWJ1Y2tldF9pZCA9IGk7XFxuIDc1NDpcXHRcXHRpbmZvLVxcdTAwM2Vza2lwX2VsZW1zID0gMDtcXG4gNzU1OlxcdFxcdHJldHVybiBOVUxMO1xcbiA3NTY6XFx0fVxcbiA3NTc6XFx0XFxuIDc1ODpcXHRzdGF0aWMgdm9pZCAqYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuIDc1OTpcXHR7XFxuIDc2MDpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW07XFxuIDc2MTpcXHRcXG4gNzYyOlxcdFxcdHNlbGVtID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9maW5kX25leHQoc2VxLVxcdTAwM2Vwcml2YXRlLCBOVUxMKTtcXG4gNzYzOlxcdFxcdGlmICghc2VsZW0pXFxuIDc2NDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0aWYgKCpwb3MgPT0gMClcXG4gNzY3OlxcdFxcdFxcdCsrKnBvcztcXG4gNzY4OlxcdFxcdHJldHVybiBzZWxlbTtcXG4gNzY5OlxcdH1cXG4gNzcwOlxcdFxcbiA3NzE6XFx0c3RhdGljIHZvaWQgKmJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdixcXG4gNzcyOlxcdFxcdFxcdFxcdFxcdFxcdCBsb2ZmX3QgKnBvcylcXG4gNzczOlxcdHtcXG4gNzc0OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0KysqcG9zO1xcbiA3Nzc6XFx0XFx0KytpbmZvLVxcdTAwM2Vza2lwX2VsZW1zO1xcbiA3Nzg6XFx0XFx0cmV0dXJuIGJwZl9za19zdG9yYWdlX21hcF9zZXFfZmluZF9uZXh0KHNlcS1cXHUwMDNlcHJpdmF0ZSwgdik7XFxuIDc3OTpcXHR9XFxuIDc4MDpcXHRcXG4gNzgxOlxcdHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwIHtcXG4gNzgyOlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqLCBtZXRhKTtcXG4gNzgzOlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX21hcCAqLCBtYXApO1xcbiA3ODQ6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBzb2NrICosIHNrKTtcXG4gNzg1OlxcdFxcdF9fYnBmX21kX3B0cih2b2lkICosIHZhbHVlKTtcXG4gNzg2OlxcdH07XFxuIDc4NzpcXHRcXG4gNzg4OlxcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9za19zdG9yYWdlX21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuIDc4OTpcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcXG4gNzkwOlxcdFxcdFxcdCAgICAgdm9pZCAqdmFsdWUpXFxuIDc5MTpcXHRcXG4gNzkyOlxcdHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIDc5MzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiA3OTY6XFx0XFx0c3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAgY3R4ID0ge307XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKnNrX3N0b3JhZ2U7XFxuIDc5ODpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbiA3OTk6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA4MDA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgwMTpcXHRcXG4gODAyOlxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbiA4MDM6XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCBzZWxlbSA9PSBOVUxMKTtcXG4gODA0OlxcdFxcdGlmIChwcm9nKSB7XFxuIDgwNTpcXHRcXHRcXHRjdHgubWV0YSA9IFxcdTAwMjZtZXRhO1xcbiA4MDY6XFx0XFx0XFx0Y3R4Lm1hcCA9IGluZm8tXFx1MDAzZW1hcDtcXG4gODA3OlxcdFxcdFxcdGlmIChzZWxlbSkge1xcbiA4MDg6XFx0XFx0XFx0XFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSk7XFxuIDgwOTpcXHRcXHRcXHRcXHRpZiAoIXNrX3N0b3JhZ2UpXFxuIDgxMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gU0VRX1NLSVA7XFxuIDgxMTpcXHRcXHRcXHRcXHRjdHguc2sgPSBza19zdG9yYWdlLVxcdTAwM2Vvd25lcjtcXG4gODEyOlxcdFxcdFxcdFxcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cXHUwMDNlZGF0YTtcXG4gODEzOlxcdFxcdFxcdH1cXG4gODE0OlxcdFxcdFxcdHJldCA9IGJwZl9pdGVyX3J1bl9wcm9nKHByb2csIFxcdTAwMjZjdHgpO1xcbiA4MTU6XFx0XFx0fVxcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTg6XFx0fVxcbiA4MTk6XFx0XFxuIDgyMDpcXHRzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gODIxOlxcdHtcXG4gODIyOlxcdFxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbiA4MjM6XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDgyNjpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4gODI3OlxcdHtcXG4gODI4OlxcdFxcdGlmICghdilcXG4gODI5OlxcdFxcdFxcdCh2b2lkKV9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XFxuIDgzMDpcXHRcXHRlbHNlXFxuIDgzMTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODMyOlxcdH1cXG4gODMzOlxcdFxcbiA4MzQ6XFx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSxcXG4gODM1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbiA4MzY6XFx0e1xcbiA4Mzc6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICpzZXFfaW5mbyA9IHByaXZfZGF0YTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0YnBmX21hcF9pbmNfd2l0aF91cmVmKGF1eC1cXHUwMDNlbWFwKTtcXG4gODQwOlxcdFxcdHNlcV9pbmZvLVxcdTAwM2VtYXAgPSBhdXgtXFx1MDAzZW1hcDtcXG4gODQxOlxcdFxcdHJldHVybiAwO1xcbiA4NDI6XFx0fVxcbiA4NDM6XFx0XFxuIDg0NDpcXHRzdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSlcXG4gODQ1OlxcdHtcXG4gODQ2OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfc2tfc3RvcmFnZV9tYXBfaW5mbyAqc2VxX2luZm8gPSBwcml2X2RhdGE7XFxuIDg0NzpcXHRcXG4gODQ4OlxcdFxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihzZXFfaW5mby1cXHUwMDNlbWFwKTtcXG4gODQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MTAuNjYyMDc3ODMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzI2MTc1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJwZl9za19zdG9yYWdlLmNgIGZvciBSZWdpc3RyYXRpb24gRGV0YWlscyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYtYmFzZWQgc29ja2V0IHN0b3JhZ2UgbWVjaGFuaXNtcyBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgYnV0IG5vdyBpdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHNlZS4uLiB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVzdCBvZiBgYnBmX3NrX3N0b3JhZ2UuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIOKAkyB3aGVyZSBhbmQgaG93IHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHNvY2tldHMgYW5kIHRoZSBzdG9yYWdlIGl0c2VsZi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gYXR0YWNoaW5nIHByb2dyYW1zIHRvIHNwZWNpZmljIHNvY2tldCB0eXBlcywgbWF5YmUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzb2NrIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCBwZXJoYXBzIHNvbWUgbWVjaGFuaXNtcyBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzdG9yYWdlIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBCUEYgcHJvZ3JhbSwgdGhlIHNvY2tldCdzIGRhdGEsIGFuZCB0aGUgc3RvcmFnZSBsYXllci4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIGFuZCBob3BlZnVsbHksIEknbGwgZmluZCB0aGUgc2VjcmV0cyB0aGVyZS4gTGV0J3MgZ2V0IGNyYWNraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDoxNC4xMzQ2OTgzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDU6XFx0e1xcbiA4NDY6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9za19zdG9yYWdlX21hcF9pbmZvICpzZXFfaW5mbyA9IHByaXZfZGF0YTtcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKHNlcV9pbmZvLVxcdTAwM2VtYXApO1xcbiA4NDk6XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHRzdGF0aWMgaW50IGJwZl9pdGVyX2F0dGFjaF9tYXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiA4NTI6XFx0XFx0XFx0XFx0ICAgICAgIHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyAqbGluZm8sXFxuIDg1MzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuIDg1NDpcXHR7XFxuIDg1NTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbiA4NTY6XFx0XFx0aW50IGVyciA9IC1FSU5WQUw7XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmICghbGluZm8tXFx1MDAzZW1hcC5tYXBfZmQpXFxuIDg1OTpcXHRcXHRcXHRyZXR1cm4gLUVCQURGO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRtYXAgPSBicGZfbWFwX2dldF93aXRoX3VyZWYobGluZm8tXFx1MDAzZW1hcC5tYXBfZmQpO1xcbiA4NjI6XFx0XFx0aWYgKElTX0VSUihtYXApKVxcbiA4NjM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWFwKTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1NLX1NUT1JBR0UpXFxuIDg2NjpcXHRcXHRcXHRnb3RvIHB1dF9tYXA7XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1heF9yZHdyX2FjY2VzcyBcXHUwMDNlIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSkge1xcbiA4Njk6XFx0XFx0XFx0ZXJyID0gLUVBQ0NFUztcXG4gODcwOlxcdFxcdFxcdGdvdG8gcHV0X21hcDtcXG4gODcxOlxcdFxcdH1cXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0YXV4LVxcdTAwM2VtYXAgPSBtYXA7XFxuIDg3NDpcXHRcXHRyZXR1cm4gMDtcXG4gODc1OlxcdFxcbiA4NzY6XFx0cHV0X21hcDpcXG4gODc3OlxcdFxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihtYXApO1xcbiA4Nzg6XFx0XFx0cmV0dXJuIGVycjtcXG4gODc5OlxcdH1cXG4gODgwOlxcdFxcbiA4ODE6XFx0c3RhdGljIHZvaWQgYnBmX2l0ZXJfZGV0YWNoX21hcChzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4gODgyOlxcdHtcXG4gODgzOlxcdFxcdGJwZl9tYXBfcHV0X3dpdGhfdXJlZihhdXgtXFx1MDAzZW1hcCk7XFxuIDg4NDpcXHR9XFxuIDg4NTpcXHRcXG4gODg2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuIDg4NzpcXHRcXHQuc3RhcnQgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydCxcXG4gODg4OlxcdFxcdC5uZXh0ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHQsXFxuIDg4OTpcXHRcXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxcbiA4OTA6XFx0XFx0LnNob3cgICA9IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyxcXG4gODkxOlxcdH07XFxuIDg5MjpcXHRcXG4gODkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcXG4gODk0OlxcdFxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXFxuIDg5NTpcXHRcXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcXG4gODk2OlxcdFxcdC5maW5pX3NlcV9wcml2YXRlXFx0PSBicGZfaXRlcl9maW5pX3NrX3N0b3JhZ2VfbWFwLFxcbiA4OTc6XFx0XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8pLFxcbiA4OTg6XFx0fTtcXG4gODk5OlxcdFxcbiA5MDA6XFx0c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xcbiA5MDE6XFx0XFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImJwZl9za19zdG9yYWdlX21hcFxcXCIsXFxuIDkwMjpcXHRcXHQuYXR0YWNoX3RhcmdldFxcdFxcdD0gYnBmX2l0ZXJfYXR0YWNoX21hcCxcXG4gOTAzOlxcdFxcdC5kZXRhY2hfdGFyZ2V0XFx0XFx0PSBicGZfaXRlcl9kZXRhY2hfbWFwLFxcbiA5MDQ6XFx0XFx0LnNob3dfZmRpbmZvXFx0XFx0PSBicGZfaXRlcl9tYXBfc2hvd19mZGluZm8sXFxuIDkwNTpcXHRcXHQuZmlsbF9saW5rX2luZm9cXHRcXHQ9IGJwZl9pdGVyX21hcF9maWxsX2xpbmtfaW5mbyxcXG4gOTA2OlxcdFxcdC5jdHhfYXJnX2luZm9fc2l6ZVxcdD0gMixcXG4gOTA3OlxcdFxcdC5jdHhfYXJnX2luZm9cXHRcXHQ9IHtcXG4gOTA4OlxcdFxcdFxcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfc2tfc3RvcmFnZV9tYXAsIHNrKSxcXG4gOTA5OlxcdFxcdFxcdCAgUFRSX1RPX0JURl9JRF9PUl9OVUxMIH0sXFxuIDkxMDpcXHRcXHRcXHR7IG9mZnNldG9mKHN0cnVjdCBicGZfaXRlcl9fYnBmX3NrX3N0b3JhZ2VfbWFwLCB2YWx1ZSksXFxuIDkxMTpcXHRcXHRcXHQgIFBUUl9UT19CVUYgfCBQVFJfTUFZQkVfTlVMTCB9LFxcbiA5MTI6XFx0XFx0fSxcXG4gOTEzOlxcdFxcdC5zZXFfaW5mb1xcdFxcdD0gXFx1MDAyNml0ZXJfc2VxX2luZm8sXFxuIDkxNDpcXHR9O1xcbiA5MTU6XFx0XFxuIDkxNjpcXHRzdGF0aWMgaW50IF9faW5pdCBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KHZvaWQpXFxuIDkxNzpcXHR7XFxuIDkxODpcXHRcXHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XFxuIDkxOTpcXHRcXHRcXHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcXG4gOTIwOlxcdFxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xcbiA5MjE6XFx0fVxcbiA5MjI6XFx0bGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MTQuMTM0ODIyMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2MTc3ODM1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBCUEYgU29ja2V0IFN0b3JhZ2UgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AgYW5kIHRyeWluZyB0byBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBmb3IgZnV6emluZy4gU3BlY2lmaWNhbGx5LCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjb3VsZCBvY2N1ciBpZiBgc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZWAgaXMgTlVMTCB1bmRlciBSQ1UgKGhhcHBlbnMgd2hlbiB0aGUgc29ja2V0IG9yIHN0b3JhZ2UgZWxlbWVudCBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkpLiBUaGUgZml4IGludHJvZHVjZXMgYSBjaGVjaywgYGlmICghc2tfc3RvcmFnZSkgcmV0dXJuIFNFUV9TS0lQO2AgYmVmb3JlIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIFNpbXBsZSBlbm91Z2guXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhlIEJQRiBzb2NrZXQgc3RvcmFnZSBtYXAgaXRlcmF0aW9uIGlzIGEgY29yZSBCUEYgZmVhdHVyZSwgZXhwb3NlZCB2aWEgYGJwZihCUEZfSVRFUl9DUkVBVEUsIC4uLilgIGFuZCBgYnBmKEJQRl9MSU5LX0NSRUFURSwgLi4uKWAsIGFuZCB0aGVuIHJlYWRpbmcgdGhlIGl0ZXIgZmQgdmlhIGByZWFkKClgIGNhbGxzLCBzZXFfZmlsZSBvcGVyYXRpb25zLiAgV2UgY2FuIHRyaWdnZXIgdGhpcyBieSBjb25jdXJyZW50bHkgY3JlYXRpbmcvZGVsZXRpbmcgc29ja2V0cyBvciB1cGRhdGluZyBzb2NrZXQgc3RvcmFnZSBtYXBzLCB3aGljaCBtZWFucyBzeXprYWxsZXIgY2FuIGFic29sdXRlbHkgaGl0IHRoaXMgd2l0aCBCUEYgc3lzY2FsbCBlbmFibGVkLiBUaGlzIGlzIDEwMCUgcmVhY2hhYmxlIGluIGEgc3l6a2FsbGVyL3VzZXJzcGFjZSBlbnZpcm9ubWVudC5cblxuU28sIGl0J3MgcmVhY2hhYmxlIOKAkyBjaGVjayEgIFdvcnRoRnV6emluZyDigJMgY2hlY2shIE5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzLiAgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSBwYWluLiBCdXQgd2UgbmVlZCB0byBjaGVjayB0aGUgbm9uLXN0YXRpYyBjb3VudGVycGFydHMgYXMgd2VsbCB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZXRoaW5nOiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCwgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0YCwgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX2ZpbmRfbmV4dGAsIGBicGZfaXRlcl9ydW5fcHJvZ2AsIGBicGZfc2tfc3RvcmFnZV9sb29rdXBgLCBgYnBmX3NrX3N0b3JhZ2VfZGVsYCwgYW5kIGBicGZfc2tfc3RvcmFnZV9mcmVlYC4gV2UnbGwgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFyZSBwcmVzZW50IGFzIHN5bWJvbHMgaW4gdGhlIHZtbGludXggaW1hZ2UuIEV2ZW4gaWYgc3RhdGljLCBzeXprYWxsZXLigJlzIGtjb3Yvc3ltYm9sIGZpbHRlcnMgY2FuIGhhbmRsZSB0aGVtIGlmIGNvbXBpbGVkIGludG8gdm1saW51eC4gIFdlIGhhdmUgdG8gY2hlY2sgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG9yIHJlbGF0ZWQgaXRlcmF0b3IgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0byBjb3ZlciBvdXIgYmFzZXMuXG5cbkEgcXVpY2sgY2hlY2sgb2YgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vYCwgc28gQlBGIHN5c2NhbGwgbmVlZHMgdG8gYmUgZW5hYmxlZC4gQW5kIGl0J3MgcHJvYmFibHkgd29ydGggYSBncmVwIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIEtjb25maWcgZGVwZW5kZW5jaWVzIG9yIGNvZGViYXNlIG1lbnRpb25zIG9mIGBicGZfc2tfc3RvcmFnZWAgb3IgYGJwZl9pdGVyX3JlZ190YXJnZXRgLiBMZXQncyBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjI2Ljc1MjYwOTMyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNDkwNzU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTAwPXN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE1LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTE2OnN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNy17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMS19XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MjI6bGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MjguNjU3NTIyNDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjEwNDU5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQnbGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjMwLjc3ODU3MDQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3NDg3MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjMyLjcwNjA2MzA5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTAwNzQxNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQlBGIEtjb25maWcgSW5zcGVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNjb3BlIG91dCBhcm91bmQgbGluZSAyNy4gSXQncyBhIGdlbmVyYWwgYXBwcm9hY2ggd2hlbiBzdGFydGluZyBhbiBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgZXNzZW50aWFsIGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhlIHNwZWNpZmljIGxpbmUgbnVtYmVyIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludDsgaXQncyBsaWtlbHkgYSBmb2NhbCBhcmVhLCBlaXRoZXIgYSBtYWluIHNlY3Rpb24sIG9yIHNvbWV0aGluZyB0aGF0IGJyYW5jaGVzIG91dCBpbnRvIG11bHRpcGxlIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSBpbW1lZGlhdGUgY2x1ZXMgdGhhdCBnaXZlIGFuIGluZGljYXRpb24gb2YgaG93IEJQRiBpcyBlbmFibGVkL2Rpc2FibGVkIG9yIGNvbmZpZ3VyZWQuIFRoaXMgcHJlbGltaW5hcnkgc2NhbiB3aWxsIHByb3ZpZGUgYSByb2FkbWFwIGZvciBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6MzQuNjA2ODA3MDQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcXG4gIDYzOlxcdFxcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxcbiAgNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjM0LjYwNjg3NTY0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDE1NTAyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9yIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRvciBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGBORVRgIGNvbmZpZywgYmVjYXVzZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBpc24ndCBpbmNsdWRlZCB1bmxlc3MgYENPTkZJR19ORVRgIGlzIGV4cGxpY2l0bHkgZW5hYmxlZC4gVGhhdCdzIGEga2V5IGRlcGVuZGVuY3kgdG8ga2VlcCBpbiBtaW5kLiBJIGtub3cgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCBhcmUgcmVsZXZhbnQgaGVyZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgYW5kIHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBJJ20gZXhhbWluaW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSByZXF1aXJlIEJURiwgYEJQRl9QUkVMT0FEYCwgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsICppbiBhZGRpdGlvbiB0byoganVzdCBoYXZpbmcgYEJQRl9TWVNDQUxMYCBlbmFibGVkLCBmb3IgdGhlIEJQRiBpdGVyYXRvcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb2RlIGZsb3cgYW5kIGRlcGVuZGVuY2llcywgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBleGFtaW5lIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIGRpcmVjdGx5IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvcnMuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gaG93IHRoZXNlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjM3LjYyMjM4MTc2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0c3RydWN0IGJwZl9pdGVyX3RhcmdldF9pbmZvIHtcXG4gIDExOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gIDEyOlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgKnJlZ19pbmZvO1xcbiAgMTM6XFx0XFx0dTMyIGJ0Zl9pZDtcXHQvKiBjYWNoZWQgdmFsdWUgKi9cXG4gIDE0OlxcdH07XFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0cnVjdCBicGZfaXRlcl9saW5rIHtcXG4gIDE3OlxcdFxcdHN0cnVjdCBicGZfbGluayBsaW5rO1xcbiAgMTg6XFx0XFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvIGF1eDtcXG4gIDE5OlxcdFxcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3QgYnBmX2l0ZXJfcHJpdl9kYXRhIHtcXG4gIDIzOlxcdFxcdHN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyAqdGluZm87XFxuICAyNDpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gKnNlcV9pbmZvO1xcbiAgMjU6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiAgMjY6XFx0XFx0dTY0IHNlc3Npb25faWQ7XFxuICAyNzpcXHRcXHR1NjQgc2VxX251bTtcXG4gIDI4OlxcdFxcdGJvb2wgZG9uZV9zdG9wO1xcbiAgMjk6XFx0XFx0dTggdGFyZ2V0X3ByaXZhdGVbXSBfX2FsaWduZWQoOCk7XFxuICAzMDpcXHR9O1xcbiAgMzE6XFx0XFxuICAzMjpcXHRzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB0YXJnZXRzID0gTElTVF9IRUFEX0lOSVQodGFyZ2V0cyk7XFxuICAzMzpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHRhcmdldHNfbXV0ZXgpO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBwcm90ZWN0IGJwZl9pdGVyX2xpbmsgY2hhbmdlcyAqL1xcbiAgMzY6XFx0c3RhdGljIERFRklORV9NVVRFWChsaW5rX211dGV4KTtcXG4gIDM3OlxcdFxcbiAgMzg6XFx0LyogaW5jcmVtZW50ZWQgb24gZXZlcnkgb3BlbmVkIHNlcV9maWxlICovXFxuICAzOTpcXHRzdGF0aWMgYXRvbWljNjRfdCBzZXNzaW9uX2lkO1xcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjM3LjYyMjQ5MjAxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjk5NDU0NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9ycyBhbmQgQlRGIEluZm9ybWF0aW9uIGZvciBTb2NrZXQgU3RvcmFnZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBCUEYgaXRlcmF0b3Igc3R1ZmYgd2l0aCBzb2NrZXQgc3RvcmFnZSBpcyB3b3JraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIGBERUJVR19JTkZPX0JURmAgaXMgZW5hYmxlZCwgc28gSSdsbCBwcm9iYWJseSBsb29rIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyB0byBjb25maXJtLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGl0ZXJhdG9yIGl0c2VsZiBpcyBzZXQgdXAuIEknbGwgbmVlZCB0byBsb29rIGludG8gYGJ0Zl9zb2NrX2lkc2AgYW5kIHdoYXRldmVyIHRoZSBCUEYgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIGFyZSBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCBiZWNhdXNlIHRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIEJQRiBzayBzdG9yYWdlIGFuZCBpdGVyYXRvciBzdHVmZiByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXM6XG5cbmBgYGNcbnN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcbntcblx0YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPVxuXHRcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xuXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xufVxubGF0ZV9pbml0Y2FsbChicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9pbml0KTtcbmBgYFxuXG5Pa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBoYXBwZW5pbmcgaW4gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXRgLiAgQW5kIHRoYXQgZnVuY3Rpb24gaXMgcmVmZXJlbmNpbmcgYGJ0Zl9zb2NrX2lkc2Agd2l0aCBgQlRGX1NPQ0tfVFlQRV9TT0NLYC4gVGhhdCBsb29rcyBrZXkuIEkgc2VlIGl0J3MgdXNpbmcgQlRGIElEIGZvciBhIGNvbnRleHQgYXJndW1lbnQuIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm9gIGFzIHdlbGwuIFRoZSBjYWxsIHRvIGBicGZfaXRlcl9yZWdfdGFyZ2V0YCB0ZWxscyBtZSBpdCdzIHJlZ2lzdGVyaW5nIGEgdGFyZ2V0LiBUaGUgYGxhdGVfaW5pdGNhbGxgIG1lYW5zIGl0J3MgaGFwcGVuaW5nIGxhdGVyLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSByZWFkeS5cblxuVWx0aW1hdGVseSwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gYGJ0Zl9zb2NrX2lkc2AgYW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgYXJyYXkgaG9sZHMgYW5kIGhvdyBpdCdzIHBvcHVsYXRlZC4gVGhhdCB3aWxsIHRlbGwgbWUgd2hhdCBzcGVjaWZpYyBCVEYgaW5mb3JtYXRpb24gaXMgYmVpbmcgdXNlZCB0byBjaGFyYWN0ZXJpemUgdGhlc2Ugc29ja2V0IHR5cGVzIGZvciBCUEYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6NDQuOTIxOTQ5NTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgzODc2Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl9zb2NrX2lkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yNjQ9TUFYX0JURl9TT0NLX1RZUEUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yNjYtXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjY3OmV4dGVybiB1MzIgYnRmX3NvY2tfaWRzW107XFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY4LSNlbmRpZlxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9OTQ9dm9pZCBicGZfbHNtX2ZpbmRfY2dyb3VwX3NoaW0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMTA4LVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjEwOTpcXHRpZiAoYXJnc1swXS50eXBlID09IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tFVF0pXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMTEwLVxcdFxcdCpicGZfZnVuYyA9IF9fY2dyb3VwX2JwZl9ydW5fbHNtX3NvY2tldDtcXG5rZXJuZWwvYnBmL2JwZl9sc20uYzoxMTE6XFx0ZWxzZSBpZiAoYXJnc1swXS50eXBlID09IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdKVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTExMi1cXHRcXHQqYnBmX2Z1bmMgPSBfX2Nncm91cF9icGZfcnVuX2xzbV9zb2NrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUwOTY9c3RhdGljIHUzMiAqcmVnMmJ0Zl9pZHNbX19CUEZfUkVHX1RZUEVfTUFYXSA9IHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTA5Ny0jaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDk4OlxcdFtQVFJfVE9fU09DS0VUXSA9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTA5OTpcXHRbUFRSX1RPX1NPQ0tfQ09NTU9OXSA9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLX0NPTU1PTl0sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUxMDA6XFx0W1BUUl9UT19UQ1BfU09DS10gPSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEwMS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBidGZfaWRfc29ja19jb21tb25fdHlwZXMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE1Mi1cXHR9LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTUzOlxcdC5idGZfaWQgPSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTU0LX07XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTQwMz1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X3RyYWNpbmdfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQwOC1cXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NDA5OlxcdC5hcmcyX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQxMC1cXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MTU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjAtXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQyMTpcXHQuYXJnMl9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLX0NPTU1PTl0sXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjItXFx0LmFsbG93ZWRcXHQ9IGJwZl9za19zdG9yYWdlX3RyYWNpbmdfYWxsb3dlZCxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTE2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE4LVxcdGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkxOTpcXHRcXHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMC1cXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTg5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTQ6QlRGX0lEX0xJU1RfR0xPQkFMKGJ0Zl9zb2NrX2lkcywgTUFYX0JURl9TT0NLX1RZUEUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTUtI2RlZmluZSBCVEZfU09DS19UWVBFKG5hbWUsIHR5cGUpIEJURl9JRChzdHJ1Y3QsIHR5cGUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIxMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3A2X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIxNi1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIxNzpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUDZdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjE4LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIyOD1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b190Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjMyLVxcdC5hcmcxX3R5cGVcXHRcXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjMzOlxcdC5yZXRfYnRmX2lkXFx0XFx0PSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVENQXSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzNC19O1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyNTc9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2MS1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2MjpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF9UV10sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjMtfTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjgwPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI4NC1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI4NTpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1RDUF9SRVFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjg2LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMwMT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b191ZHA2X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMwNS1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjMwNjpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VEUDZdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzA3LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMyMT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b191bml4X3NvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMyNS1cXHQuYXJnMV90eXBlXFx0XFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjMyNjpcXHQucmV0X2J0Zl9pZFxcdFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1VOSVhdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzI3LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjMzNT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIzMzktXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19TT0NLX0NPTU1PTixcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjM0MDpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX01QVENQXSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjM0MS19O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xOTg2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9zb2NrbWFwX2l0ZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTg4LVxcdHNvY2tfbWFwX2l0ZXJfcmVnLmN0eF9hcmdfaW5mb1sxXS5idGZfaWQgPVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk4OTpcXHRcXHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OTAtXFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnNvY2tfbWFwX2l0ZXJfcmVnKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzY0MT1zdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NDIte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY0MzpcXHR0Y3BfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NDQtXFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnRjcF9yZWdfaW5mbykpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zOTAwPXN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxcbm5ldC9pcHY0L3VkcC5jLTM5MDEte1xcbm5ldC9pcHY0L3VkcC5jOjM5MDI6XFx0dWRwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFBdO1xcbm5ldC9pcHY0L3VkcC5jLTM5MDMtXFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVkcF9yZWdfaW5mbykpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzkzMz1zdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvdW5peC9hZl91bml4LmMtMzkzNC17XFxubmV0L3VuaXgvYWZfdW5peC5jOjM5MzU6XFx0dW5peF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVU5JWF07XFxubmV0L3VuaXgvYWZfdW5peC5jLTM5MzYtXFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVuaXhfcmVnX2luZm8pKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjYzPU1BWF9CVEZfU09DS19UWVBFLFxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjY1LVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oOjI2NjpleHRlcm4gdTMyIGJ0Zl9zb2NrX2lkc1tdO1xcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTI2Ny0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6NDYuNzA1ODMzNjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4ODExNDIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IExvY2FsIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGJwZl9za19zdG9yYWdlLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIEJQRiBpdGVyYXRvcnMgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KClgLiBNeSBpbml0aWFsIHRob3VnaHRzPyBUaGlzIGxvb2tzIGxpa2UgaXQgY291bGQgYmUgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgbWVudGlvbmVkLiBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2UpYCByZXR1cm5pbmcgTlVMTCBkdXJpbmcgYSBCUEYgaXRlcmF0b3Igb3BlcmF0aW9uIGlzIGEgcmVkIGZsYWcuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gVGhleSdyZSBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciBlbmFibGluZyB0aGUgQlBGIHN5c3RlbSBjYWxsIGFuZCBuZXR3b3JraW5nIGZlYXR1cmVzLCByZXNwZWN0aXZlbHksIHdoaWNoIGFyZSBwcmVyZXF1aXNpdGVzIGhlcmUuXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlybWVkIHRoYXQgdGhleSBhcmUgYWxsIHNwZWNpZmljIHRvIHRoZSBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwIGFuZCBpdHMgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uIFRoZXNlIGluY2x1ZGU6IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydGAsIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX25leHRgLCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCwgYGJwZl9za19zdG9yYWdlX2ZyZWVgLCBgYnBmX3NrX3N0b3JhZ2VfbG9va3VwYCwgYW5kIGBicGZfc2tfc3RvcmFnZV9kZWxgLiBUaGF0IGxvb2tzIHJpZ2h0LiBHaXZlbiB0aGUgTlVMTCBjaGVjaywgSSBjYW4gc2VlIHRoYXQgYWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBCUEYgaXRlcmF0b3JzIG9uIGBCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRWAgbWFwcy5cblxuQmVmb3JlIEkgZmluYWxpemUgbXkgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYCwgSSdsbCBkb3VibGUtY2hlY2sgYWxsIHRoZSBkZXRhaWxzIHRvIGJlIHN1cmUgZXZlcnl0aGluZyBpcyBhbGlnbmVkLiBNeSBjb25jbHVzaW9ucyBhcmU6IFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIE5VTEwgY2hlY2sgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSlgIHJldHVybnMgTlVMTCB3aGVuIGR1bXBpbmcgZWxlbWVudHMgdXNpbmcgQlBGIGl0ZXJhdG9ycyBhbmQsIHdpdGhvdXQgaXQsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIEkgdGhpbmsgdGhlIHN5bWJvbHMgSSd2ZSBpZGVudGlmaWVkIGNvdmVyIHRoZSBjcml0aWNhbCBhcmVhcyB0aGF0IG5lZWQgdGVzdGluZy4gU28sIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MDgsIk91dHB1dFRva2VucyI6MjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjIwOjU3LjU4Njk3ODUwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjM5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd1wiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdGFydFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9uZXh0XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2ZyZWVcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfZGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKSBpbiBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIHRvIGFkZCBhIGNoZWNrIGZvciBOVUxMIHNrX3N0b3JhZ2UgYmVmb3JlIGFjY2Vzc2luZyBza19zdG9yYWdlLVxcdTAwM2Vvd25lciB3aGVuIGl0ZXJhdGluZyBvdmVyIEJQRiBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgKEJQRiBzb2NrZXQgc3RvcmFnZSBtYXBzIGFuZCBCUEYgaXRlcmF0b3IgbGlua3MpIGFuZCBpcyB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIGNvbmN1cnJlbmN5IGFuZCByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RhcnRcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfbmV4dFwiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9mcmVlXCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9sb29rdXBcIixcbiAgICBcImJwZl9za19zdG9yYWdlX2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KCkgaW4gbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyB0byBhZGQgYSBjaGVjayBmb3IgTlVMTCBza19zdG9yYWdlIGJlZm9yZSBhY2Nlc3Npbmcgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXIgd2hlbiBpdGVyYXRpbmcgb3ZlciBCUEYgc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEYgc29ja2V0IHN0b3JhZ2UgbWFwcyBhbmQgQlBGIGl0ZXJhdG9yIGxpbmtzKSBhbmQgaXMgd29ydGh3aGlsZSB0byBmdXp6IGZvciBjb25jdXJyZW5jeSBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDo1Ny42NjUyMjQ5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NzQ5OTAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMDo1Ny42NjU3NjU5MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNTc0NDQ0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBvbiBgc2tfc3RvcmFnZWAgKGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiBTRVFfU0tJUDtgKSBhZnRlciBjYWxsaW5nIGByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXFx1MDAzZWxvY2FsX3N0b3JhZ2UpYCBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coKWAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXJgLiBcXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb2ludGVyIHZhbGlkaXR5IC8gTlVMTCBkZXJlZmVyZW5jZSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgcG9pbnRlciB2YWxpZGl0eSBpc3N1ZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGJ1aWxkcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWMzYTc0Yzg5YThkNWFlMDA2MDE5YTEyNjg3OGYwODgxNGM3MDg4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjE5OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjdkMDIyNDVhYTcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG4rKysgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5AQCAtODA2LDYgKzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKHNlbGVtKSB7XG4gXHRcdFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtcbitcdFx0XHRpZiAoIXNrX3N0b3JhZ2UpXG4rXHRcdFx0XHRyZXR1cm4gU0VRX1NLSVA7XG4gXHRcdFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtcbiBcdFx0XHRjdHgudmFsdWUgPSBTREFUQShzZWxlbSktXHUwMDNlZGF0YTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjA6NTcuNjY1NzY2NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY3ODM0MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGEgQlBGIFNLIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBBbHJpZ2h0LCBoZXJlJ3Mgd2hhdCB3ZSBoYXZlOiBhIGNoYW5nZSBpbiBgbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIGNoZWNrIGZvciBgc2tfc3RvcmFnZWAgYmVpbmcgTlVMTCB3aXRoaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YC4gU3BlY2lmaWNhbGx5LCBpZiBgc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZWAgZGVyZWZlcmVuY2VzIHRvIE5VTEwsIGl0IHJldHVybnMgYFNFUV9TS0lQYC5cblxuVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgY2VudGVycyBhcm91bmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IE5VTEwgY2hlY2sgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdkIGxpa2UgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoaXMgY29kZSwgc28gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IHVzaW5nIGEgYHJlYWQtZmlsZWAgY29tbWFuZCBvciBgZ3JlcHBlcmAgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2VgIGlzIHBvcHVsYXRlZCwgd2hhdCBgc2tfc3RvcmFnZWAgcmVwcmVzZW50cywgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCAqY291bGQqIGJlIE5VTEwuIFRoZSBgU0VRX1NLSVBgIHJldHVybiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIHNlcXVlbmNlIGZpbGUgb3BlcmF0aW9uLCBhbmQgSSdkIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgcGF0Y2ggYWZmZWN0cyBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBwb3RlbnRpYWwgc3RhdGVzIGV4cG9zZWQgcmVxdWlyZSBLTVNBTiB0byBjaGVjayB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMTowMy4zNDQxMTA2MDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTA6XFx0XFx0XFx0ICAgICB2b2lkICp2YWx1ZSlcXG4gNzkxOlxcdFxcbiA3OTI6XFx0c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4gNzkzOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxuIDc5NDpcXHR7XFxuIDc5NTpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDc5NjpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9za19zdG9yYWdlX21hcCBjdHggPSB7fTtcXG4gNzk3OlxcdFxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqc2tfc3RvcmFnZTtcXG4gNzk4OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XFxuIDc5OTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIDgwMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0bWV0YS5zZXEgPSBzZXE7XFxuIDgwMzpcXHRcXHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXFx1MDAyNm1ldGEsIHNlbGVtID09IE5VTEwpO1xcbiA4MDQ6XFx0XFx0aWYgKHByb2cpIHtcXG4gODA1OlxcdFxcdFxcdGN0eC5tZXRhID0gXFx1MDAyNm1ldGE7XFxuIDgwNjpcXHRcXHRcXHRjdHgubWFwID0gaW5mby1cXHUwMDNlbWFwO1xcbiA4MDc6XFx0XFx0XFx0aWYgKHNlbGVtKSB7XFxuIDgwODpcXHRcXHRcXHRcXHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKTtcXG4gODA5OlxcdFxcdFxcdFxcdGlmICghc2tfc3RvcmFnZSlcXG4gODEwOlxcdFxcdFxcdFxcdFxcdHJldHVybiBTRVFfU0tJUDtcXG4gODExOlxcdFxcdFxcdFxcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyO1xcbiA4MTI6XFx0XFx0XFx0XFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVxcdTAwM2VkYXRhO1xcbiA4MTM6XFx0XFx0XFx0fVxcbiA4MTQ6XFx0XFx0XFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXFx1MDAyNmN0eCk7XFxuIDgxNTpcXHRcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdHJldHVybiByZXQ7XFxuIDgxODpcXHR9XFxuIDgxOTpcXHRcXG4gODIwOlxcdHN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiA4MjE6XFx0e1xcbiA4MjI6XFx0XFx0cmV0dXJuIF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHNlcSwgdik7XFxuIDgyMzpcXHR9XFxuIDgyNDpcXHRcXG4gODI1OlxcdHN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4gODI2OlxcdFxcdF9fcmVsZWFzZXMoUkNVKVxcbiA4Mjc6XFx0e1xcbiA4Mjg6XFx0XFx0aWYgKCF2KVxcbiA4Mjk6XFx0XFx0XFx0KHZvaWQpX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcXG4gODMwOlxcdFxcdGVsc2VcXG4gODMxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4MzI6XFx0fVxcbiA4MzM6XFx0XFxuIDgzNDpcXHRzdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAodm9pZCAqcHJpdl9kYXRhLFxcbiA4MzU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuIDgzNjpcXHR7XFxuIDgzNzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX3NrX3N0b3JhZ2VfbWFwX2luZm8gKnNlcV9pbmZvID0gcHJpdl9kYXRhO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRicGZfbWFwX2luY193aXRoX3VyZWYoYXV4LVxcdTAwM2VtYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMTowMy4zNDQyMDMxOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5NTk4Njg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBQcmV2ZW50aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLiBUaGUgY3JpdGljYWwgbGluZSBpcyBgc2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtgIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBgY3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtgLiBXaXRob3V0IGEgY2hlY2ssIGlmIGBza19zdG9yYWdlYCBpcyBOVUxMLCB3ZSdyZSBnb2luZyB0byBjcmFzaCwgcGxhaW4gYW5kIHNpbXBsZS5cblxuVGhpcyBwYXRjaCBzbWFydGx5IGFkZHJlc3NlcyB0aGF0IGJ5IGFkZGluZyBhbiBgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCBiZWZvcmUgdGhlIHBvdGVudGlhbGx5IGRhbmdlcm91cyBsaW5lLiBBIHNvbGlkIGRlZmVuc2l2ZSBtYW5ldXZlci4gVGhpcyBpcyBnb29kIHByYWN0aWNlIGZvciBpdGVyYXRpbmcgb3ZlciBtYXAgZWxlbWVudHMgYW5kIGVuc3VyaW5nIHdlIGRvbid0IHRyeSB0byBhY2Nlc3MgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHdoZXJlIG15IGV4cGVydGlzZSBjb21lcyBpbiwgYW5kIEkgbmVlZCB0byBiZSAqc3VyZSogd2UgYXJlbid0IGludHJvZHVjaW5nIG5ldyByaXNrcy4gRG9lcyB0aGlzIHBhdGNoOlxuXG4qICAgUmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEknbSBub3Qgc2VlaW5nIGFueS5cbiogICBQYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2Ugb3IgY29uZGl0aW9uYWxzPyBObywgYW5kIHRoYXQncyBjcml0aWNhbC4gYGN0eGAgaXMgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgZ29vZC5cbiogICBGaXggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2U/IEFic29sdXRlbHksIHRoYXQncyBpdHMgcHJpbWFyeSBmdW5jdGlvbi4gV2UncmUgcHJldmVudGluZyBhIGtlcm5lbCBwYW5pYy5cbiogICBSZXF1aXJlIEtNU0FOPyBOb3QgaW4gdGhlIHNsaWdodGVzdC4gVGhlIHByb2JsZW0gaXMgYSBzdHJhaWdodGZvcndhcmQgTlVMTCBkZXJlZmVyZW5jZSwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcsIHBhZ2UgZmF1bHQsIG9yIEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG5cblRvIGRvdWJsZS1jaGVjayB0aGUgS01TQU4gY3JpdGVyaWEsIEknbSBnb2luZyB0aHJvdWdoIHRoZW0gaW4gbXkgaGVhZDpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLCBub3QgaGVyZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGggY2hlY2tzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzcz8gRGVmaW5pdGVseSBub3QuXG5cblRoZSBwYXRjaCdzIGdvYWwgaXMgdG8gcHJldmVudCBhIHZlcnkgc3BlY2lmaWMgdHlwZSBvZiBjcmFzaCBieSBhdm9pZGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4gSSdsbCBhbHNvIGFkZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHdoZW4gSSBjYWxsIGBzZXQtcmVzdWx0c2AsIGZvY3VzaW5nIG9uIHRoZSBOVUxMIGNoZWNrIGFuZCB0aGUgYWJzZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhpcyBpcyBhIGNsZWFuIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNywiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyMToxMC4yNDAxOTI0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgb24gYHNrX3N0b3JhZ2VgIChgaWYgKCFza19zdG9yYWdlKSByZXR1cm4gU0VRX1NLSVA7YCkgYWZ0ZXIgY2FsbGluZyBgcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKWAgaW4gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KClgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG9pbnRlciB2YWxpZGl0eSAvIE5VTEwgZGVyZWZlcmVuY2UgaXNzdWUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3MuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHBvaW50ZXIgdmFsaWRpdHkgaXNzdWVzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBidWlsZHMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIG9uIGBza19zdG9yYWdlYCAoYGlmICghc2tfc3RvcmFnZSkgcmV0dXJuIFNFUV9TS0lQO2ApIGFmdGVyIGNhbGxpbmcgYHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cXHUwMDNlbG9jYWxfc3RvcmFnZSlgIGluIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdygpYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBza19zdG9yYWdlLVxcdTAwM2Vvd25lcmAuIFxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvaW50ZXIgdmFsaWRpdHkgLyBOVUxMIGRlcmVmZXJlbmNlIGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBwb2ludGVyIHZhbGlkaXR5IGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYnVpbGRzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgzjch[1] Phase: Succeeded StartedAt: 2026-09-11 14:21:20 +0000 UTC FinishedAt: 2026-09-11 14:21:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 14:21:20 +0000 UTC FinishedAt: 2026-09-11 14:21:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2] Phase: Succeeded StartedAt: 2026-09-11 14:21:20 +0000 UTC FinishedAt: 2026-09-11 18:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 14:21:20 +0000 UTC FinishedAt: 2026-09-11 18:00:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 14:21:20 +0000 UTC FinishedAt: 2026-09-11 14:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 14:21:20 +0000 UTC FinishedAt: 2026-09-11 14:21:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowgzjch/series-workflowgzjch-convert-artifact-3677318162/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 14:21:30 +0000 UTC FinishedAt: 2026-09-11 14:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 14:21:30 +0000 UTC FinishedAt: 2026-09-11 14:37:37 +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:*ad4aa2a5-a5d5-4353-a76b-1adaebfc7f0b,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-workflowgzjch/series-workflowgzjch-convert-artifact-3677318162/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": "c2979b30-dbdc-4b31-a513-488716db7b7a", "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-workflowgzjch/series-workflowgzjch-build-action-1800007056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 14:21:30 +0000 UTC FinishedAt: 2026-09-11 14:37:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ad4aa2a5-a5d5-4353-a76b-1adaebfc7f0b,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-workflowgzjch/series-workflowgzjch-convert-artifact-3677318162/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": "c2979b30-dbdc-4b31-a513-488716db7b7a", "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-workflowgzjch/series-workflowgzjch-build-action-1800007056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 14:37:37 +0000 UTC FinishedAt: 2026-09-11 14:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 14:37:37 +0000 UTC FinishedAt: 2026-09-11 14:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 14:37:37 +0000 UTC FinishedAt: 2026-09-11 14:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 14:37:37 +0000 UTC FinishedAt: 2026-09-11 14:37:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowgzjch/series-workflowgzjch-convert-artifact-2120257581/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 14:37:47 +0000 UTC FinishedAt: 2026-09-11 14:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 14:37:47 +0000 UTC FinishedAt: 2026-09-11 14:39:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c2979b30-dbdc-4b31-a513-488716db7b7a,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-workflowgzjch/series-workflowgzjch-build-action-1800007056/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-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 14:39:35 +0000 UTC FinishedAt: 2026-09-11 14:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 14:39:35 +0000 UTC FinishedAt: 2026-09-11 14:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 14:39:35 +0000 UTC FinishedAt: 2026-09-11 14:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 14:39:35 +0000 UTC FinishedAt: 2026-09-11 14:56:21 +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:*ad4aa2a5-a5d5-4353-a76b-1adaebfc7f0b,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-workflowgzjch/series-workflowgzjch-convert-artifact-2120257581/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": "229a15ba-5661-43b6-8125-adc9e487fd56", "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-workflowgzjch/series-workflowgzjch-build-action-1873073289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 14:39:35 +0000 UTC FinishedAt: 2026-09-11 14:56:11 +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:*ad4aa2a5-a5d5-4353-a76b-1adaebfc7f0b,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-workflowgzjch/series-workflowgzjch-convert-artifact-2120257581/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": "229a15ba-5661-43b6-8125-adc9e487fd56", "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-workflowgzjch/series-workflowgzjch-build-action-1873073289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 14:56:21 +0000 UTC FinishedAt: 2026-09-11 14:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 14:56:21 +0000 UTC FinishedAt: 2026-09-11 14:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 14:56:21 +0000 UTC FinishedAt: 2026-09-11 14:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 14:56:21 +0000 UTC FinishedAt: 2026-09-11 14:58:13 +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:*229a15ba-5661-43b6-8125-adc9e487fd56,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-workflowgzjch/series-workflowgzjch-build-action-1873073289/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-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 18:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 18:00:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"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:*c2979b30-dbdc-4b31-a513-488716db7b7a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*229a15ba-5661-43b6-8125-adc9e487fd56,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-workflowgzjch/series-workflowgzjch-build-action-1800007056/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-workflowgzjch/series-workflowgzjch-build-action-1873073289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 14:58:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 14:58:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"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-workflowgzjch/series-workflowgzjch-convert-artifact-327025298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 14:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 14:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 14:58:23 +0000 UTC FinishedAt: 2026-09-11 14:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 14:58:33 +0000 UTC FinishedAt: 2026-09-11 18:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgzjch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_start","bpf_sk_storage_map_seq_next","bpf_sk_storage_map_seq_stop","bpf_sk_storage_free","bpf_sk_storage_lookup","bpf_sk_storage_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"30aa457b-4b74-4e8b-92fb-80a98bea0b48","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 14:58:33 +0000 UTC FinishedAt: 2026-09-11 17:59:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c2979b30-dbdc-4b31-a513-488716db7b7a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*229a15ba-5661-43b6-8125-adc9e487fd56,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-workflowgzjch/series-workflowgzjch-build-action-1800007056/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-workflowgzjch/series-workflowgzjch-build-action-1873073289/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-workflowgzjch/series-workflowgzjch-convert-artifact-327025298/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,}