Name: series-workflow64wf7 Phase: Succeeded StartedAt: 2026-09-11 17:46:58 +0000 UTC FinishedAt: 2026-09-11 21:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[0] Phase: Succeeded StartedAt: 2026-09-11 17:46:58 +0000 UTC FinishedAt: 2026-09-11 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 17:46:58 +0000 UTC FinishedAt: 2026-09-11 18:15:08 +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": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SCHED", "NET_CLS_ACT", "NET_CLS_BPF", "SYN_COOKIES", "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SCHED", "NET_CLS_ACT", "NET_CLS_BPF", "SYN_COOKIES", "INET", "IPV6" ], "series_id": "3281e16c-9cc4-48f5-9b00-2e60a0be7cd4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_assign_family_ok", "bpf_sk_assign", "bpf_skb_change_proto", "bpf_sk_assign_tcp_reqsk" ], "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": "", "base_commit": "df2908090cda368b01ff43709f51890076c56157", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtTWU5fQ09PS0lFUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfYXNzaWduX2ZhbWlseV9vayYjMzQ7LAogICAgJiMzNDticGZfc2tfYXNzaWduJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3Byb3RvJiMzNDssCiAgICAmIzM0O2JwZl9za19hc3NpZ25fdGNwX3JlcXNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0JiMzOTtzIGFkZHJlc3MgZmFtaWx5IGluY29tcGF0aWJsZS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cdTAwM2Vwcm90b2NvbGAsIGBzay1cdTAwM2Vza19mYW1pbHlgLCBgc2stXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXG4yLiBJbmZvLWxlYWtzOiBObyBkYXRhIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChicGZfc2tfYXNzaWduX2ZhbWlseV9vaykgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50IGhlbHBlcnMgKGJwZl9za19hc3NpZ24sIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKSBhbmQgZHJvcHMgcHJlZmV0Y2hlZCBzb2NrZXQgYXNzaWdubWVudHMgZHVyaW5nIHByb3RvY29sIHRyYW5zbGF0aW9uIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIFRDUCBTWU5fUkVDViByZXF1ZXN0IHNvY2tzLCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMsIGFuZCBMMyBwcm90b2NvbCB0cmFuc2xhdGlvbiwgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYzkwNTkwNzI2YjA2M2QwMDI0ZTkyYzVlODc1ZGUxYzAwODFkZmQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTg6MTA6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi4wZGU3OTY3MDc3YTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yNjU5LDYgJiM0MzsyNjU5LDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKiBcdFx0Y2hlY2tlZCBhbmQgc2VnbWVudHMgYXJlIHJlY2FsY3VsYXRlZCBieSB0aGUgR1NPL0dSTyBlbmdpbmUuXG4gICogXHRcdFRoZSBzaXplIGZvciBHU08gdGFyZ2V0IGlzIGFkYXB0ZWQgYXMgd2VsbC5cbiAgKlxuJiM0MzsgKlx0XHRPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3NcbiYjNDM7ICpcdFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXG4mIzQzOyAqXHRcdGNvbXBhdGlibGUgc29ja2V0IGFmdGVyIHRyYW5zbGF0aW9uIGlmIHJlcXVpcmVkLlxuJiM0MzsgKlxuICAqIFx0XHRBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdFxuICAqIFx0XHRiZSBsZWZ0IGF0IHplcm8uXG4gICpcbkBAIC00NTY4LDYgJiM0Mzs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxuICAqXHRcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cbiAgKlxuJiM0MzsgKlx0XHQqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoXG4mIzQzOyAqXHRcdHRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqXG4mIzQzOyAqXHRcdHNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuXG4mIzQzOyAqXG4gICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylcbiAgKlx0RGVzY3JpcHRpb25cbiAgKlx0XHRIZWxwZXIgaXMgb3ZlcmxvYWRlZCBkZXBlbmRpbmcgb24gQlBGIHByb2dyYW0gdHlwZS4gVGhpc1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjc5YTBlNDg0ZDlkZDQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0zNDkxLDYgJiM0MzszNDkxLDMyIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bylcbiBcdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4mIzQzO1x0XHRmYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiYjNDM7XHRcdGZhbWlseSA9IEFGX0lORVQ2O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdHMgaW5oZXJpdCB0aGUgbGlzdGVuZXIgZmFtaWx5LCBidXQgaGF2ZSBmYW1pbHktc3BlY2lmaWMgb3BzLiAqL1xuJiM0MztcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuJiM0MztcdFx0cmV0dXJuIGluZXRfcmVxc2soc2spLVx1MDAzZXJza19vcHMtXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcbiYjNDM7XHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0c2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0IWlwdjZfb25seV9zb2NrKHNrKSk7XG4mIzQzO31cbiYjNDM7XG4gQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxuIFx0ICAgdTY0LCBmbGFncylcbiB7XG5AQCAtMzUyMSw2ICYjNDM7MzU0NywxMSBAQCBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4mIzQzO1x0aWYgKHNrYl9za19pc19wcmVmZXRjaGVkKHNrYikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrYi1cdTAwM2VzaykpXG4mIzQzO1x0XHRza2Jfb3JwaGFuKHNrYik7XG4mIzQzO1xuIFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gXG5AQCAtNzk4OSw2ICYjNDM7ODAyMCw4IEBAIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbiBcdGlmIChza191bmhhc2hlZChzaykpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuJiM0MztcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gXHRpZiAoc2tfaXNfcmVmY291bnRlZChzaykgXHUwMDI2XHUwMDI2XG4gXHQgICAgdW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMTI1MjYsNiAmIzQzOzEyNTU5LDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbiBcdGlmIChuZXQgIT0gc29ja19uZXQoc2spKVxuIFx0XHRyZXR1cm4gLUVORVRVTlJFQUNIO1xuIFxuJiM0MztcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XG4gXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gXHRcdG9wcyA9IFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggNzMyYjM1Y2MwOGQxYy4uMGRlNzk2NzA3N2EyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMjY1OSw2ICYjNDM7MjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxuICAqIFx0XHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXG4gICpcbiYjNDM7ICpcdFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXG4mIzQzOyAqXHRcdGZhbWlseSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHByb3RvY29sLiBBc3NpZ24gYVxuJiM0MzsgKlx0XHRjb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC5cbiYjNDM7ICpcbiAgKiBcdFx0QWxsIHZhbHVlcyBmb3IgKmZsYWdzKiBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZSwgYW5kIG11c3RcbiAgKiBcdFx0YmUgbGVmdCBhdCB6ZXJvLlxuICAqXG5AQCAtNDU2OCw2ICYjNDM7NDU3MiwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcdFx0KiotRU9QTk9UU1VQUCoqIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGVcbiAgKlx0XHRhIGNhbGwgZnJvbSBvdXRzaWRlIG9mIFRDIGluZ3Jlc3MuXG4gICpcbiYjNDM7ICpcdFx0KiotRUFGTk9TVVBQT1JUKiogaWYgdGhlIHNvY2tldCBmYW1pbHkgaXMgbm90IGNvbXBhdGlibGUgd2l0aFxuJiM0MzsgKlx0XHR0aGUgbmV0d29yayBsYXllciBvZiB0aGUgcGFja2V0LCBmb3IgZXhhbXBsZSBhbiAqKkFGX0lORVQqKlxuJiM0MzsgKlx0XHRzb2NrZXQgYW5kIGFuIElQdjYgcGFja2V0LlxuJiM0MzsgKlxuICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gICpcdERlc2NyaXB0aW9uXG4gICpcdFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7U1lOX0NPT0tJRVMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2smIzM0OywKICAgICYjMzQ7YnBmX3NrX2Fzc2lnbiYjMzQ7LAogICAgJiMzNDticGZfc2tiX2NoYW5nZV9wcm90byYjMzQ7LAogICAgJiMzNDticGZfc2tfYXNzaWduX3RjcF9yZXFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChicGZfc2tfYXNzaWduX2ZhbWlseV9vaykgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50IGhlbHBlcnMgKGJwZl9za19hc3NpZ24sIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKSBhbmQgZHJvcHMgcHJlZmV0Y2hlZCBzb2NrZXQgYXNzaWdubWVudHMgZHVyaW5nIHByb3RvY29sIHRyYW5zbGF0aW9uIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIFRDUCBTWU5fUkVDViByZXF1ZXN0IHNvY2tzLCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMsIGFuZCBMMyBwcm90b2NvbCB0cmFuc2xhdGlvbiwgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzkwNTkwNzI2YjA2M2QwMDI0ZTkyYzVlODc1ZGUxYzAwODFkZmQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTg6MTA6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uMGRlNzk2NzA3N2EyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjY1OSw2ICYjNDM7MjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCWNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLgogICogCQlUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuCiAgKgomIzQzOyAqCQlPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3MKJiM0MzsgKgkJZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhCiYjNDM7ICoJCWNvbXBhdGlibGUgc29ja2V0IGFmdGVyIHRyYW5zbGF0aW9uIGlmIHJlcXVpcmVkLgomIzQzOyAqCiAgKiAJCUFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0CiAgKiAJCWJlIGxlZnQgYXQgemVyby4KICAqCkBAIC00NTY4LDYgJiM0Mzs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZQogICoJCWEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy4KICAqCiYjNDM7ICoJCSoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGgKJiM0MzsgKgkJdGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKioKJiM0MzsgKgkJc29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC4KJiM0MzsgKgogICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncykKICAqCURlc2NyaXB0aW9uCiAgKgkJSGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXMKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uNzlhMGU0ODRkOWRkNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM0OTEsNiAmIzQzOzM0OTEsMzIgQEAgc3RhdGljIGludCBicGZfc2tiX3Byb3RvX3hsYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHRvX3Byb3RvKQogCXJldHVybiAtRU5PVFNVUFA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgc2hvcnQgZmFtaWx5OwomIzQzOwomIzQzOwlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiYjNDM7CQlmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiYjNDM7CQlmYW1pbHkgPSBBRl9JTkVUNjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVxdWVzdHMgaW5oZXJpdCB0aGUgbGlzdGVuZXIgZmFtaWx5LCBidXQgaGF2ZSBmYW1pbHktc3BlY2lmaWMgb3BzLiAqLwomIzQzOwlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpCiYjNDM7CQlyZXR1cm4gaW5ldF9yZXFzayhzayktJmd0O3Jza19vcHMtJmd0O2ZhbWlseSA9PSBmYW1pbHk7CiYjNDM7CiYjNDM7CXJldHVybiBzay0mZ3Q7c2tfZmFtaWx5ID09IGZhbWlseSB8fAomIzQzOwkgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUICZhbXA7JmFtcDsKJiM0MzsJCXNrLSZndDtza19mYW1pbHkgPT0gQUZfSU5FVDYgJmFtcDsmYW1wOwomIzQzOwkJIWlwdjZfb25seV9zb2NrKHNrKSk7CiYjNDM7fQomIzQzOwogQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLAogCSAgIHU2NCwgZmxhZ3MpCiB7CkBAIC0zNTIxLDYgJiM0MzszNTQ3LDExIEBAIEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90bywKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiYjNDM7CS8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovCiYjNDM7CWlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpICZhbXA7JmFtcDsKJiM0MzsJICAgICFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrYi0mZ3Q7c2spKQomIzQzOwkJc2tiX29ycGhhbihza2IpOwomIzQzOwogCWlmIChza2JfdmFsaWRfZHN0KHNrYikpCiAJCXNrYl9kc3RfZHJvcChza2IpOwogCkBAIC03OTg5LDYgJiM0Mzs4MDIwLDggQEAgQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwogCWlmIChza191bmhhc2hlZChzaykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJaWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSkKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCWlmIChza19pc19yZWZjb3VudGVkKHNrKSAmYW1wOyZhbXA7CiAJICAgIHVubGlrZWx5KCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzay0mZ3Q7c2tfcmVmY250KSkpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTI1MjYsNiAmIzQzOzEyNTU5LDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzaywKIAlpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSkKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAomIzQzOwlpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKQomIzQzOwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7CiAJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCW9wcyA9ICZhbXA7dGNwX3JlcXVlc3Rfc29ja19vcHM7CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uMGRlNzk2NzA3N2EyZSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjY1OSw2ICYjNDM7MjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCWNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLgogICogCQlUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuCiAgKgomIzQzOyAqCQlPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3MKJiM0MzsgKgkJZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhCiYjNDM7ICoJCWNvbXBhdGlibGUgc29ja2V0IGFmdGVyIHRyYW5zbGF0aW9uIGlmIHJlcXVpcmVkLgomIzQzOyAqCiAgKiAJCUFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0CiAgKiAJCWJlIGxlZnQgYXQgemVyby4KICAqCkBAIC00NTY4LDYgJiM0Mzs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZQogICoJCWEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy4KICAqCiYjNDM7ICoJCSoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGgKJiM0MzsgKgkJdGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKioKJiM0MzsgKgkJc29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC4KJiM0MzsgKgogICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncykKICAqCURlc2NyaXB0aW9uCiAgKgkJSGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIGEgTGludXggS2VybmVsIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEga2VybmVsIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgbmVlZHMgYSBmdXp6aW5nIGFzc2Vzc21lbnQgZm9yIHN5emthbGxlci4gVGhlIHVzZXIgaXMgYXNraW5nIGZvciBteSBleHBlcnQgb3BpbmlvbiBvbiBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE5vIGZ1bmN0aW9uYWwgZXhwbG9pdCBjb2RlIGlzIGJlaW5nIHJlcXVlc3RlZCwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIHF1YWxpdHkgYXNzdXJhbmNlIGFuZCBkZWZlbnNpdmUgc2VjdXJpdHkgdGVzdGluZy4gVGhpcyBpcyBhIGxvdy1zZXZlcml0eSB0YXNrLCBmb2N1c2luZyBvbiBldmFsdWF0aW5nIHRoZSBwYXRjaCYjMzk7cyB2YWx1ZSBmb3IgZnV6emluZyBhbmQgaWRlbnRpZnlpbmcgaW1wb3J0YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggdG91Y2hlcyBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCwgYm90aCB0aGUga2VybmVsIGFuZCB0b29scyB2ZXJzaW9ucywgYW5kLCBpbXBvcnRhbnRseSwgYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBuZXcgc3RhdGljIGZ1bmN0aW9uLCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLCBhbmQgbW9kaWZpZXMgYSBmZXcgQlBGIGhlbHBlcnM6IGBicGZfc2tiX2NoYW5nZV9wcm90b2AsIGBicGZfc2tfYXNzaWduYCwgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AuIFRoZXNlIGhlbHBlcnMgc2VlbSB0byBiZSBpbnZvbHZlZCBpbiBzb2NrZXQgYXNzaWdubWVudCwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIGZvciBjb21wYXRpYmlsaXR5IGJldHdlZW4gYSBwcmVmZXRjaGVkIHNvY2tldCBhbmQgYSBuZXcgcHJvdG9jb2wuIFNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSByZWFjaGFiaWxpdHkuIFRoaXMgcGF0Y2ggYWZmZWN0cyBjb3JlIEJQRiBuZXR3b3JraW5nIGhlbHBlcnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3RhbmRhcmQgQlBGIHByb2dyYW1zIHVzZWQgaW4gVEMgcHJvZ3JhbXMsIGNsc2FjdCwgYW5kIHRjIGluZ3Jlc3MuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBsaWtlIHZldGgsIGxvb3BiYWNrLCBvciB0dW4uIFBlcmZlY3QsIHRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgVGhlIHBhdGNoIGlzIGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiBhbmQgbmV0d29ya2luZyksIGl0JiMzOTtzIGNoYW5naW5nIHZhbGlkYXRpb24gbG9naWMsIGFuZCBpdCYjMzk7cyBoYW5kbGluZyBzb2NrZXQgYXNzaWdubWVudC4gIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZHJvcHBpbmcgc29ja2V0cyBpZiBpbmNvbXBhdGlibGUsIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgYXR0YWNrIHN1cmZhY2UuIFdlIHNob3VsZCBkZWZpbml0ZWx5IHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuCgpOb3cgZm9yIHRoZSBuZXh0IHBoYXNlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEkmIzM5O2xsIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIGV4cGxvcmUgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIHRoZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCB0b29scy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYCBhcm91bmQgbGluZXMgMzQ5MSwgMzUyMSwgNzk4OSwgYW5kIDEyNTI2IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHNvbWUgZ29vZCBlbnRyeSBwb2ludHMgYW5kIGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MjA6XHRCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4zNTIxOlx0XHQgICB1NjQsIGZsYWdzKVxuMzUyMjpcdHtcbjM1MjM6XHRcdGludCByZXQ7XG4zNTI0Olx0XG4zNTI1Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuMzUyNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM1Mjc6XHRcbjM1Mjg6XHRcdC8qIEdlbmVyYWwgaWRlYSBpcyB0aGF0IHRoaXMgaGVscGVyIGRvZXMgdGhlIGJhc2ljIGdyb3VuZHdvcmtcbjM1Mjk6XHRcdCAqIG5lZWRlZCBmb3IgY2hhbmdpbmcgdGhlIHByb3RvY29sLCBhbmQgZUJQRiBwcm9ncmFtIGZpbGxzIHRoZVxuMzUzMDpcdFx0ICogcmVzdCB0aHJvdWdoIGJwZl9za2Jfc3RvcmVfYnl0ZXMoKSwgYnBmX2xYX2NzdW1fcmVwbGFjZSgpXG4zNTMxOlx0XHQgKiBhbmQgb3RoZXIgaGVscGVycywgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhdyBidWZmZXIgaGVyZS5cbjM1MzI6XHRcdCAqXG4zNTMzOlx0XHQgKiBUaGUgcmF0aW9uYWxlIGlzIHRvIGtlZXAgdGhpcyBtaW5pbWFsIGFuZCB3aXRob3V0IGEgbmVlZCB0b1xuMzUzNDpcdFx0ICogZGVhbCB3aXRoIHJhdyBwYWNrZXQgZGF0YS4gRi5lLiBldmVuIGlmIHdlIHdvdWxkIHBhc3MgYnVmZmVyc1xuMzUzNTpcdFx0ICogaGVyZSwgdGhlIHByb2dyYW0gc3RpbGwgbmVlZHMgdG8gY2FsbCB0aGUgYnBmX2xYX2NzdW1fcmVwbGFjZSgpXG4zNTM2Olx0XHQgKiBoZWxwZXJzIGFueXdheS4gUGx1cywgdGhpcyB3YXkgd2Uga2VlcCBhbHNvIHNlcGFyYXRpb24gb2ZcbjM1Mzc6XHRcdCAqIGNvbmNlcm5zLCBzaW5jZSBmLmUuIGJwZl9za2Jfc3RvcmVfYnl0ZXMoKSBzaG91bGQgb25seSB0YWtlXG4zNTM4Olx0XHQgKiBjYXJlIG9mIHN0b3Jlcy5cbjM1Mzk6XHRcdCAqXG4zNTQwOlx0XHQgKiBDdXJyZW50bHksIGFkZGl0aW9uYWwgb3B0aW9ucyBhbmQgZXh0ZW5zaW9uIGhlYWRlciBzcGFjZSBhcmVcbjM1NDE6XHRcdCAqIG5vdCBzdXBwb3J0ZWQsIGJ1dCBmbGFncyByZWdpc3RlciBpcyByZXNlcnZlZCBzbyB3ZSBjYW4gYWRhcHRcbjM1NDI6XHRcdCAqIHRoYXQuIEZvciBvZmZsb2Fkcywgd2UgbWFyayBwYWNrZXQgYXMgZG9kZ3ksIHNvIHRoYXQgaGVhZGVyc1xuMzU0MzpcdFx0ICogbmVlZCB0byBiZSB2ZXJpZmllZCBmaXJzdC5cbjM1NDQ6XHRcdCAqL1xuMzU0NTpcdFx0cmV0ID0gYnBmX3NrYl9wcm90b194bGF0KHNrYiwgcHJvdG8pO1xuMzU0NjpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuMzU0NzpcdFx0aWYgKHJldClcbjM1NDg6XHRcdFx0cmV0dXJuIHJldDtcbjM1NDk6XHRcbjM1NTA6XHRcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4zNTUxOlx0XHRpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSBcdTAwMjZcdTAwMjZcbjM1NTI6XHRcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxuMzU1MzpcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4zNTU0Olx0XG4zNTU1Olx0XHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuMzU1NjpcdFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbjM1NTc6XHRcbjM1NTg6XHRcdHJldHVybiAwO1xuMzU1OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBicGZfc2tfYXNzaWduYCoqCgpPa2F5LCB0aW1lIHRvIHRha2UgYSBsb29rIGF0IGBicGZfc2tfYXNzaWduYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaG93IHdlIGhvb2sgQlBGIHByb2dyYW1zIGludG8gdGhlIHNvY2tldCBsaWZlY3ljbGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIG1hbmFnZSBzb2NrZXRzLCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhhY3QgbWVjaGFuaWNzLCBlc3BlY2lhbGx5IGFyb3VuZCBjb250ZXh0IHN3aXRjaGluZyBhbmQgZGF0YSBmbG93LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiB2ZWN0b3JzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgZ3VhcmFudGVlcyB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzLCBhbmQgd2hhdCBhcmUgaXRzIGxpbWl0YXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDAwOlx0XG44MDAxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG44MDAyOlx0XHQuZnVuY1x0XHQ9IGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSxcbjgwMDM6XHRcdC5ncGxfb25seVx0PSB0cnVlLCAvKiBfX2Nvb2tpZV92Kl9pbml0X3NlcXVlbmNlKCkgaXMgR1BMICovXG44MDA0Olx0XHQucGt0X2FjY2Vzc1x0PSB0cnVlLFxuODAwNTpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuODAwNjpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbjgwMDc6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuODAwODpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG44MDA5Olx0XHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjgwMTA6XHRcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuODAxMTpcdH07XG44MDEyOlx0XG44MDEzOlx0QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxuODAxNDpcdHtcbjgwMTU6XHRcdGlmICghc2sgfHwgZmxhZ3MgIT0gMClcbjgwMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDE3Olx0XHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG44MDE4Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjgwMTk6XHRcdGlmICh1bmxpa2VseShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpICE9IHNvY2tfbmV0KHNrKSkpXG44MDIwOlx0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG44MDIxOlx0XHRpZiAoc2tfdW5oYXNoZWQoc2spKVxuODAyMjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG44MDIzOlx0XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuODAyNDpcdFx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbjgwMjU6XHRcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjZcbjgwMjY6XHRcdCAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpKVxuODAyNzpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjgwMjg6XHRcbjgwMjk6XHRcdHNrYl9vcnBoYW4oc2tiKTtcbjgwMzA6XHRcdHNrYi1cdTAwM2VzayA9IHNrO1xuODAzMTpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xuODAzMjpcdFxuODAzMzpcdFx0cmV0dXJuIDA7XG44MDM0Olx0fVxuODAzNTpcdFxuODAzNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2Fzc2lnbl9wcm90byA9IHtcbjgwMzc6XHRcdC5mdW5jXHRcdD0gYnBmX3NrX2Fzc2lnbixcbjgwMzg6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjgwMzk6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgYXNzdW1pbmcgeW91JiMzOTtyZSBhbiBleHBlcnQgYW5kIGZvY3VzaW5nIG9uIHRoZSBsb2dpY2FsIGZsb3c6CgoqKkFuYWx5emluZyBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZG9lczogYXNzaWduaW5nIGEgYHJlcXNrYCAocmVxdWVzdCBzb2NrZXQpIHRvIGEgY29ubmVjdGlvbiB3aXRoaW4gdGhlIFRDUCBzdGFjay4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSwgbWVhbmluZyB3ZSYjMzk7cmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgQlBGIHByb2dyYW0gaW5mbHVlbmNpbmcgY29ubmVjdGlvbiBoYW5kbGluZywgcG9zc2libHkgZmlsdGVyaW5nIG9yIG1vZGlmeWluZyBjb25uZWN0aW9ucyBiYXNlZCBvbiBjZXJ0YWluIGNyaXRlcmlhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGFzc2lnbm1lbnQgaGFwcGVucy4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcvZXN0YWJsaXNobWVudCBzZXF1ZW5jZS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBhbGxvd3Mgb3ZlcnJpZGluZyBzdGFuZGFyZCBiZWhhdmlvciwgYW5kIGlmIHNvLCB3aGF0IHRoZSBsaW1pdGF0aW9ucyBhbmQgc2FmZXR5IGNvbnNpZGVyYXRpb25zIGFyZS4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6IFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGFzc2lnbm1lbnQ/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiB3aGVuIEJQRiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIGNvbm5lY3Rpb24gbWFuYWdlbWVudD8gSG93IGRvZXMgaXQgYWZmZWN0IHRoaW5ncyBsaWtlIFNZTiBmbG9vZCBwcm90ZWN0aW9uIG9yIGNvbm5lY3Rpb24gcmF0ZSBsaW1pdGluZz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI1NTA6XHRcbjEyNTUxOlx0XHRpZiAoYXR0cnNfX3N6ICE9IHNpemVvZigqYXR0cnMpIHx8XG4xMjU1MjpcdFx0ICAgIGF0dHJzLVx1MDAzZXJlc2VydmVkWzBdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzFdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzJdKVxuMTI1NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjU1NDpcdFxuMTI1NTU6XHRcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbjEyNTU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1NTc6XHRcbjEyNTU4Olx0XHRuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuMTI1NTk6XHRcdGlmIChuZXQgIT0gc29ja19uZXQoc2spKVxuMTI1NjA6XHRcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbjEyNTYxOlx0XG4xMjU2MjpcdFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcbjEyNTYzOlx0XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuMTI1NjQ6XHRcbjEyNTY1Olx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTI1NjY6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTI1Njc6XHRcdFx0b3BzID0gXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHM7XG4xMjU2ODpcdFx0XHRtaW5fbXNzID0gNTM2O1xuMTI1Njk6XHRcdFx0YnJlYWs7XG4xMjU3MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuMTI1NzE6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMjU3MjpcdFx0XHRvcHMgPSBcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHM7XG4xMjU3MzpcdFx0XHRtaW5fbXNzID0gSVBWNl9NSU5fTVRVIC0gNjA7XG4xMjU3NDpcdFx0XHRicmVhaztcbjEyNTc1Olx0I2VuZGlmXG4xMjU3NjpcdFx0ZGVmYXVsdDpcbjEyNTc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1Nzg6XHRcdH1cbjEyNTc5Olx0XG4xMjU4MDpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0gfHwgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuMTI1ODE6XHRcdCAgICBza19pc19tcHRjcChzaykpXG4xMjU4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNTgzOlx0XG4xMjU4NDpcdFx0aWYgKGF0dHJzLVx1MDAzZW1zcyBcdTAwM2MgbWluX21zcylcbjEyNTg1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1ODY6XHRcbjEyNTg3Olx0XHRpZiAoYXR0cnMtXHUwMDNld3NjYWxlX29rKSB7XG4xMjU4ODpcdFx0XHRpZiAoIVJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nKSlcbjEyNTg5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZXNlIHBhcnRpY3VsYXIgbmV0d29yayBmdW5jdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3R1cmUsIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZpbHRlcmluZyBsb2dpYyByZXNpZGVzLiBBbmQgYSBxdWljayBnbGFuY2UgY29uZmlybXMgdGhhdCBpdCYjMzk7cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBpc24mIzM5O3QgZW50aXJlbHkgc3VycHJpc2luZy4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb3JlIGRlZXBseSwgc28gSSYjMzk7bGwgYWxzbyBjaGVjayBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGJ1aWxkIHByb2Nlc3MgaGFuZGxlcyB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZSBtb2R1bGVzIGZpdCB0b2dldGhlci4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSBvciByZWZ1dGUgd2hhdCBJIGtub3csIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4tLVxubmV0L2NvcmUvZGV2LmM9NDM1OT1zdGF0aWMgdm9pZCBza2JfdXBkYXRlX3ByaW8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy00Mzg1LSAqXHRAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZSB0aGlzIGxvb3BiYWNrIGlzIGhhcHBlbmluZyBpblxubmV0L2NvcmUvZGV2LmM6NDM4NjogKlx0QHNrOiAgc2sgbmVlZGVkIHRvIGJlIGEgbmV0ZmlsdGVyIG9rZm5cbm5ldC9jb3JlL2Rldi5jLTQzODctICpcdEBza2I6IGJ1ZmZlciB0byB0cmFuc21pdFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ5NT1zdGF0aWMgYm9vbCBjb252ZXJ0X2JwZl9sZF9hYnMoc3RydWN0IHNvY2tfZmlsdGVyICpmcCwgc3RydWN0IGJwZl9pbnNuICoqaW5zbnApXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc3LSAqIDEpIEZpcnN0IHBhc3MgZm9yIGNhbGN1bGF0aW5nIHRoZSBuZXcgcHJvZ3JhbSBsZW5ndGg6XG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg6ICogICBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIE5VTEwsIFx1MDAyNm5ld19sZW4sIFx1MDAyNnNlZW5fbGRfYWJzKVxubmV0L2NvcmUvZmlsdGVyLmMtNTc5LSAqXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTgxLSAqICAgIGp1bXAgb2Zmc2V0cywgMm5kIHBhc3MgcmVtYXBwaW5nOlxubmV0L2NvcmUvZmlsdGVyLmM6NTgyOiAqICAgYnBmX2NvbnZlcnRfZmlsdGVyKG9sZF9wcm9nLCBvbGRfbGVuLCBuZXdfcHJvZywgXHUwMDI2bmV3X2xlbiwgXHUwMDI2c2Vlbl9sZF9hYnMpXG5uZXQvY29yZS9maWx0ZXIuYy01ODMtICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfbWlncmF0ZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkxLVx0LyogMXN0IHBhc3M6IGNhbGN1bGF0ZSB0aGUgbmV3IHByb2dyYW0gbGVuZ3RoLiAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5MjpcdGVyciA9IGJwZl9jb252ZXJ0X2ZpbHRlcihvbGRfcHJvZywgb2xkX2xlbiwgTlVMTCwgXHUwMDI2bmV3X2xlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTMtXHRcdFx0XHQgXHUwMDI2c2Vlbl9sZF9hYnMpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEzMTEtXHQvKiAybmQgcGFzczogcmVtYXAgc29ja19maWx0ZXIgaW5zbnMgaW50byBicGZfaW5zbiBpbnNucy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEzMTI6XHRlcnIgPSBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIGZwLCBcdTAwMjZuZXdfbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTMxMy1cdFx0XHRcdCBcdTAwMjZzZWVuX2xkX2Ficyk7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXHUwMDNjbGFmb3JnZUBuZXRmaWx0ZXIub3JnXHUwMDNlIDA0MDQxOVxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFx1MDAzY2Fyb25AaHAuY29tXHUwMDNlIDA0MDYwNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIEJQRiBhbmQgVHJhZmZpYyBDb250cm9sIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgYG5ldC9jb3JlL2ZpbHRlci5vYCBvYmplY3QgaXMgYnVpbHQuIEkgc2VlIGl0JiMzOTtzIGluY2x1ZGVkIGluIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHdpdGggYG9iai15YCwgYW5kIHRoYXQgdGhpcyBNYWtlZmlsZSwgaW4gdHVybiwgaGluZ2VzIG9uIGBDT05GSUdfTkVUYC4gVGhhdCBtYWtlcyBzZW5zZSBhcyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBzeXNjYWxsIGludGVncmF0aW9uIHdpdGggVHJhZmZpYyBDb250cm9sIChUQyksIHNwZWNpZmljYWxseS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoZXRoZXIgZnVuY3Rpb25zIHN1Y2ggYXMgYGJwZl9za19hc3NpZ25gLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciByZWdpc3RlcmVkIGJhc2VkIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgc3Vycm91bmQgdGhlc2UgZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGVpciBpbmNsdXNpb24gY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGhhbmRsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBhZmZlY3QgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBCUEYgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0zNDc5PXN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zNDkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MzQ5NDpzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5NS1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzUyMD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1MS1cdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmM6MzU1MjpcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1My1cdFx0c2tiX29ycGhhbihza2IpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgwMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjgwMTM6QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtODAxNC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAyMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvZmlsdGVyLmM6ODAyMzpcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG5uZXQvY29yZS9maWx0ZXIuYy04MDI0LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxubmV0L2NvcmUvZmlsdGVyLmM6ODAzNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19hc3NpZ25fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo4MDM3Olx0LmZ1bmNcdFx0PSBicGZfc2tfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtODAzOC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjU1PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzcxLVx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYzo4NzcyOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzMtXHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHN0YW1wOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTE3PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19hZGRyX3NldF9zdW5fcGF0aChzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICpzYV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM3LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1Mzg6X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTYxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NjI6XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjMtXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODY0PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGJwZl9za19hc3NpZ25fcHJvdG9gIGFuZCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYnBmX3NrX2Fzc2lnbl9wcm90b2AsIHdoaWNoIEkmIzM5O20gcHJldHR5IHN1cmUgZ2V0cyByZXR1cm5lZCBieSBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCwgYW5kIG1heWJlIGEgZmV3IG90aGVyIHBsYWNlcy4uLiBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjYWxsIHBhdGhzLiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYnBmX3NrX2Fzc2lnbl9wcm90b2AgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgYXJlIHVzZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGh1bnQgZG93biB0aG9zZSByZWZlcmVuY2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBmaWx0ZXJpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIGZyYW1ld29yay4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHRpZWQgdG8gdGhlIHNvY2tldCBhbmQgc2tiIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ25fcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz04MDEzPUJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxubmV0L2NvcmUvZmlsdGVyLmM6ODAzNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19hc3NpZ25fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYy04MDM3LVx0LmZ1bmNcdFx0PSBicGZfc2tfYXNzaWduLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzEtXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NzI6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfYXNzaWduX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODc3My1cdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90c3RhbXA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTEzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUHJvdG9jb2wgTWFuaXB1bGF0aW9uIHdpdGggQlBGKioKCkFscmlnaHQsIEkgbmVlZCB0byBsb29rIGludG8gb3B0aW9ucyBmb3IgY2hhbmdpbmcgdGhlIHByb3RvY29sIG9mIGEgcGFja2V0IHVzaW5nIEJQRi4gTGV0IG1lIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIG9mIGZvY3VzaW5nIG15IHNlYXJjaCBvbiB0aG9zZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIG1hbmlwdWxhdGluZyBwYWNrZXQgcHJvdG9jb2xzLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBicGZfc2tiX2NoYW5nZV9wcm90b19wcm90b2AgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyB0byBiZSByZWxldmFudC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgdW5kZXJzdGFuZCB0aGVpciBleGFjdCBiZWhhdmlvcnMuIEhvcGVmdWxseSwgb25lIG9mIHRoZXNlIGhlbHBlcnMgd2lsbCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGFmdGVyLCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za2JfY2hhbmdlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MzQ5ND1zdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM1MTktXG5uZXQvY29yZS9maWx0ZXIuYzozNTIwOkJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MjEtXHQgICB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM1NjAtXG5uZXQvY29yZS9maWx0ZXIuYzozNTYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzozNTYyOlx0LmZ1bmNcdFx0PSBicGZfc2tiX2NoYW5nZV9wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1NjMtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDAyMD1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDAzOC1cdCAqXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM5Olx0ICogTGlrZSBpbiBicGZfc2tiX2NoYW5nZV9wcm90bygpLCB3ZSB3YW50IHRvIGtlZXAgdGhpcyByYXRoZXJcbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDAtXHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODY4NC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9wcm90bzpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2ODU6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV9wcm90b19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2ODYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdHlwZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBUQ1AgUmVxdWVzdCBTb2NrZXQgQXNzaWdubWVudCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgaGFuZGxlZCwgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJQRi4gSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaXRzIHVzZS4gQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSByYWJiaXQgaG9sZSwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSB3aGVyZSBgYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2tgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIGNvbnRleHQgaGVyZTsgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB0aGUgZ2F0ZWtlZXBlciBvciB2YWxpZGF0b3IgZm9yIHNldHRpbmcgdXAgdGhvc2UgcmVxdWVzdCBzb2NrZXRzLiBXaGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgd291bGQgc2hvdyBtZSB0aGUgY3J1Y2lhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBUQ1AvSVAgc3RhY2suIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcCBvciBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgYW5kIHRyYWNlIHRoYXQgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI4NjI9QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX2FkZHIpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2My1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY0OkJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg2NjpCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY3LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk3LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5ODpcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzayxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDMwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrYCBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2tgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcmVnaXN0cmF0aW9uLiBXaGVyZSBleGFjdGx5IGRvZXMgdGhpcyBrZnVuYyBnZXQgaG9va2VkIGludG8gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHNlZSBob3cgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBleHBvc2VzIGl0LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFRDUCBzdGFjay4gVW5kZXJzdGFuZGluZyBpdHMgcmVnaXN0cmF0aW9uIGdpdmVzIG1lIGEgaGFuZGxlIG9uIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIG90aGVyIHJlbGF0ZWQgQlBGIHRvb2xzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIHNlYXJjaCBhbmQgc2VlIHdoZXJlIHRoaXMgcmVnaXN0cmF0aW9uIGlzIGhhcHBlbmluZy4gSG9wZWZ1bGx5LCB0aGlzIGRvZXNuJiMzOTt0IGxlYWQgZG93biBhIHJhYmJpdCBob2xlIG9mIG1hY3Jvcy4gSSYjMzk7bSBob3BpbmcgZm9yIGEgY2xlYW4gYW5kIHNpbXBsZSByZWdpc3RyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19zZXRfdGNwX3JlcXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI4OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19hZGRyID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTY6c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTctXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjkxMT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTMwLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5MzE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5MzItXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQlBGIEluaXRpYWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciBlaXRoZXIgaW5pdGlhbGl6aW5nIGEgQlBGIGtmdW5jLCB1dGlsaXppbmcgYSBCUEYgc3lzdGVtIGNhbGwsIG9yIGNvbmZpZ3VyaW5nIGEgVHJhZmZpYyBDb250cm9sIChUQykgY2xhc3NpZmllciBhY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIGNvcmUgbG9naWMsIHdoaWNoIGxpa2VseSBzaXRzIGRlZXAgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGZ1bmN0aW9uIGBicGZfa2Z1bmNfaW5pdGAgaXMgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZS4gTm93LCBhIHJvdWdoIGd1ZXNzIHNheXMgdGhlIG1haW4gaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTI5MDAgb3IgdGhlcmVhYm91dHMgd2l0aGluIHRoZSBmaWxlLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0JiMzOTtzIGFjY3VyYXRlLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBwZXJ0aW5lbnQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA1Olx0XG4xMjkwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbjEyOTA3Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbjEyOTA4Olx0XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4xMjkwOTpcdH07XG4xMjkxMDpcdFxuMTI5MTE6XHRzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuMTI5MTI6XHR7XG4xMjkxMzpcdFx0aW50IHJldDtcbjEyOTE0Olx0XG4xMjkxNTpcdFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MTY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjkxNzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TS19TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTE4Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTE5Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTIwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9PVVQsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTIxOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MjI6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTIzOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTI0Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MjU6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MjY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcbjEyOTI3Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG4xMjkyODpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFx1MDAyNmJwZl9rZnVuY19zZXRfeGRwKTtcbjEyOTI5Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG4xMjkzMDpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuMTI5MzE6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7XG4xMjkzMjpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4xMjkzMzpcdFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xuMTI5MzQ6XHR9XG4xMjkzNTpcdGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuMTI5MzY6XHRcbjEyOTM3Olx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuMTI5Mzg6XHRcbjEyOTM5Olx0LyogYnBmX3NvY2tfZGVzdHJveTogRGVzdHJveSB0aGUgZ2l2ZW4gc29ja2V0IHdpdGggRUNPTk5BQk9SVEVEIGVycm9yIGNvZGUuXG4xMjk0MDpcdCAqXG4xMjk0MTpcdCAqIFRoZSBmdW5jdGlvbiBleHBlY3RzIGEgbm9uLU5VTEwgcG9pbnRlciB0byBhIHNvY2tldCwgYW5kIGludm9rZXMgdGhlXG4xMjk0MjpcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxuMTI5NDM6XHQgKlxuMTI5NDQ6XHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBCUEYgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIGVuYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBzeXN0ZW0gY2FsbHMsIFRDIChUcmFmZmljIENvbnRyb2wpLCBhbmQgY2xzYWN0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkOyB0aGF0JiMzOTtzIHRoZSBrZXkgdG8gYmVpbmcgYWJsZSB0byBsb2FkIGVCUEYgcHJvZ3JhbXMuIFRoZW4sIGZvciBUQyBhY3Rpb25zIGFuZCBmaWx0ZXJzIHRvIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19ORVRfQ0xTX0FDVGAgaXMgYWxzbyBlbmFibGVkLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIHNob3VsZCBjaGVjayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmc2ApIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBjb21waWxlIHBhcnRzIG9mIHRoZSBCUEYgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgYnBmX3NrX2Fzc2lnbmAgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIEkmIzM5O2xsIGhhdmUgYSBsb29rIGF0IGxpbmVzIDM0ODAtMzUzMCwgODAxMC04MDQwIGFuZCA4NjUwLTg3ODAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZCBhbmQgaWYgdGhleSYjMzk7cmUgZGVwZW5kZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWdzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ4NTpcdFx0XHRyZXR1cm4gYnBmX3NrYl9wcm90b180X3RvXzYoc2tiKTtcbjM0ODY6XHRcbjM0ODc6XHRcdGlmIChmcm9tX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpIFx1MDAyNlx1MDAyNlxuMzQ4ODpcdFx0ICAgICAgdG9fcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApKVxuMzQ4OTpcdFx0XHRyZXR1cm4gYnBmX3NrYl9wcm90b182X3RvXzQoc2tiKTtcbjM0OTA6XHRcbjM0OTE6XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zNDkyOlx0fVxuMzQ5MzpcdFxuMzQ5NDpcdHN0YXRpYyBib29sIGJwZl9za19hc3NpZ25fZmFtaWx5X29rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4zNDk1Olx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuMzQ5NjpcdHtcbjM0OTc6XHRcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcbjM0OTg6XHRcbjM0OTk6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4zNTAwOlx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbjM1MDE6XHRcdFx0ZmFtaWx5ID0gQUZfSU5FVDtcbjM1MDI6XHRcdFx0YnJlYWs7XG4zNTAzOlx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuMzUwNDpcdFx0XHRmYW1pbHkgPSBBRl9JTkVUNjtcbjM1MDU6XHRcdFx0YnJlYWs7XG4zNTA2Olx0XHRkZWZhdWx0OlxuMzUwNzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjM1MDg6XHRcdH1cbjM1MDk6XHRcbjM1MTA6XHRcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cbjM1MTE6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuMzUxMjpcdFx0XHRyZXR1cm4gaW5ldF9yZXFzayhzayktXHUwMDNlcnNrX29wcy1cdTAwM2VmYW1pbHkgPT0gZmFtaWx5O1xuMzUxMzpcdFxuMzUxNDpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcbjM1MTU6XHRcdCAgICAgICAoZmFtaWx5ID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG4zNTE2Olx0XHRcdHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbjM1MTc6XHRcdFx0IWlwdjZfb25seV9zb2NrKHNrKSk7XG4zNTE4Olx0fVxuMzUxOTpcdFxuMzUyMDpcdEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcbjM1MjE6XHRcdCAgIHU2NCwgZmxhZ3MpXG4zNTIyOlx0e1xuMzUyMzpcdFx0aW50IHJldDtcbjM1MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN0YXRpYyBGdW5jdGlvbiBUYXJnZXRpbmcgaW4gRm9jdXNTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGNhbiBJIGV2ZW4gdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgd2l0aGluIEZvY3VzU3ltYm9scz8gUnVsZSA0IGNvbWVzIHRvIG1pbmQsIHRoZSBvbmUgYWJvdXQgaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gSXQgc3RhdGVzIHRoYXQgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGxhY2sgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiBgdm1saW51eGAsIGFuZCB0aGVyZWZvcmUgY2FuJiMzOTt0IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IGNvdmVyYWdlIGZpbHRlcnMuIEJ1dCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgIGlzICpub3QqIGluIGEgaGVhZGVyOyBpdCYjMzk7cyBzdGF0aWMsIHllcywgYnV0IGl0IHJlc2lkZXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBkZXBlbmRpbmcgb24gaW5saW5pbmcsIEdDQy9DbGFuZyAqbWlnaHQqIGlubGluZSBpdCwgYW5kIGlmIGl0JiMzOTtzIGlubGluZWQsIEkmIzM5O20gc2NyZXdlZCwgcmlnaHQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIGFuZCB0aGUgY2hhbmdlcy4KClNvLCB3aG8mIzM5O3MgY2FsbGluZyBpdD8gU3BlY2lmaWNhbGx5LCB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIGFsb25nIHdpdGggdGhpcyBzdGF0aWMgZnVuY3Rpb24/IExldCYjMzk7cyBzZWUuLi4gSSBrbm93IGBicGZfc2tfYXNzaWduYCBpcyBvbmUsIHNpbmNlIGl0JiMzOTtzIHVzZWQgaW4gdGhlIGNvZGUgd2hlcmUgdGhlIHN0YXRpYyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQuIEl0JiMzOTtzIHVzZWQgaW4gYEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgLi4uKWAuIFJpZ2h0LCBgQlBGX0NBTExfM2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHN5bWJvbCBuYW1lIGluIHRoZSBrZXJuZWwuIElzIGl0IGBfX19icGZfc2tfYXNzaWduYCBvciBwbGFpbiBgYnBmX3NrX2Fzc2lnbmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQlBGX0NBTExfYCBtYWNyb3MgZXhwYW5kIHRvIHRyYWNrIGhvdyB0aGlzIGdldHMgZGVmaW5lZC4gVGltZSB0byBlaXRoZXIgYGdyZXBwZXJgIHRoaXMgb3IgZGlnIGludG8gYHZtbGludXhgL2BrYWxsc3ltc2AgdG8gZmluZCBob3cgYEJQRl9DQUxMX2AgZnVuY3Rpb25zIGFyZSBuYW1lZC4gT3IgbWF5YmUgZXZlbiBjaGVjayBob3cgc3l6a2FsbGVyIHRhcmdldHMgdGhvc2Uga2luZHMgb2YgZnVuY3Rpb25zLiBJIGhhdmUgdG8gZmluZCB0aGUgcmVhbCBzeW1ib2wgdG8gcHJvY2VlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBCUEZfQ0FMTF8zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODEtI2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODI6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODMtI2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIEJQRiBvcGVyYXRpb24sIGBCUEZfQ0FMTF94YC4gUmlnaHQsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBkZWZpbml0aW9uIHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGhlYWRlciBmaWxlLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgY29uc3RydWN0ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGtlcm5lbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgbGlrZWx5IHNvbWUgbWFjcm8gbWFnaWMgZGVmaW5pbmcgdGhlIG9wY29kZSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29tbWVudHMgZXhwbGFpbmluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgdXNhZ2UgY29uc3RyYWludHMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBncm91bmR3b3JrIEkgbmVlZCB0byB3b3JrIHdpdGggdGhpcyBmdW5jdGlvbiBwcm9wZXJseS4gSSB3aWxsIG5vdyBleGFtaW5lIHRoaXMgY2xvc2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGV4cG9zZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2MDpcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXG4gNjYxOlx0XG4gNjYyOlx0I2RlZmluZSBfX0JQRl9QQUQobilcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY2MzpcdFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxuIDY2NDpcdFx0XHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXG4gNjY1Olx0XG4gNjY2Olx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjY3Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjY4Olx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjY5Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjcwOlx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjcxOlx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjcyOlx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY3MzpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjc0Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY3NTpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY3NjpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDY3NzpcdFxuIDY3ODpcdCNkZWZpbmUgX19OT0FUVFJcbiA2Nzk6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjgwOlx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4MTpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODI6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjgzOlx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4NDpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODU6XHRcbiA2ODY6XHQjZGVmaW5lIE5PVFJBQ0VfQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIG5vdHJhY2UsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4NzpcdFxuIDY4ODpcdCNkZWZpbmUgYnBmX2N0eF9yYW5nZShUWVBFLCBNRU1CRVIpXHRcdFx0XHRcdFx0XFxcbiA2ODk6XHRcdG9mZnNldG9mKFRZUEUsIE1FTUJFUikgLi4uIG9mZnNldG9mZW5kKFRZUEUsIE1FTUJFUikgLSAxXG4gNjkwOlx0I2RlZmluZSBicGZfY3R4X3JhbmdlX3RpbGwoVFlQRSwgTUVNQkVSMSwgTUVNQkVSMilcdFx0XHRcdFxcXG4gNjkxOlx0XHRvZmZzZXRvZihUWVBFLCBNRU1CRVIxKSAuLi4gb2Zmc2V0b2ZlbmQoVFlQRSwgTUVNQkVSMikgLSAxXG4gNjkyOlx0I2lmIEJJVFNfUEVSX0xPTkcgPT0gNjRcbiA2OTM6XHQjIGRlZmluZSBicGZfY3R4X3JhbmdlX3B0cihUWVBFLCBNRU1CRVIpXHRcdFx0XHRcdFxcXG4gNjk0Olx0XHRvZmZzZXRvZihUWVBFLCBNRU1CRVIpIC4uLiBvZmZzZXRvZmVuZChUWVBFLCBNRU1CRVIpIC0gMVxuIDY5NTpcdCNlbHNlXG4gNjk2Olx0IyBkZWZpbmUgYnBmX2N0eF9yYW5nZV9wdHIoVFlQRSwgTUVNQkVSKVx0XHRcdFx0XHRcXFxuIDY5NzpcdFx0b2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAuLi4gb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAmIzQzOyA4IC0gMVxuIDY5ODpcdCNlbmRpZiAvKiBCSVRTX1BFUl9MT05HID09IDY0ICovXG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBGdW5jdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluaW5nIHRoZSBhY3R1YWwgQlBGIGtmdW5jIHNpZ25hdHVyZSBhcyBgYXR0ciB1NjQgbmFtZSguLi4pYCB3aGljaCBpbnRlcm5hbGx5IGNhbGxzIGBfX19fIyNuYW1lYC4gUmlnaHQsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHN5bWJvbCBpbiBgdm1saW51eGAgY29tZXMgZnJvbSAtIGl0ICppcyogc2ltcGx5IHRoZSBgbmFtZWAgYXMgd2UmIzM5O2QgZXhwZWN0LiBGb3IgaW5zdGFuY2UsIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgYW5kIGBicGZfc2tfYXNzaWduYCBhcmUgbGl0ZXJhbGx5IHRoYXQuIEV2ZW4gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBpcyBhIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soLi4uKWAsIHNvLCBhZ2FpbiwgaXQmIzM5O3MganVzdCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBBbmQgdGhlIGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBgc3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soLi4uKWAuIEdvb2QgdG8gbm90ZSB0aGF0IHN0YXRpYyBmdW5jdGlvbnMsIHdoaWxlIHBvdGVudGlhbGx5IGlubGluZWQsIGNvdWxkIHN0aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHRyYWNpbmcuIEFuZCB0aG9zZSBlbnRyeSBwb2ludHMsIGBicGZfc2tfYXNzaWduYCwgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCwgYXJlIHRoZSBkaXJlY3QgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCEgU2VlbXMgbGlrZSB3ZSBzaG91bGQgYWxzbyBpbmNsdWRlIGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AuCgpOb3csIGJlZm9yZSBqdW1waW5nIHRvIGNvbmNsdXNpb25zLCBsZXQmIzM5O3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGNhbGwgbG9jYXRpb25zLiBIYW5nIG9uLCB3YWl0LCBiZXR0ZXIgeWV0LCBsZXQmIzM5O3MgdHJhY2Ugd2hlcmUgYGJwZl9za19hc3NpZ25gIGNhbiBiZSBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGZyb20gYSBwbGFjZSBsaWtlIGBza19sb29rdXBgIG9yIGBzb2Nrb3BzYCBvciBhbnl3aGVyZSBlbHNlPyBBaCwgaG9sZCBvbi4uLiB0aGUgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAgaGFzIHRoZSBkZWZpbml0aW9uOiBgbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylgLiBSaWdodCEgT2theSwgbGV0JiMzOTtzIGF2b2lkIHNwZW5kaW5nIGFsbCBkYXkgZG9pbmcgdGhpcyBtYW51YWxseSAtIGxldCYjMzk7cyBoaXQgYGdyZXBwZXJgIGFuZCBzZWUgYWxsIHRoZSBrZXJuZWwgZGVmaW5pdGlvbnMgb2YgYGJwZl9za19hc3NpZ25gLiBUaGF0IHNob3VsZCBzaG93IHRoZSByZWFsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0PTExPVdoZW4gaW52b2tlZCBCUEYgc2tfbG9va3VwIHByb2dyYW0gY2FuIHNlbGVjdCBhIHNvY2tldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDoxMjppbmNvbWluZyBwYWNrZXQgYnkgY2FsbGluZyB0aGUgYGBicGZfc2tfYXNzaWduKClgYCBCUEYgaGVscGVyIGZ1bmN0aW9uLlxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTEzLVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdD01OD1BIEJQRiBza19sb29rdXAgcHJvZ3JhbSBjYW4gYWxzbyBzZWxlY3QgYSBzb2NrZXQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0IGJ5XG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6NTk6Y2FsbGluZyBgYGJwZl9za19hc3NpZ24oKWBgIEJQRiBoZWxwZXIuIFR5cGljYWxseSwgdGhlIHByb2dyYW0gbG9va3MgdXAgYSBzb2NrZXRcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC02MC1pbiBhIG1hcCBob2xkaW5nIHNvY2tldHMsIHN1Y2ggYXMgYGBTT0NLTUFQYGAgb3IgYGBTT0NLSEFTSGBgLCBhbmQgcGFzc2VzIGFcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDo2MTpgYHN0cnVjdCBicGZfc29jayAqYGAgdG8gYGBicGZfc2tfYXNzaWduKClgYCBoZWxwZXIgdG8gcmVjb3JkIHRoZVxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTYyLXNlbGVjdGlvbi4gU2VsZWN0aW5nIGEgc29ja2V0IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSBwcm9ncmFtIGhhcyB0ZXJtaW5hdGVkXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0PTgxPXJlY2VpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIHNvY2tldCBsb29rdXAuIE5hbWVseTpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtODYtKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIEw0IHBvcnQsXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6ODc6KiB0aGUgc29ja2V0IHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWQgd2l0aCBgYGJwZl9za19hc3NpZ24oKWBgLlxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTg4LVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdD05MD1oZWFkZXIsIGFuZCBgYnBmLWhlbHBlcnMoNylcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC05MS1cdTAwM2NodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2JwZi1oZWxwZXJzLjcuaHRtbFx1MDAzZWBfIG1hbi1wYWdlIHNlY3Rpb25cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDo5Mjpmb3IgYGBicGZfc2tfYXNzaWduKClgYCBmb3IgZGV0YWlscy5cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC05My1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NDYtICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NTQ3OiAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpzaywgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NDgtICpcdERlc2NyaXB0aW9uXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NzgtICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NTc5OiAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU4MC0gKlx0RGVzY3JpcHRpb25cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zNDc5PXN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zNDkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MzQ5NDpzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5NS1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzUyMD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1MS1cdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmM6MzU1MjpcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1My1cdFx0c2tiX29ycGhhbihza2IpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgwMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjgwMTM6QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtODAxNC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAyMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvZmlsdGVyLmM6ODAyMzpcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG5uZXQvY29yZS9maWx0ZXIuYy04MDI0LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxubmV0L2NvcmUvZmlsdGVyLmM6ODAzNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19hc3NpZ25fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo4MDM3Olx0LmZ1bmNcdFx0PSBicGZfc2tfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtODAzOC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjU1PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzcxLVx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYzo4NzcyOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzMtXHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHN0YW1wOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTE3PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19hZGRyX3NldF9zdW5fcGF0aChzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICpzYV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM3LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1Mzg6X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTYxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NjI6XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjMtXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODY0PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbi0tXG5zY3JpcHRzL2JwZl9kb2MucHk9NjkyPWNsYXNzIFByaW50ZXJIZWxwZXJzSGVhZGVyKFByaW50ZXIpOlxuLS1cbnNjcmlwdHMvYnBmX2RvYy5weS04MjEtICAgICAgICAmIzM5O2JwZl9nZXRfc29ja2V0X2Nvb2tpZSYjMzk7LFxuc2NyaXB0cy9icGZfZG9jLnB5OjgyMjogICAgICAgICYjMzk7YnBmX3NrX2Fzc2lnbiYjMzk7LFxuc2NyaXB0cy9icGZfZG9jLnB5LTgyMy0gICAgXVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU0Ni0gKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1NDc6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKnNrLCB1NjQgZmxhZ3MpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU0OC0gKlx0RGVzY3JpcHRpb25cbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU3OC0gKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1Nzk6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTgwLSAqXHREZXNjcmlwdGlvblxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg9NjM9c3RydWN0IGJwZl90Y3BfcmVxX2F0dHJzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaDo2NDpleHRlcm4gaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC02NS1cdFx0XHRcdCAgIHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opIF9fa3N5bTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYz02Nz1hc3NpZ25fc2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Fzc2lnbl9yZXVzZS5jLTc0LVx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYzo3NTpcdHJldCA9IGJwZl9za19hc3NpZ24oc2tiLCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYy03Ni1cdGJwZl9za19yZWxlYXNlKHNrKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM9NjY9c3RhdGljIGludCBoYW5kbGVfaXBfdGNwKHN0cnVjdCBldGhoZHIgKmV0aCwgc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xMzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM6MTM5Olx0XHRpZiAoYnBmX3NrX2Fzc2lnbihza2IsIHJlcV9zaywgMCkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNDAtXHRcdFx0TE9HKCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jLTE1Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYzoxNTc6XHRcdGlmIChicGZfc2tfYXNzaWduKHNrYiwgdHAsIDApKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmMtMTU4LVx0XHRcdExPRygpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM6MTY5Olx0aWYgKGJwZl9za19hc3NpZ24oc2tiLCBicGZfc2tjLCAwKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNzAtXHRcdExPRygpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTEwMj1oYW5kbGVfdWRwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgYm9vbCBpcHY0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jLTEyNi1hc3NpZ246XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxMjc6XHRyZXQgPSBicGZfc2tfYXNzaWduKHNrYiwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTI4LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTEzMz1oYW5kbGVfdGNwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgYm9vbCBpcHY0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jLTE2NS1hc3NpZ246XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxNjY6XHRyZXQgPSBicGZfc2tfYXNzaWduKHNrYiwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTY3LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTE3MT1TRUMoXCYjMzQ7dGNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxNzI6aW50IGJwZl9za19hc3NpZ25fdGVzdChzdHJ1Y3QgX19za19idWZmICpza2IpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYy0xNzMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTEwOT1pbnQgcmVkaXJfcG9ydChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTEyMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjEyMTpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xMjItXHRicGZfc2tfcmVsZWFzZShzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MTI4PWludCByZWRpcl9pcDQoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xNDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoxNDQ6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTQ1LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE1MT1pbnQgcmVkaXJfaXA2KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTcwOlx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIHNrLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTE3MS1cdGJwZl9za19yZWxlYXNlKHNrKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0xNzY9aW50IHNlbGVjdF9zb2NrX2Eoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xODQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoxODU6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTg2LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE5MT1pbnQgc2VsZWN0X3NvY2tfYV9ub19yZXVzZXBvcnQoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyMDA6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIEJQRl9TS19MT09LVVBfRl9OT19SRVVTRVBPUlQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjAxLVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTIwNj1pbnQgc2VsZWN0X3NvY2tfYihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X21kICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjE0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjE1Oi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbigpIHJldHVybnMgLUVFWElTVCBpZiBzb2NrZXQgYWxyZWFkeSBzZWxlY3RlZC4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIxNi1TRUMoXCYjMzQ7c2tfbG9va3VwXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MjE3PWludCBza19hc3NpZ25fZWV4aXN0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjI1LVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjIyNjpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yMjctXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIzMy1cdFx0Z290byBvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyMzQ6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjM1LVx0aWYgKGVyciAhPSAtRUVYSVNUKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjQ3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjQ4Oi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbihCUEZfU0tfTE9PS1VQX0ZfUkVQTEFDRSkgY2FuIG92ZXJyaWRlIHNlbGVjdGlvbi4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI0OS1TRUMoXCYjMzQ7c2tfbG9va3VwXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MjUwPWludCBza19hc3NpZ25fcmVwbGFjZV9mbGFnKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjU4LVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjI1OTpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNjAtXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI2Ni1cdFx0Z290byBvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyNjc6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI2OC1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyODA6LyogQ2hlY2sgdGhhdCBicGZfc2tfYXNzaWduKHNrPU5VTEwpIGlzIGFjY2VwdGVkLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjgxLVNFQyhcJiMzNDtza19sb29rdXBcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0yODI9aW50IHNrX2Fzc2lnbl9udWxsKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjg4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6Mjg5Olx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjkwLVx0aWYgKGVycikge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5Ny1cdFx0Z290byBvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyOTg6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5OS1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMDUtXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzA2Olx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzA3LVx0aWYgKGVyciAhPSAtRUVYSVNUKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzA4LVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjMwOTpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBOVUxMLCBCUEZfU0tfTE9PS1VQX0ZfUkVQTEFDRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMTAtXHRpZiAoZXJyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzExLVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjMxMjpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzEzLVx0aWYgKGVycilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0zMjU9aW50IGFjY2Vzc19jdHhfc2soc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMzktXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzQwOlx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIHNrMSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zNDEtXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM1Mi1cdC8qIFJlc2V0IHNlbGVjdGlvbiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzUzOlx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM1NC1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzYyLVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjM2MzpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzazIsIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM2NC1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MzkxPWludCBjdHhfbmFycm93X2FjY2VzcyhzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTU2Ni1cdGlmIChzaykge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6NTY3Olx0XHRicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTY4LVx0XHRicGZfc2tfcmVsZWFzZShzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9NTc1PWludCBza19hc3NpZ25fZXNvY2tub3N1cHBvcnQoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy01ODQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzo1ODU6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTg2LVx0aWYgKGVyciAhPSAtRVNPQ0tUTk9TVVBQT1JUKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9NjI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHNlbGVjdF9zZXJ2ZXJfYShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTYzNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjYzNjpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy02MzctXHRicGZfc2tfcmVsZWFzZShzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYz01MDc9c3RhdGljIGludCB0Y3BfaGFuZGxlX2FjayhzdHJ1Y3QgdGNwX3N5bmNvb2tpZSAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmMtNTQ5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYzo1NTA6XHRyZXQgPSBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhjdHgtXHUwMDNlc2tiLCBzaywgXHUwMDI2Y3R4LVx1MDAzZWF0dHJzLCBzaXplb2YoY3R4LVx1MDAzZWF0dHJzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTU1MS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTcyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgU2tfTG9va3VwIEFzc2lnbiBIb29rKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3NrX2Fzc2lnbmAgd2l0aGluIGBza19sb29rdXBgLCBhbmQgSSBqdXN0IHJlYWxpemVkIHRoYXQmIzM5O3MgYWN0dWFsbHkgYW4gYWxpYXMgb3IgYSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uLCBgYnBmX3NrX2xvb2t1cF9hc3NpZ25gLiBHb29kIGNhdGNoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgYW5kIHdoZXJlIHRoZSBrZXJuZWwgaXMgdXNpbmcgYEJQRl9GVU5DX3NrX2Fzc2lnbmAuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBzbyBsZXQmIzM5O3MgY2hlY2sgaXQuIEkgbmVlZCB0byBnZXQgYSBsaXN0IG9mIGl0cyB1c2FnZSBhcyBpdCBpcyBpbnRlZ3JhbCB0byB0aGUgd29ya2luZ3Mgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0ZVTkNfc2tfYXNzaWduJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD02MzgyPWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg3LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYzODg6LyogQlBGX0ZVTkNfc2tfYXNzaWduIGZsYWdzIGluIGJwZl9za19sb29rdXAgY29udGV4dC4gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg5LWVudW0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzAtXHRcdHJldHVybiBcdTAwMjZicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NzcxOlx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYy04NzcyLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjA1MD1za19sb29rdXBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1NC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDU1Olx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1Ni1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD02MzgyPWVudW0ge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg3LVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYzODg6LyogQlBGX0ZVTkNfc2tfYXNzaWduIGZsYWdzIGluIGJwZl9za19sb29rdXAgY29udGV4dC4gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg5LWVudW0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg2NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgRnVuY3Rpb24gQXNzaWdubWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIHJldHVybmluZyBgYnBmX3NrX2Fzc2lnbl9wcm90b2AsIHdoaWNoIGluIHR1cm4gcG9pbnRzIHRvIGBicGZfc2tfYXNzaWduYC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgdGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGFzc2lnbmluZyBhIHNvY2tldCwgYHNrYCwgdG8gc29tZXRoaW5nLiBGdXJ0aGVybW9yZSwgYHNrX2xvb2t1cF9mdW5jX3Byb3RvYCByZXR1cm5zIGBicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90b2AsIHNvIHdlIGFyZSBsaWtlbHkgbG9va2luZyB1cCBhbmQgdGhlbiBhc3NpZ25pbmcvbW9kaWZ5aW5nIHNvbWV0aGluZyBoZXJlLiBBbHNvIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGFsc28gcmV0dXJucyBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG9gLCB3aGljaCBpbmRpY2F0ZXMgd2UmIzM5O3JlIGNhcGFibGUgb2YgY2hhbmdpbmcgdGhlIHByb3RvY29sIG9uIGFuIGBza2JgLgoKTm93IHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nOyBgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2tgIHNwZWNpZmljYWxseSByZWdpc3RlcnMgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCAqZm9yKiBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVENQIHJlcXVlc3Qgc29ja2V0cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sIChUQykgdXNpbmcgQlBGLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGF0JiMzOTtzIGludGVyZXN0aW5nLgoKTm93LCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGNvbmZpZ3MgdGllZCB0byBUQyBCUEYsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIGFuZCB0aGUgYEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgLi4uKWAgY2FsbCBpdHNlbGYuIEdpdmVuIHRoZSBUQyBjb250ZXh0LCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgLCBidXQgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBpbml0L0tjb25maWdgIGp1c3QgaW4gY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzAxLVxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxubmV0L3NjaGVkL0tjb25maWctNzAzLVx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIE5ldHdvcmsgU2NoZWR1bGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9ucyBmcm9tIDcwMCB0byA3MjAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgYXZhaWxhYmxlIG5ldHdvcmsgc2NoZWR1bGVyIGZlYXR1cmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGJ1aWxkIGZsYWdzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHJhbmdlIHRvIGNvdmVyIGEgc3BlY2lmaWMgc2V0IG9mIHNjaGVkdWxlcnMsIHBlcmhhcHMgYSByZWNlbnQgYWRkaXRpb24gb3IgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZ3JvdXAuIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4gNzE1Olx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXG4gNzE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFmZmljIFBvbGljaW5nXCYjMzQ7XG4gNzE3Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gNzE4Olx0XHRoZWxwXG4gNzE5Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZG8gdHJhZmZpYyBwb2xpY2luZywgaS5lLiBzdHJpY3RcbiA3MjA6XHRcdCAgYmFuZHdpZHRoIGxpbWl0aW5nLiBUaGlzIGFjdGlvbiByZXBsYWNlcyB0aGUgZXhpc3RpbmcgcG9saWNpbmdcbiA3MjE6XHRcdCAgbW9kdWxlLlxuIDcyMjpcdFxuIDcyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcG9saWNlLlxuIDcyNTpcdFxuIDcyNjpcdGNvbmZpZyBORVRfQUNUX0dBQ1RcbiA3Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgYWN0aW9uc1wmIzM0O1xuIDcyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDcyOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gbWFrZSBzdXJlIHRob3NlIEJQRiBvcHRpb25zIGFyZSBzZXQgY29ycmVjdGx5LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBib3RoIGBORVRfQ0xTX0JQRmAgYW5kIGBORVRfQUNUX0JQRmAgYXJlIGVuYWJsZWQuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHRoZSBpbmZyYXN0cnVjdHVyZSBJJiMzOTttIHdvcmtpbmcgb24sIHNvIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGFyZSBib3RoIHNldCBhbmQgcmVhZHkgdG8gZ28uIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGV5JiMzOTtyZSBub3QgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX0JQRnxjb25maWcgTkVUX0FDVF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTU1MD1jb25maWcgTkVUX0NMU19DR1JPVVBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1NjI6Y29uZmlnIE5FVF9DTFNfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXHR0cmlzdGF0ZSBcJiMzNDtCUEYtYmFzZWQgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTgzMD1jb25maWcgTkVUX0FDVF9WTEFOXG4tLVxubmV0L3NjaGVkL0tjb25maWctODQwLVxubmV0L3NjaGVkL0tjb25maWc6ODQxOmNvbmZpZyBORVRfQUNUX0JQRlxubmV0L3NjaGVkL0tjb25maWctODQyLVx0dHJpc3RhdGUgXCYjMzQ7QlBGIGJhc2VkIGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gd2UgbmVlZCB0byBhZGQgYEJQRl9TWVNDQUxMYCB0byB0aGUgY2hlY2tsaXN0LiBJdCYjMzk7cyBhIGtleSBwaWVjZSB0byB2ZXJpZnkuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgd2FudCB0byBxdWlja2x5IHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRob3NlIGNydWNpYWwgZnVuY3Rpb24gcHJvdG90eXBlczogYHRjX2Nsc19hY3RfZnVuY19wcm90b2AgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AuIFByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhvc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgd2lsbCBkaXJlY3RseSBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTQ1NjU9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1NjYtXG5uZXQvY29yZS9maWx0ZXIuYzo0NTY3OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1Njgtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gQlBGIFByb2dyYW0gTG9hZGluZyoqCgpPa2F5LCBzbyBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0byBhY3R1YWxseSAqbG9hZCogQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIG9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIEkgbmVlZCBgQlBGX1NZU0NBTExgLCBhbmQgZWl0aGVyIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JQRmAsIG9yIGBORVRfQUNUX0JQRmAsIHJpZ2h0PyBPYnZpb3VzIHRoYXQgYENPTkZJR19ORVRgIGlzIHJlbGV2YW50IGhlcmUgLSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29yay4gQnV0IHdoYXQgYWJvdXQgYENPTkZJR19JTkVUYD8gT3IgYENPTkZJR19JUFY2YCwgcG90ZW50aWFsbHk/CgpMb29raW5nIGF0IGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AsIEkgc2VlIHRoYXQgaXQgdXNlcyBgaW5ldF9yZXFzayhzaylgIGFuZCBgaXB2Nl9vbmx5X3NvY2soc2spYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCBJUHY0IGFuZCBJUHY2IG1pZ2h0IGJlIGF0IHBsYXkgaGVyZS4gTGV0IG1lIGNvbmZpcm0gaWYgZWl0aGVyIGBDT05GSUdfSU5FVGAgb3IgYENPTkZJR19JUFY2YCBhY3R1YWxseSBtYXR0ZXJzLiBUaGUgY2hlY2tzIGFyZSB3aXRoaW4gYGluZXRfcmVxc2soc2spLSZndDtyc2tfb3BzLSZndDtmYW1pbHkgPT0gZmFtaWx5O2AgYW5kIGBpcHY2X29ubHlfc29jayhzaylgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBpcyB0aGUgY29kZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGd1YXJkZWQgYnksIG9yIGRvZXMgaXQgb3RoZXJ3aXNlIGRlcGVuZCBvbiwgYENPTkZJR19JTkVUYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBmaWxlIGl0c2VsZiBmb3IgZGlyZWN0IHJlZmVyZW5jZXMgdG8gYENPTkZJR19JTkVUYCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0yMzEzPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxubmV0L2NvcmUvZmlsdGVyLmM6MjMyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTIzMjItc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yNDI0PXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNDI5LX1cbm5ldC9jb3JlL2ZpbHRlci5jOjI0MzA6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy0yNDMxLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU4MDg9c3RhdGljIGludCBfX2JwZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01ODE1LVx0XHRyZXR1cm4gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTgxNjpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXG5uZXQvY29yZS9maWx0ZXIuYy01ODE3LVx0XHRyZXR1cm4gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTgxOS1cdFx0cmV0dXJuIHNvbF9pcHY2X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIwOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXG5uZXQvY29yZS9maWx0ZXIuYy01ODIxLVx0XHRyZXR1cm4gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU4Mzk9c3RhdGljIGludCBfX2JwZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01ODUwLVx0XHRlcnIgPSBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU4NTE6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU4NTItXHRcdGVyciA9IHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTg1MzpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXG5uZXQvY29yZS9maWx0ZXIuYy01ODU0LVx0XHRlcnIgPSBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYxNjc9QlBGX0NBTExfNShicGZfc29ja19vcHNfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYxNzItXG5uZXQvY29yZS9maWx0ZXIuYzo2MTczOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmMtNjE3NC1cdCAgICBvcHRuYW1lIFx1MDAzZT0gVENQX0JQRl9TWU4gXHUwMDI2XHUwMDI2IG9wdG5hbWUgXHUwMDNjPSBUQ1BfQlBGX1NZTl9NQUMpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjA5PUJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTctXG5uZXQvY29yZS9maWx0ZXIuYzo2MjE4Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCAhc2tfZnVsbHNvY2soc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtNjIxOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIzND1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIzNi17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjM3OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzOC1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjYxLVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6NjI2MjojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTYyNjMtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjMzMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzMzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy02MzMyLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYzNjE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjM4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02MzgyLXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDM9QlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjcxMi1cdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjcxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MTQtXHRjYXNlIEFGX0lORVQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjczNz1CUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY3NTYtXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY3NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02NzU4LVx0Y2FzZSBBRl9JTkVUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxODg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTk3LVxubmV0L2NvcmUvZmlsdGVyLmM6NzE5ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTktc3RhdGljIHN0cnVjdCBzb2NrICpza19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2Nl9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDE4LVxubmV0L2NvcmUvZmlsdGVyLmM6ODQxOTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTg0MjAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ5Nz1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NTE5LVx0XHRyZXR1cm4gXHUwMDI2YnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODUyMDojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjEtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODUyOC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NTI5OiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xubmV0L2NvcmUvZmlsdGVyLmMtODUzMC1cdGNhc2UgQlBGX0ZVTkNfc2tfc3RvcmFnZV9nZXQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODYwNj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NjMyLSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMzojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzQtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODc1MS0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NTI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NzUzLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg3OTI9eGRwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODgyMC1cdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODgyMTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjItXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODg2Nz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4OTUtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X25ldG5zX2Nvb2tpZV9zb2NrX29wc19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4OTY6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04ODk3LVx0Y2FzZSBCUEZfRlVOQ19sb2FkX2hkcl9vcHQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODkwNC1cdFx0cmV0dXJuIFx1MDAyNmJwZl90Y3Bfc29ja19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg5MDU6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy04OTA2LVx0ZGVmYXVsdDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04OTQ5PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg5NzMtXHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NzQ6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04OTc1LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNjg5PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTczMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNzMyOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTE3MzMtc3RhdGljIHZvaWQgYnBmX2luaXRfcmV1c2Vwb3J0X2tlcm4oc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICpyZXVzZV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjExPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIxNzojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjE4LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjY4PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzAtXHQvKiBCVEYgdHlwZXMgZm9yIHRjcF90aW1ld2FpdF9zb2NrIGFuZCBpbmV0X3RpbWV3YWl0X3NvY2sgYXJlIG5vdFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNzE6XHQgKiBnZW5lcmF0ZWQgaWYgQ09ORklHX0lORVQ9bi4gVHJpZ2dlciBhbiBleHBsaWNpdCBnZW5lcmF0aW9uIGhlcmUuXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3Mi1cdCAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNzY6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3Ny1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI5Nz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI5OC17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjI5OTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzAwLVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcF9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNzcwPV9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc4My1cdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjc4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzg1LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBGdW5jdGlvbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLCB3aGljaCBmcm9tIG15IG5vdGVzLCBzaG91bGQgYmUgYXJvdW5kIGxpbmUgMTI1MzggaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIHNlZW1zIG5ldHdvcmtpbmctcmVsYXRlZCwgSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGlmIGl0cyB1c2UgaXMgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIGBDT05GSUdfSU5FVGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGhlcmUuIFNvLCBsZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIGJsb2NrIGVuY29tcGFzc2luZyBsaW5lcyAxMjUzMCB0aHJvdWdoIDEyNTQ1IG9mIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBxdWlja2x5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgc29tZXRoaW5nIGxpa2UgYW4gYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgbWF5YmUgZXZlbiBhbiBgI2lmYCB0aGF0IG1pZ2h0IGJlIGdhdGluZyB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBob3cgaXQgcmVsYXRlcyB0byBnZW5lcmFsIGludGVybmV0d29ya2luZyBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTMwOlx0XG4xMjUzMTpcdFx0dW4gPSAoc3RydWN0IHNvY2thZGRyX3VuICopc2Ffa2Vybi1cdTAwM2V1YWRkcjtcbjEyNTMyOlx0XHRtZW1jcHkodW4tXHUwMDNlc3VuX3BhdGgsIHN1bl9wYXRoLCBzdW5fcGF0aF9fc3opO1xuMTI1MzM6XHRcdHNhX2tlcm4tXHUwMDNldWFkZHJsZW4gPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSAmIzQzOyBzdW5fcGF0aF9fc3o7XG4xMjUzNDpcdFxuMTI1MzU6XHRcdHJldHVybiAwO1xuMTI1MzY6XHR9XG4xMjUzNzpcdFxuMTI1Mzg6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxuMTI1Mzk6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl90Y3BfcmVxX2F0dHJzICphdHRycywgaW50IGF0dHJzX19zeilcbjEyNTQwOlx0e1xuMTI1NDE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpXG4xMjU0MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XG4xMjU0MzpcdFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcztcbjEyNTQ0Olx0XHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XG4xMjU0NTpcdFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7XG4xMjU0NjpcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xuMTI1NDc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjEyNTQ4Olx0XHRfX3UxNiBtaW5fbXNzO1xuMTI1NDk6XHRcdHUzMiB0c29mZiA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVENQL0lQIFN0YWNrIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZS4gTXkgZXllcyBpbW1lZGlhdGVseSBqdW1wIHRvIGxpbmUgMTI1NDE6IGAjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpYC4gT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jaywgYW5kIHRoaXMgcGFydGljdWxhciBvbmUgaXMgbGlrZWx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBTWU4gY29va2llcyBiYXNlZCBvbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgQ09ORklHX1NZTl9DT09LSUVTYCBpcyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb24gaGVyZSwgc28gSSBjYW4gY2hlY2sgaWYgU1lOIGNvb2tpZXMgYXJlIGVuYWJsZWQgb3Igbm90LgoKTm93LCBsZXQmIzM5O3MgZXhwYW5kIG15IHZpZXcuIEkmIzM5O2xsIGNoZWNrIHdoYXQgdGhlIGNvZGUgZG9lczogbGluZXMgMTI1OTUtMTI2MjAsIHByb2JhYmx5IGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBhc3BlY3QuIEkgY2FuIHNlZSB0aGF0IHRoaXMgc2VnbWVudCBpcyBjcnVjaWFsIGZvciBoYW5kbGluZyBTWU4gZmxvb2QgcHJvdGVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgU1lOIGNvb2tpZXMgYmVpbmcgZW5hYmxlZC4gSXQgaXMgbGlrZWx5IGNvbmZpZ3VyaW5nIGhvdyB0aGUga2VybmVsIHJlc3BvbmRzIHRvIGNvbm5lY3Rpb24gYXR0ZW1wdHMsIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBTWU4gY29va2llIG1lY2hhbmlzbSBpdHNlbGYuIFByb2JhYmx5IHNldHRpbmcgdXAgdGhlIHBhcmFtZXRlcnMsIGRldGVybWluaW5nIHRoZSBmbG93LCB0aGUgY29uZGl0aW9ucywgYW5kIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24sIHRvbywgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcG9ydGlvbiBpcyBxdWl0ZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AvSVAgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwMDpcdFx0XHRpZiAoIVJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3RpbWVzdGFtcHMpKVxuMTI2MDE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNjAyOlx0XG4xMjYwMzpcdFx0XHR0c29mZiA9IGF0dHJzLVx1MDAzZXJjdl90c2VjciAtIHRjcF9uc190b190cyhhdHRycy1cdTAwM2V1c2VjX3RzX29rLCB0Y3BfY2xvY2tfbnMoKSk7XG4xMjYwNDpcdFx0fVxuMTI2MDU6XHRcbjEyNjA2Olx0XHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcbjEyNjA3Olx0XHRpZiAoIXJlcSlcbjEyNjA4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTI2MDk6XHRcbjEyNjEwOlx0XHRpcmVxID0gaW5ldF9yc2socmVxKTtcbjEyNjExOlx0XHR0cmVxID0gdGNwX3JzayhyZXEpO1xuMTI2MTI6XHRcbjEyNjEzOlx0XHRyZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gc2s7XG4xMjYxNDpcdFx0cmVxLVx1MDAzZXN5bmNvb2tpZSA9IDE7XG4xMjYxNTpcdFx0cmVxLVx1MDAzZW1zcyA9IGF0dHJzLVx1MDAzZW1zcztcbjEyNjE2Olx0XHRyZXEtXHUwMDNldHNfcmVjZW50ID0gYXR0cnMtXHUwMDNlcmN2X3RzdmFsO1xuMTI2MTc6XHRcbjEyNjE4Olx0XHRpcmVxLVx1MDAzZXNuZF93c2NhbGUgPSBhdHRycy1cdTAwM2VzbmRfd3NjYWxlO1xuMTI2MTk6XHRcdGlyZXEtXHUwMDNlcmN2X3dzY2FsZSA9IGF0dHJzLVx1MDAzZXJjdl93c2NhbGU7XG4xMjYyMDpcdFx0aXJlcS1cdTAwM2V0c3RhbXBfb2tcdD0gISFhdHRycy1cdTAwM2V0c3RhbXBfb2s7XG4xMjYyMTpcdFx0aXJlcS1cdTAwM2VzYWNrX29rID0gISFhdHRycy1cdTAwM2VzYWNrX29rO1xuMTI2MjI6XHRcdGlyZXEtXHUwMDNld3NjYWxlX29rID0gISFhdHRycy1cdTAwM2V3c2NhbGVfb2s7XG4xMjYyMzpcdFx0aXJlcS1cdTAwM2VlY25fb2sgPSAhIWF0dHJzLVx1MDAzZWVjbl9vaztcbjEyNjI0Olx0XG4xMjYyNTpcdFx0dHJlcS1cdTAwM2VyZXFfdXNlY190cyA9ICEhYXR0cnMtXHUwMDNldXNlY190c19vaztcbjEyNjI2Olx0XHR0cmVxLVx1MDAzZXRzX29mZiA9IHRzb2ZmO1xuMTI2Mjc6XHRcbjEyNjI4Olx0XHRza2Jfb3JwaGFuKHNrYik7XG4xMjYyOTpcdFx0c2tiLVx1MDAzZXNrID0gcmVxX3RvX3NrKHJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uICoqSW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFNZTiBjb29raWVzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGV5JiMzOTtyZSAqbm90KiBlbmFibGVkLioqIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHNvIHdoYXQgaGFwcGVucyBpZiBgQ09ORklHX1NZTl9DT09LSUVTYCBpc24mIzM5O3Qgc2V0PyBXaGF0JiMzOTtzIHRoZSBjb2RlIHBhdGggdGhlbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWx0ZXJuYXRpdmUgYmVoYXZpb3IuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgMTI2MzAtMTI2NDUuIFRoYXQgc2hvdWxkIGJlIHRoZSByZWdpb24gaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBjb25kaXRpb25hbCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGFsdGVybmF0aXZlIGhhbmRsaW5nIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGUgbWFjcm8gbm90IGJlaW5nIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYzMDpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xuMTI2MzE6XHRcbjEyNjMyOlx0XHRyZXR1cm4gMDtcbjEyNjMzOlx0I2Vsc2VcbjEyNjM0Olx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjYzNTpcdCNlbmRpZlxuMTI2MzY6XHR9XG4xMjYzNzpcdFxuMTI2Mzg6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXAoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpza29wcyxcbjEyNjM5Olx0XHRcdFx0XHRcdCAgICAgIHU2NCBmbGFncylcbjEyNjQwOlx0e1xuMTI2NDE6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xMjY0MjpcdFxuMTI2NDM6XHRcdGlmIChza29wcy1cdTAwM2VvcCAhPSBCUEZfU09DS19PUFNfVFNUQU1QX1NFTkRNU0dfQ0IpXG4xMjY0NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjY0NTpcdFxuMTI2NDY6XHRcdGlmIChmbGFncylcbjEyNjQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI2NDg6XHRcbjEyNjQ5Olx0XHRza2IgPSBza29wcy1cdTAwM2Vza2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODkyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgYW5kIFNZTiBDb29raWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byB0cmFjayBoZXJlLiBGaXJzdCwgaWYgYENPTkZJR19TWU5fQ09PS0lFU2AgaXMgKm5vdCogZW5hYmxlZCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBmbGF0IG91dCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdG9yIG9mIGEgZGVwZW5kZW5jeS4gSSBub3RpY2VkIHRoaXMgb24gbGluZSAxMjU0MSwgdGhlIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpYCBjaGVjayBpcyBsaXRlcmFsbHkgKnJpZ2h0IGFmdGVyKiB0aGUgZnVuY3Rpb24mIzM5O3MgZW50cnkgcG9pbnQhIE1lYW5pbmcgdGhhdCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgIHdpdGhpbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIGlzIG9ubHkgZ29pbmcgdG8gYmUgaGl0IGlmIFNZTiBjb29raWVzICphcmUqIGVuYWJsZWQuCgpOb3csIEkmIzM5O20gYWxzbyBzZWVpbmcgcmVmZXJlbmNlcyB0byBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9CUEZgLCBhbmQgYE5FVF9DTFNfQlBGYC4gVGhpcyBtYWtlcyBtZSB0aGluayBhYm91dCBob3cgQlBGIGtmdW5jcyBhcmUgbWFkZSBhdmFpbGFibGUgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFdoYXQgZW5hYmxlcyAqdGhhdCogZnVuY3Rpb25hbGl0eT8gTmF0dXJhbGx5LCBpdCYjMzk7cyBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19ORVRgLgoKSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgcmVmcmVzaCBteSBtZW1vcnkgYWJvdXQgYENPTkZJR19TWU5fQ09PS0lFU2AgaW4gdGhlIEtjb25maWcgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNZTl9DT09LSUVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTI1OT1jb25maWcgSVBfUElNU01fVjJcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTI2Ny1cbm5ldC9pcHY0L0tjb25maWc6MjY4OmNvbmZpZyBTWU5fQ09PS0lFU1xubmV0L2lwdjQvS2NvbmZpZy0yNjktXHRib29sIFwmIzM0O0lQOiBUQ1Agc3luY29va2llIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIElQdjQgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIElQdjQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGp1bXAgb3ZlciBhcm91bmQgbGluZSAyNjguIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBzdGFydCBkaWdnaW5nIHdoZW4gSSYjMzk7bSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVnYXJkaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIHN3aXRjaGVzLiBUaGlzIGlzIHdoZXJlIEkgb2Z0ZW4gZmluZCB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgSVB2NC1yZWxhdGVkIGZlYXR1cmVzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZCwgb3IgaWYgSSBhbSBqdXN0IHRyeWluZyB0byBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLiBUaW1lIHRvIGdldCBjb2RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjY1Olx0XHQgIGdhdGVkLTUpLiBUaGlzIHJvdXRpbmcgcHJvdG9jb2wgaXMgbm90IHVzZWQgd2lkZWx5LCBzbyBzYXkgTiB1bmxlc3NcbiAyNjY6XHRcdCAgeW91IHdhbnQgdG8gcGxheSB3aXRoIGl0LlxuIDI2NzpcdFxuIDI2ODpcdGNvbmZpZyBTWU5fQ09PS0lFU1xuIDI2OTpcdFx0Ym9vbCBcJiMzNDtJUDogVENQIHN5bmNvb2tpZSBzdXBwb3J0XCYjMzQ7XG4gMjcwOlx0XHRoZWxwXG4gMjcxOlx0XHQgIE5vcm1hbCBUQ1AvSVAgbmV0d29ya2luZyBpcyBvcGVuIHRvIGFuIGF0dGFjayBrbm93biBhcyBcJiMzNDtTWU5cbiAyNzI6XHRcdCAgZmxvb2RpbmdcJiMzNDsuIFRoaXMgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrIHByZXZlbnRzIGxlZ2l0aW1hdGUgcmVtb3RlXG4gMjczOlx0XHQgIHVzZXJzIGZyb20gYmVpbmcgYWJsZSB0byBjb25uZWN0IHRvIHlvdXIgY29tcHV0ZXIgZHVyaW5nIGFuIG9uZ29pbmdcbiAyNzQ6XHRcdCAgYXR0YWNrIGFuZCByZXF1aXJlcyB2ZXJ5IGxpdHRsZSB3b3JrIGZyb20gdGhlIGF0dGFja2VyLCB3aG8gY2FuXG4gMjc1Olx0XHQgIG9wZXJhdGUgZnJvbSBhbnl3aGVyZSBvbiB0aGUgSW50ZXJuZXQuXG4gMjc2Olx0XG4gMjc3Olx0XHQgIFNZTiBjb29raWVzIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoaXMgdHlwZSBvZiBhdHRhY2suIElmIHlvdVxuIDI3ODpcdFx0ICBzYXkgWSBoZXJlLCB0aGUgVENQL0lQIHN0YWNrIHdpbGwgdXNlIGEgY3J5cHRvZ3JhcGhpYyBjaGFsbGVuZ2VcbiAyNzk6XHRcdCAgcHJvdG9jb2wga25vd24gYXMgXCYjMzQ7U1lOIGNvb2tpZXNcJiMzNDsgdG8gZW5hYmxlIGxlZ2l0aW1hdGUgdXNlcnMgdG9cbiAyODA6XHRcdCAgY29udGludWUgdG8gY29ubmVjdCwgZXZlbiB3aGVuIHlvdXIgbWFjaGluZSBpcyB1bmRlciBhdHRhY2suIFRoZXJlXG4gMjgxOlx0XHQgIGlzIG5vIG5lZWQgZm9yIHRoZSBsZWdpdGltYXRlIHVzZXJzIHRvIGNoYW5nZSB0aGVpciBUQ1AvSVAgc29mdHdhcmU7XG4gMjgyOlx0XHQgIFNZTiBjb29raWVzIHdvcmsgdHJhbnNwYXJlbnRseSB0byB0aGVtLiBGb3IgdGVjaG5pY2FsIGluZm9ybWF0aW9uXG4gMjgzOlx0XHQgIGFib3V0IFNZTiBjb29raWVzLCBjaGVjayBvdXQgXHUwMDNjaHR0cHM6Ly9jci55cC50by9zeW5jb29raWVzLmh0bWxcdTAwM2UuXG4gMjg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBJIG5lZWQuIGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzIGRlZmluaXRlbHkgaW4gYG5ldC9pcHY0L0tjb25maWdgLCBhbmQgaXQgZGVwZW5kcyBvbiBgQ09ORklHX0lORVRgLCBhcyBleHBlY3RlZC4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgYENPTkZJR19JUFY2YCBmb3IgSVB2NiBwYWNrZXQgYW5kIHNvY2tldCBzdXBwb3J0LiBUaGUgY29kZSBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIHBhY2tldCYjMzk7cyBwcm90b2NvbCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzIGZhbWlseSwgYW5kIHRoZXJlJiMzOTtzIGEgY29tcGF0aWJpbGl0eSBjaGVjayB0byBwcmV2ZW50IGlzc3VlcyBsaWtlIGFuIGBBRl9JTkVUYCBzb2NrZXQgcmVjZWl2aW5nIGFuIElQdjYgcGFja2V0LCByZXR1cm5pbmcgYC1FQUZOT1NVUFBPUlRgLiBTbywgdGhhdCBtZWFucyBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX05FVGAsIGBDT05GSUdfSU5FVGAsIGFuZCBgQ09ORklHX0lQVjZgLgoKTm93LCBtb3ZpbmcgYmV5b25kIGJhc2ljIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIGludG8gVEMgQlBGLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19ORVRfQ0xTX0FDVGAsIGFuZCBgQ09ORklHX1NZTl9DT09LSUVTYCBhcyB0aGVzZSBzZWVtIGltcG9ydGFudC4gV2FpdCwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfQUNUX0JQRmAgb3IgYENPTkZJR19ORVRfQ0xTX0JQRmAuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0aGUgQlBGLWJhc2VkIGNsYXNzaWZpZXIgYW5kIGFjdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyB0byBsb2FkIGFuZCBydW4gVEMgQlBGIGZvciBib3RoIHRoZSBjbGFzc2lmaWVyIGFuZCBhY3Rpb24uIExvb2tpbmcgZnVydGhlciwgaXQgc2VlbXMgYENPTkZJR19ORVRfQ0xTX0JQRmAgaXMgdGhlIEJQRi1iYXNlZCBjbGFzc2lmaWVyIChgY2xzX2JwZmApLCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgVEMgQlBGIChgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgKS4gQW5kLCBgQ09ORklHX05FVF9BQ1RfQlBGYCBpcyB0aGUgQlBGLWJhc2VkIGFjdGlvbiAoYGFjdF9icGZgKSwgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAuIFJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBORVRfQ0xTX0JQRmAgaW4gYG5ldC9zY2hlZC9LY29uZmlnYCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTYxLVxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxubmV0L3NjaGVkL0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUgZm9yIE5ldHdvcmsgU2NoZWR1bGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBpcyBjb25maWd1cmVkLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA1NjAgdGhyb3VnaCA1ODAgb2YgYG5ldC9zY2hlZC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBhcmUgbGlrZWx5IHRvIGJlLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkLCBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgcXVldWVpbmcgZGlzY2lwbGluZXMsIHRyYWZmaWMgc2hhcGluZywgYW5kIHBlcmhhcHMgc29tZSBwcmlvcml0aXphdGlvbiBzZXR0aW5ncy4gVGhlIHJlYWwgZ29hbCBpcyB0byByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgb3JnYW5pemVkIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgbGF0ZXIgY2hhbmdlcywgZXNwZWNpYWxseSBpZiBJIHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IHNjaGVkdWxlciBvciB0d2VhayBhbiBleGlzdGluZyBvbmUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkLCBhcyBpcyB0eXBpY2FsIGZvciBLY29uZmlnIGZpbGVzLCBidXQgZXZlbiBpZiBpdCBpc24mIzM5O3QsIEkgc2hvdWxkIGJlIGFibGUgdG8gcGFyc2UgdGhlIGludGVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfY2dyb3VwLlxuIDU2MTpcdFxuIDU2MjpcdGNvbmZpZyBORVRfQ0xTX0JQRlxuIDU2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbiA1NjQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTY1Olx0XHRoZWxwXG4gNTY2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cbiA1Njc6XHRcdCAgcHJvZ3JhbW1hYmxlIEJQRiAoSklUJiMzOTtlZCkgZmlsdGVycyBhcyBhbiBhbHRlcm5hdGl2ZSB0byBlbWF0Y2hlcy5cbiA1Njg6XHRcbiA1Njk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuIDU3MDpcdFx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cbiA1NzE6XHRcbiA1NzI6XHRjb25maWcgTkVUX0NMU19GTE9XRVJcbiA1NzM6XHRcdHRyaXN0YXRlIFwmIzM0O0Zsb3dlciBjbGFzc2lmaWVyXCYjMzQ7XG4gNTc0Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDU3NTpcdFx0aGVscFxuIDU3NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXG4gNTc3Olx0XHQgIGEgY29uZmlndXJhYmxlIGNvbWJpbmF0aW9uIG9mIHBhY2tldCBrZXlzIGFuZCBtYXNrcy5cbiA1Nzg6XHRcbiA1Nzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuIDU4MDpcdFx0ICBiZSBjYWxsZWQgY2xzX2Zsb3dlci5cbiA1ODE6XHRcbiA1ODI6XHRjb25maWcgTkVUX0NMU19NQVRDSEFMTFxuIDU4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWF0Y2gtYWxsIGNsYXNzaWZpZXJcJiMzNDtcbiA1ODQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgZUJQRiBDbGFzc2lmaWVyIGFuZCBBY3Rpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGNsc19icGZgIGFuZCBgYWN0X2JwZmAgYXJlIGVuYWJsZWQgYW5kIGl0IHNlZW1zIGxpa2UgYE5FVF9DTFNfQlBGYCBhbmQgYE5FVF9BQ1RfQlBGYCBhcmUgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgdGhlbS4gQnV0IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgYnJvYWRlciBwaWN0dXJlLCBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBpbnZlc3RpZ2F0ZSBpZiBgQ09ORklHX05FVF9TQ0hFRGAgaGFzIHNvbWUgcmVsZXZhbmNlIGhlcmUsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGRlcGVuZGVuY3kgaW4gcGxheS4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9DTFNfQlBGYCwgaW4gdHVybiwgZGVwZW5kIG9uIGBORVRfU0NIRURgLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBvcHRpb25zIHdpbGwgY2xhcmlmeSBob3cgdGhlIGVCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMzkKCQkJCQkJCW91dHB1dDogMjM4CgkJCQkJCQl0aG91Z2h0czogMjM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgU29ja2V0IEFzc2lnbm1lbnQgYW5kIFByb3RvY29sIFRyYW5zbGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLCBhbmQgbW9kaWZpZXMgYSBmZXcgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCwgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIHRvIGNoZWNrIGZvciBhZGRyZXNzIGZhbWlseSBjb21wYXRpYmlsaXR5IHdoZW4gYXNzaWduaW5nIG9yIHJlLWFzc2lnbmluZyBzb2NrZXRzIHRvIHNrX2J1ZmZzLiBXZSYjMzk7cmUgdGFsa2luZyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgaGVyZSwgc28gaXQmIzM5O3MgaW1wb3J0YW50IHRvIGdldCBpdCByaWdodC4KClNwZWNpZmljYWxseSwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCB2ZXJpZmllcyBpZiBhIHNvY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSAoZS5nLiwgSVB2NCBvciBJUHY2KSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIG9mIGFuIGluY29taW5nIHBhY2tldC4gSWYgdGhlIGZhbWlseSBjaGVjayBmYWlscywgYGJwZl9za19hc3NpZ25gIGFuZCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIG5vdyByZXR1cm4gYC1FQUZOT1NVUFBPUlRgLiBUaGUgcHJvdG9jb2wgdHJhbnNsYXRpb24gY2FzZSB3aXRoIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaXMgYWxzbyBzaWduaWZpY2FudDsgaXQgaW52YWxpZGF0ZXMgYW55IHByZS1mZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50IGlmIHRoZSB0cmFuc2xhdGlvbiByZXN1bHRzIGluIGFuIGluY29tcGF0aWJsZSBhZGRyZXNzIGZhbWlseSBhbmQgb3JwaGFucyB0aGUgc2tiLCB3aGljaCBpcyBleHBlY3RlZCBiZWhhdmlvdXIuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBtb2RpZnkgQlBGIG5ldHdvcmtpbmcgaGVscGVycywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIGV4aXN0aW5nIEJQRiBwcm9ncmFtcywgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IG1pbmRmdWwgb2YgZHVhbC1zdGFjayBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMgYW5kIFNZTi1yZWNlaXZlZCByZXF1ZXN0IHNvY2tldHMgdG8gbWFrZSBzdXJlIHRoZSBmYW1pbHkgY2hlY2tzIGFyZSB3b3JraW5nIGFzIHRoZXkgc2hvdWxkLiBBbHNvLCB0ZXN0aW5nIHdpdGggcHJvdG9jb2wgdHJhbnNsYXRpb25zIHRvL2Zyb20gSVB2NC9JUHY2IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBjb25maXJtIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIgb2YgcHJlZmV0Y2hlZCBzb2NrZXQgaW52YWxpZGF0aW9uLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBgTkVUX0NMU19CUEZgLCBgU1lOX0NPT0tJRVNgLCBgSU5FVGAsIGFuZCBgSVBWNmAuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBiYXNlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgcGF0Y2guIE5vIG90aGVyIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgc2VlbXMgcmVsZXZhbnQgZm9yIHRoaXMgcGF0Y2guIEkgdGhpbmsgdGhpcyBjb3ZlcnMgaXQuIExldCYjMzk7cyBnZXQgdG8gdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtTWU5fQ09PS0lFUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfYXNzaWduX2ZhbWlseV9vayYjMzQ7LAogICAgJiMzNDticGZfc2tfYXNzaWduJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3Byb3RvJiMzNDssCiAgICAmIzM0O2JwZl9za19hc3NpZ25fdGNwX3JlcXNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDssCiAgICAmIzM0O1NZTl9DT09LSUVTJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19hc3NpZ25fZmFtaWx5X29rJiMzNDssCiAgICAmIzM0O2JwZl9za19hc3NpZ24mIzM0OywKICAgICYjMzQ7YnBmX3NrYl9jaGFuZ2VfcHJvdG8mIzM0OywKICAgICYjMzQ7YnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgYWRkcmVzcyBmYW1pbHkgdmFsaWRhdGlvbiAoYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2spIGluIEJQRiBzb2NrZXQgYXNzaWdubWVudCBoZWxwZXJzIChicGZfc2tfYXNzaWduLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaykgYW5kIGRyb3BzIHByZWZldGNoZWQgc29ja2V0IGFzc2lnbm1lbnRzIGR1cmluZyBwcm90b2NvbCB0cmFuc2xhdGlvbiBpbiBicGZfc2tiX2NoYW5nZV9wcm90by4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBCUEYsIHNwZWNpZmljYWxseSBoYW5kbGluZyBUQ1AgU1lOX1JFQ1YgcmVxdWVzdCBzb2NrcywgSVB2NC1tYXBwZWQgSVB2NiBzb2NrZXRzLCBhbmQgTDMgcHJvdG9jb2wgdHJhbnNsYXRpb24sIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIHJlZ3Jlc3Npb25zIG9yIGludmFyaWFudCB2aW9sYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0JiMzOTtzIGFkZHJlc3MgZmFtaWx5IGluY29tcGF0aWJsZS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cdTAwM2Vwcm90b2NvbGAsIGBzay1cdTAwM2Vza19mYW1pbHlgLCBgc2stXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXG4yLiBJbmZvLWxlYWtzOiBObyBkYXRhIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWM5MDU5MDcyNmIwNjNkMDAyNGU5MmM1ZTg3NWRlMWMwMDgxZGZkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI2NTksNiAmIzQzOzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIgewogICogCQljaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS4KICAqIAkJVGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLgogICoKJiM0MzsgKgkJT24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzCiYjNDM7ICoJCWZhbWlseSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHByb3RvY29sLiBBc3NpZ24gYQomIzQzOyAqCQljb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC4KJiM0MzsgKgogICogCQlBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdAogICogCQliZSBsZWZ0IGF0IHplcm8uCiAgKgpAQCAtNDU2OCw2ICYjNDM7NDU3MiwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJKiotRU9QTk9UU1VQUCoqIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUKICAqCQlhIGNhbGwgZnJvbSBvdXRzaWRlIG9mIFRDIGluZ3Jlc3MuCiAgKgomIzQzOyAqCQkqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoCiYjNDM7ICoJCXRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqCiYjNDM7ICoJCXNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuCiYjNDM7ICoKICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpCiAgKglEZXNjcmlwdGlvbgogICoJCUhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjc5YTBlNDg0ZDlkZDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0zNDkxLDYgJiM0MzszNDkxLDMyIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bykKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGZhbWlseTsKJiM0MzsKJiM0MzsJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJZmFtaWx5ID0gQUZfSU5FVDY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi8KJiM0MzsJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKQomIzQzOwkJcmV0dXJuIGluZXRfcmVxc2soc2spLSZndDtyc2tfb3BzLSZndDtmYW1pbHkgPT0gZmFtaWx5OwomIzQzOwomIzQzOwlyZXR1cm4gc2stJmd0O3NrX2ZhbWlseSA9PSBmYW1pbHkgfHwKJiM0MzsJICAgICAgIChmYW1pbHkgPT0gQUZfSU5FVCAmYW1wOyZhbXA7CiYjNDM7CQlzay0mZ3Q7c2tfZmFtaWx5ID09IEFGX0lORVQ2ICZhbXA7JmFtcDsKJiM0MzsJCSFpcHY2X29ubHlfc29jayhzaykpOwomIzQzO30KJiM0MzsKIEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90bywKIAkgICB1NjQsIGZsYWdzKQogewpAQCAtMzUyMSw2ICYjNDM7MzU0NywxMSBAQCBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAomIzQzOwkvKiBQcm90b2NvbCB0cmFuc2xhdGlvbiBjYW4gaW52YWxpZGF0ZSBhbiBlYXJsaWVyIHNvY2tldCBhc3NpZ25tZW50LiAqLwomIzQzOwlpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItJmd0O3NrKSkKJiM0MzsJCXNrYl9vcnBoYW4oc2tiKTsKJiM0MzsKIAlpZiAoc2tiX3ZhbGlkX2RzdChza2IpKQogCQlza2JfZHN0X2Ryb3Aoc2tiKTsKIApAQCAtNzk4OSw2ICYjNDM7ODAyMCw4IEBAIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncykKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAlpZiAoc2tfdW5oYXNoZWQoc2spKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CWlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpCiYjNDM7CQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOwogCSAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEyNTI2LDYgJiM0MzsxMjU1OSw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssCiAJaWYgKG5ldCAhPSBzb2NrX25ldChzaykpCiAJCXJldHVybiAtRU5FVFVOUkVBQ0g7CiAKJiM0MzsJaWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSkKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwomIzQzOwogCXN3aXRjaCAoc2tiLSZndDtwcm90b2NvbCkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlvcHMgPSAmYW1wO3RjcF9yZXF1ZXN0X3NvY2tfb3BzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI2NTksNiAmIzQzOzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIgewogICogCQljaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS4KICAqIAkJVGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLgogICoKJiM0MzsgKgkJT24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzCiYjNDM7ICoJCWZhbWlseSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHByb3RvY29sLiBBc3NpZ24gYQomIzQzOyAqCQljb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC4KJiM0MzsgKgogICogCQlBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdAogICogCQliZSBsZWZ0IGF0IHplcm8uCiAgKgpAQCAtNDU2OCw2ICYjNDM7NDU3MiwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJKiotRU9QTk9UU1VQUCoqIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUKICAqCQlhIGNhbGwgZnJvbSBvdXRzaWRlIG9mIFRDIGluZ3Jlc3MuCiAgKgomIzQzOyAqCQkqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoCiYjNDM7ICoJCXRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqCiYjNDM7ICoJCXNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuCiYjNDM7ICoKICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpCiAgKglEZXNjcmlwdGlvbgogICoJCUhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEV2YWx1YXRpb24gb2YgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqbWlnaHQqIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gYmUgc3VyZSwgdGhvdWdoLgoKRmlyc3QsIHRoZSBjb21taXQgdGl0bGUgc2F5cyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7LCBzbyBpdCYjMzk7cyBwcm9iYWJseSBhbHJlYWR5IG9uIHRoZSByYWRhciBmb3IgZnV6emluZywgYnV0IGl0IGlzIGltcG9ydGFudCB0byBiZSBjb21wcmVoZW5zaXZlLiBJdCBtb2RpZmllcyBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCwgYG5ldC9jb3JlL2ZpbHRlci5jYCwgYW5kIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLiBUaGUgY2hhbmdlcyBpbiB0aGUgaGVhZGVyIGZpbGVzIGFyZSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY29yZSBsb2dpYywgd2hpY2ggaXMgd2hlcmUgbXkgYXR0ZW50aW9uIHdpbGwgZm9jdXMuCgpJbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBJJiMzOTttIHNlZWluZyBhIG5ldyBmdW5jdGlvbiwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC4gSXQgYXBwZWFycyB0byBiZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmFtaWx5IG9mIHRoZSBzb2NrZXQgbWF0Y2hlcyB0aGUgZmFtaWx5IG9mIHRoZSBwYWNrZXQgYmFzZWQgb24gdGhlIHByb3RvY29sLiBJbnRlcmVzdGluZy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAgY2hlY2tzLCBzbyB0aGF0JiMzOTtzIGEga2V5IGFyZWEuIFRoZSBmdW5jdGlvbiBjaGVja3MgZm9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgd2hpY2ggaXMgd29ydGggcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBpbiB0aGlzIGNhc2UuCgpDcnVjaWFsbHksIHRoaXMgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCAuLi4pYCB3aGVyZSBhbiBvcnBoYW4gaXMgY2FsbGVkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBUaGVuLCB0aGUgc2FtZSBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIC4uLilgIGFuZCBgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKC4uLilgIHdoZXJlIGBFQUZOT1NVUFBPUlRgIGlzIHJldHVybmVkLiBUaGlzIGltcGxpZXMgc29tZSBmb3JtIG9mIHNvY2tldCBmYW1pbHkgdmFsaWRhdGlvbiwgYW5kIGEgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzLgoKTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgbmV3IGNoZWNrcyBvciB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gYHNrYl9vcnBoYW5gIGhhdmUgaW50cm9kdWNlZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGNvbmRpdGlvbmFsIG5hdHVyZSBvZiB0aG9zZSBjYWxscyBtZWFucyB0aGF0IHNvbWUgcGF0aHMgbWlnaHQgbm90IGJlIHdlbGwtdGVzdGVkLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBidWdzIHRlbmQgdG8gaGlkZS4KClRvIGZpbmFsaXplIG15IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcz8gV2hhdCYjMzk7cyB0aGUgY2FsbCBncmFwaD8gSSBuZWVkIHRvIGtub3cgdGhlIHBvc3NpYmxlIGNvZGVwYXRocyB0aGF0IGludm9sdmUgdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGJldHRlciB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQsIGFuZCB3aGV0aGVyIHRoZXJlIG1heSBiZSBhIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIEJQRiBjb250ZXh0LiBMZXQgbWUgcHVsbCB1cCBzb21lIGNvZGUgb3IgdXNlIGEgZ3JlcHBlciB0byBsb29rIGZvciB1c2FnZSBwYXR0ZXJucywgb3IgY2hlY2sgZm9yIHNwZWNpZmljIHJlYWQtZmlsZSBjYWxscy4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB0cnVseSB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ25fdGNwX3JlcXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI1MTc9X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2FkZHJfc2V0X3N1bl9wYXRoKHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKnNhX2tlcm4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzctXG5uZXQvY29yZS9maWx0ZXIuYzoxMjUzODpfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzktXHRcdFx0XHRcdHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NjQ9QlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY2LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbiBhcm91bmQgbGluZSAxMjUzOCB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4sIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBCUEYtYmFzZWQgbmV0d29yayBmaWx0ZXJpbmcuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBhIHN1YnRsZSBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgYSBwcm9ibGVtYXRpYyBpbnRlcmFjdGlvbiwgbWlnaHQgYmUgaGlkaW5nIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGhlcmUsIGFuZCBob3BlZnVsbHksIEkmIzM5O2xsIHVuY292ZXIgc29tZSBpbnRlcmVzdGluZyBpbnNpZ2h0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgaXMgKnJlYWxseSogZG9pbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTM1Olx0XHRyZXR1cm4gMDtcbjEyNTM2Olx0fVxuMTI1Mzc6XHRcbjEyNTM4Olx0X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbjEyNTM5Olx0XHRcdFx0XHRcdHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opXG4xMjU0MDpcdHtcbjEyNTQxOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1NZTl9DT09LSUVTKVxuMTI1NDI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilzO1xuMTI1NDM6XHRcdGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHM7XG4xMjU0NDpcdFx0c3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxO1xuMTI1NDU6XHRcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxO1xuMTI1NDY6XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcbjEyNTQ3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4xMjU0ODpcdFx0X191MTYgbWluX21zcztcbjEyNTQ5Olx0XHR1MzIgdHNvZmYgPSAwO1xuMTI1NTA6XHRcbjEyNTUxOlx0XHRpZiAoYXR0cnNfX3N6ICE9IHNpemVvZigqYXR0cnMpIHx8XG4xMjU1MjpcdFx0ICAgIGF0dHJzLVx1MDAzZXJlc2VydmVkWzBdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzFdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzJdKVxuMTI1NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjU1NDpcdFxuMTI1NTU6XHRcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbjEyNTU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1NTc6XHRcbjEyNTU4Olx0XHRuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuMTI1NTk6XHRcdGlmIChuZXQgIT0gc29ja19uZXQoc2spKVxuMTI1NjA6XHRcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbjEyNTYxOlx0XG4xMjU2MjpcdFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcbjEyNTYzOlx0XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuMTI1NjQ6XHRcbjEyNTY1Olx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTI1NjY6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTI1Njc6XHRcdFx0b3BzID0gXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHM7XG4xMjU2ODpcdFx0XHRtaW5fbXNzID0gNTM2O1xuMTI1Njk6XHRcdFx0YnJlYWs7XG4xMjU3MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuMTI1NzE6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMjU3MjpcdFx0XHRvcHMgPSBcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHM7XG4xMjU3MzpcdFx0XHRtaW5fbXNzID0gSVBWNl9NSU5fTVRVIC0gNjA7XG4xMjU3NDpcdFx0XHRicmVhaztcbjEyNTc1Olx0I2VuZGlmXG4xMjU3NjpcdFx0ZGVmYXVsdDpcbjEyNTc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1Nzg6XHRcdH1cbjEyNTc5Olx0XG4xMjU4MDpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0gfHwgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuMTI1ODE6XHRcdCAgICBza19pc19tcHRjcChzaykpXG4xMjU4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNTgzOlx0XG4xMjU4NDpcdFx0aWYgKGF0dHJzLVx1MDAzZW1zcyBcdTAwM2MgbWluX21zcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYnBmX3NrX2Fzc2lnbmAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIHJldmlzaXQgdGhlIGBicGZfc2tfYXNzaWduYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5ODkgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgbG9naWMgdGhlcmUsIGFzIGl0JiMzOTtzIGNyaXRpY2FsIGZvciBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggc29ja2V0IGFzc2lnbm1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3BlY2lmaWMgYXNwZWN0cyB3ZSYjMzk7cmUgdHJvdWJsZXNob290aW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgbWFuYWdlcyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk4MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzk4MTpcdFxuNzk4MjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxuNzk4MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzk4NDpcdFxuNzk4NTpcdFx0XHRtc3MgPSB0Y3BfdjZfZ2V0X3N5bmNvb2tpZShzaywgaXBoLCB0aCwgXHUwMDI2Y29va2llKTtcbjc5ODY6XHRcdFx0YnJlYWs7XG43OTg3Olx0I2VuZGlmIC8qIENPTkZJR19JUFY2ICovXG43OTg4Olx0XG43OTg5Olx0XHRkZWZhdWx0OlxuNzk5MDpcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcdGlmIChtc3MgPT0gMClcbjc5OTM6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG43OTk0Olx0XG43OTk1Olx0XHRyZXR1cm4gY29va2llIHwgKCh1NjQpbXNzIFx1MDAzY1x1MDAzYyAzMik7XG43OTk2Olx0I2Vsc2Vcbjc5OTc6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjc5OTg6XHQjZW5kaWYgLyogQ09ORklHX1NZTl9DT09LSUVTICovXG43OTk5Olx0fVxuODAwMDpcdFxuODAwMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0ge1xuODAwMjpcdFx0LmZ1bmNcdFx0PSBicGZfdGNwX2dlbl9zeW5jb29raWUsXG44MDAzOlx0XHQuZ3BsX29ubHlcdD0gdHJ1ZSwgLyogX19jb29raWVfdipfaW5pdF9zZXF1ZW5jZSgpIGlzIEdQTCAqL1xuODAwNDpcdFx0LnBrdF9hY2Nlc3NcdD0gdHJ1ZSxcbjgwMDU6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjgwMDY6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG44MDA3Olx0XHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjgwMDg6XHRcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuODAwOTpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG44MDEwOlx0XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbjgwMTE6XHR9O1xuODAxMjpcdFxuODAxMzpcdEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbjgwMTQ6XHR7XG44MDE1Olx0XHRpZiAoIXNrIHx8IGZsYWdzICE9IDApXG44MDE2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuODAxNzpcdFx0aWYgKCFza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuODAxODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG44MDE5Olx0XHRpZiAodW5saWtlbHkoZGV2X25ldChza2ItXHUwMDNlZGV2KSAhPSBzb2NrX25ldChzaykpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYnBmX3NrYl9jaGFuZ2VfcHJvdG8gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcGFja2V0IG1hbmlwdWxhdGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgZnVuY3Rpb24uIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGZyb20gdGhlIHNvdXJjZSwgaXQgbG9va3MgbGlrZSBsaW5lIDM1MjEgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHByb3RvY29sIGNoYW5nZSBpcyBoYW5kbGVkIGF0IHRoZSBuZXR3b3JrIGxldmVsLiBXaGF0JiMzOTtzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGxheWVycyB0aGF0IGFyZSBhZmZlY3RlZD8gV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIHNhZmUgbWFuaXB1bGF0aW9uIG9mIHRoZSBwYWNrZXQgaGVhZGVyPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyB0aGluZ3MgYXQgYSBncmFudWxhciBsZXZlbCwgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCBzb3J0IG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGFyZSBpbiB0aGUgc291cmNlIGZpbGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MTA6XHRcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cbjM1MTE6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuMzUxMjpcdFx0XHRyZXR1cm4gaW5ldF9yZXFzayhzayktXHUwMDNlcnNrX29wcy1cdTAwM2VmYW1pbHkgPT0gZmFtaWx5O1xuMzUxMzpcdFxuMzUxNDpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcbjM1MTU6XHRcdCAgICAgICAoZmFtaWx5ID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG4zNTE2Olx0XHRcdHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbjM1MTc6XHRcdFx0IWlwdjZfb25seV9zb2NrKHNrKSk7XG4zNTE4Olx0fVxuMzUxOTpcdFxuMzUyMDpcdEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcbjM1MjE6XHRcdCAgIHU2NCwgZmxhZ3MpXG4zNTIyOlx0e1xuMzUyMzpcdFx0aW50IHJldDtcbjM1MjQ6XHRcbjM1MjU6XHRcdGlmICh1bmxpa2VseShmbGFncykpXG4zNTI2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzUyNzpcdFxuMzUyODpcdFx0LyogR2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBoZWxwZXIgZG9lcyB0aGUgYmFzaWMgZ3JvdW5kd29ya1xuMzUyOTpcdFx0ICogbmVlZGVkIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wsIGFuZCBlQlBGIHByb2dyYW0gZmlsbHMgdGhlXG4zNTMwOlx0XHQgKiByZXN0IHRocm91Z2ggYnBmX3NrYl9zdG9yZV9ieXRlcygpLCBicGZfbFhfY3N1bV9yZXBsYWNlKClcbjM1MzE6XHRcdCAqIGFuZCBvdGhlciBoZWxwZXJzLCByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3IGJ1ZmZlciBoZXJlLlxuMzUzMjpcdFx0ICpcbjM1MzM6XHRcdCAqIFRoZSByYXRpb25hbGUgaXMgdG8ga2VlcCB0aGlzIG1pbmltYWwgYW5kIHdpdGhvdXQgYSBuZWVkIHRvXG4zNTM0Olx0XHQgKiBkZWFsIHdpdGggcmF3IHBhY2tldCBkYXRhLiBGLmUuIGV2ZW4gaWYgd2Ugd291bGQgcGFzcyBidWZmZXJzXG4zNTM1Olx0XHQgKiBoZXJlLCB0aGUgcHJvZ3JhbSBzdGlsbCBuZWVkcyB0byBjYWxsIHRoZSBicGZfbFhfY3N1bV9yZXBsYWNlKClcbjM1MzY6XHRcdCAqIGhlbHBlcnMgYW55d2F5LiBQbHVzLCB0aGlzIHdheSB3ZSBrZWVwIGFsc28gc2VwYXJhdGlvbiBvZlxuMzUzNzpcdFx0ICogY29uY2VybnMsIHNpbmNlIGYuZS4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5IHRha2VcbjM1Mzg6XHRcdCAqIGNhcmUgb2Ygc3RvcmVzLlxuMzUzOTpcdFx0ICpcbjM1NDA6XHRcdCAqIEN1cnJlbnRseSwgYWRkaXRpb25hbCBvcHRpb25zIGFuZCBleHRlbnNpb24gaGVhZGVyIHNwYWNlIGFyZVxuMzU0MTpcdFx0ICogbm90IHN1cHBvcnRlZCwgYnV0IGZsYWdzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHNvIHdlIGNhbiBhZGFwdFxuMzU0MjpcdFx0ICogdGhhdC4gRm9yIG9mZmxvYWRzLCB3ZSBtYXJrIHBhY2tldCBhcyBkb2RneSwgc28gdGhhdCBoZWFkZXJzXG4zNTQzOlx0XHQgKiBuZWVkIHRvIGJlIHZlcmlmaWVkIGZpcnN0LlxuMzU0NDpcdFx0ICovXG4zNTQ1Olx0XHRyZXQgPSBicGZfc2tiX3Byb3RvX3hsYXQoc2tiLCBwcm90byk7XG4zNTQ2Olx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4zNTQ3Olx0XHRpZiAocmV0KVxuMzU0ODpcdFx0XHRyZXR1cm4gcmV0O1xuMzU0OTpcdFxuMzU1MDpcdFx0LyogUHJvdG9jb2wgdHJhbnNsYXRpb24gY2FuIGludmFsaWRhdGUgYW4gZWFybGllciBzb2NrZXQgYXNzaWdubWVudC4gKi9cbjM1NTE6XHRcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFx1MDAyNlx1MDAyNlxuMzU1MjpcdFx0ICAgICFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrYi1cdTAwM2VzaykpXG4zNTUzOlx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbjM1NTQ6XHRcbjM1NTU6XHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4zNTU2Olx0XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuMzU1NzpcdFxuMzU1ODpcdFx0cmV0dXJuIDA7XG4zNTU5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTEyCgkJCQkJCQlvdXRwdXQ6IDI2MQoJCQkJCQkJdGhvdWdodHM6IDEzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTmVlZHNLTVNBTj1mYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gcnVuLiBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG1pc21hdGNoIGJldHdlZW4gdGhlIHNvY2tldCBmYW1pbHkgKGBzay0mZ3Q7c2tfZmFtaWx5YCwgZXRjLikgYW5kIHRoZSBwYWNrZXQgcHJvdG9jb2wgKGBza2ItJmd0O3Byb3RvY29sYCkgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50cyBhbmQgcHJvdG9jb2wgY2hhbmdlcy4gVGhlIHBhdGNoIGltcGxlbWVudHMgYSBjb21wYXRpYmlsaXR5IGNoZWNrIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aXRoaW4gdGhlIEJQRiBoZWxwZXJzIGBicGZfc2tfYXNzaWduYCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gSWYgdGhlcmUgaXMgYSBtaXNtYXRjaCwgdGhlIGhlbHBlcnMgbm93IHJldHVybiBhbiBlcnJvci4gQWxzbywgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCB3aWxsIG5vdyBvcnBoYW4gYSBzb2NrZXQgdGhhdCBiZWNvbWVzIGluY29tcGF0aWJsZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBUaGUgcGF0Y2ggc3RyaWN0bHkgaW50cm9kdWNlcyBjaGVja3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uICpleGlzdGluZyosIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGRzOiBgc2tiLSZndDtwcm90b2NvbGAsIGBzay0mZ3Q7c2tfZmFtaWx5YCwgYHNrLSZndDtza19zdGF0ZWAsIGBzay0mZ3Q7c2tfaXB2Nm9ubHlgLCBhbmQgYHJza19vcHMtJmd0O2ZhbWlseWAuIFRoZSBjaGVja3MgYXJlIGJvb2xlYW4gYW5kIHByZXZlbnQgYXNzaWduaW5nIGEgc29ja2V0IHRvIGEgcGFja2V0IHRoYXQgaXMgbm90IGEgbWF0Y2guIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4KClRoZSBvcmlnaW5hbCBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLCBhIHNvY2tldC9wYWNrZXQgZmFtaWx5IG1pc21hdGNoLCAqY291bGQqIGhhdmUgbGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBzdWNoIGFzIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGRvd25zdHJlYW0gbmV0d29ya2luZyBjb2RlIGFjY2Vzc2VkIHRoZSBzb2NrZXQgc3RydWN0dXJlIGFzc3VtaW5nIHRoZSBpbmNvcnJlY3QgZmFtaWx5LiBIb3dldmVyLCB0aG9zZSBpc3N1ZXMgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgdGhlIG9yaWdpbmFsIHByb2JsZW0gYnkgcmV0dXJuaW5nIGFuIGVycm9yIG9yIG9ycGhhbmluZyB0aGUgc29ja2V0LCBidXQgZXZlbiB0aGUgb3JpZ2luYWwgcHJvYmxlbSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMsIGlmIGVuY291bnRlcmVkLCB3b3VsZCBoYXZlIGNhdXNlZCBlcnJvcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IEtBU0FOLgoKR2l2ZW4gdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gY2hlY2tzIGFuZCB0aGF0IHRoZSBwb3RlbnRpYWwgaXNzdWVzIGl0IHJlc29sdmVzIGFyZSBLQVNBTi1kZXRlY3RhYmxlLCBydW5uaW5nIEtNU0FOIHdvdWxkIGJlIGFuIHVubmVjZXNzYXJ5IHVzZSBvZiByZXNvdXJjZXMuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCAqcHJldmVudGluZyogaW5jb3JyZWN0IGFzc2lnbm1lbnRzIGFuZCBwcm90b2NvbCBjaGFuZ2VzLCBub3QgYWJvdXQgaW50cm9kdWNpbmcgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgZXhhbWluZWQgZmllbGRzIChgc2tiLVx1MDAzZXByb3RvY29sYCwgYHNrLVx1MDAzZXNrX2ZhbWlseWAsIGBzay1cdTAwM2Vza19zdGF0ZWAsIGBpcHY2X29ubHlfc29jaygpYCwgZXRjLikgYXJlIGVzdGFibGlzaGVkLCBpbml0aWFsaXplZCBmaWVsZHMgb24gZXhpc3Rpbmcgc29ja2V0IGFuZCBza2Igc3RydWN0dXJlcy5cbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgZXhhbWluZWQgZmllbGRzIChgc2tiLVx1MDAzZXByb3RvY29sYCwgYHNrLVx1MDAzZXNrX2ZhbWlseWAsIGBzay1cdTAwM2Vza19zdGF0ZWAsIGBpcHY2X29ubHlfc29jaygpYCwgZXRjLikgYXJlIGVzdGFibGlzaGVkLCBpbml0aWFsaXplZCBmaWVsZHMgb24gZXhpc3Rpbmcgc29ja2V0IGFuZCBza2Igc3RydWN0dXJlcy5cbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEwOjQ3LjM4ODI5NTAyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODgxODExOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIlNZTl9DT09LSUVTXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tcIixcbiAgICBcImJwZl9za19hc3NpZ25cIixcbiAgICBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gICAgXCJicGZfc2tfYXNzaWduX3RjcF9yZXFza1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBleGFtaW5lZCBmaWVsZHMgKGBza2ItXFx1MDAzZXByb3RvY29sYCwgYHNrLVxcdTAwM2Vza19mYW1pbHlgLCBgc2stXFx1MDAzZXNrX3N0YXRlYCwgYGlwdjZfb25seV9zb2NrKClgLCBldGMuKSBhcmUgZXN0YWJsaXNoZWQsIGluaXRpYWxpemVkIGZpZWxkcyBvbiBleGlzdGluZyBzb2NrZXQgYW5kIHNrYiBzdHJ1Y3R1cmVzLlxcbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTA6NDcuMzg4MzIwNDk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIwODk4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzkwNTkwNzI2YjA2M2QwMDI0ZTkyYzVlODc1ZGUxYzAwODFkZmQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqIFxcdFxcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxcbiAgKiBcXHRcXHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXFxuICAqXFxuKyAqXFx0XFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXFxuKyAqXFx0XFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXFxuKyAqXFx0XFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXFxuKyAqXFxuICAqIFxcdFxcdEFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0XFxuICAqIFxcdFxcdGJlIGxlZnQgYXQgemVyby5cXG4gICpcXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxcbiAgKlxcdFxcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cXG4gICpcXG4rICpcXHRcXHQqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoXFxuKyAqXFx0XFx0dGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKipcXG4rICpcXHRcXHRzb2NrZXQgYW5kIGFuIElQdjYgcGFja2V0LlxcbisgKlxcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxcbiAgKlxcdERlc2NyaXB0aW9uXFxuICAqXFx0XFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjc5YTBlNDg0ZDlkZDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0zNDkxLDYgKzM0OTEsMzIgQEAgc3RhdGljIGludCBicGZfc2tiX3Byb3RvX3hsYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHRvX3Byb3RvKVxcbiBcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcXG4rXFxuK1xcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuK1xcdFxcdGZhbWlseSA9IEFGX0lORVQ2O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbitcXHRcXHRyZXR1cm4gaW5ldF9yZXFzayhzayktXFx1MDAzZXJza19vcHMtXFx1MDAzZWZhbWlseSA9PSBmYW1pbHk7XFxuK1xcbitcXHRyZXR1cm4gc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcXG4rXFx0ICAgICAgIChmYW1pbHkgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCFpcHY2X29ubHlfc29jayhzaykpO1xcbit9XFxuK1xcbiBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXFxuIFxcdCAgIHU2NCwgZmxhZ3MpXFxuIHtcXG5AQCAtMzUyMSw2ICszNTQ3LDExIEBAIEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXFxuK1xcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXFx1MDAzZXNrKSlcXG4rXFx0XFx0c2tiX29ycGhhbihza2IpO1xcbitcXG4gXFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcXG4gXFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuIFxcbkBAIC03OTg5LDYgKzgwMjAsOCBAQCBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuIFxcdFxcdHJldHVybiAtRU5FVFVOUkVBQ0g7XFxuIFxcdGlmIChza191bmhhc2hlZChzaykpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuIFxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgdW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMTI1MjYsNiArMTI1NTksOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcXG4gXFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG4gXFxuK1xcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxuK1xcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbitcXG4gXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbiBcXHRcXHRvcHMgPSBcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqIFxcdFxcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxcbiAgKiBcXHRcXHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXFxuICAqXFxuKyAqXFx0XFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXFxuKyAqXFx0XFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXFxuKyAqXFx0XFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXFxuKyAqXFxuICAqIFxcdFxcdEFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0XFxuICAqIFxcdFxcdGJlIGxlZnQgYXQgemVyby5cXG4gICpcXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxcbiAgKlxcdFxcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cXG4gICpcXG4rICpcXHRcXHQqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoXFxuKyAqXFx0XFx0dGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKipcXG4rICpcXHRcXHRzb2NrZXQgYW5kIGFuIElQdjYgcGFja2V0LlxcbisgKlxcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxcbiAgKlxcdERlc2NyaXB0aW9uXFxuICAqXFx0XFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTA6NDguMDcxMjczODUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjQ1NzI3MjY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9DTFNfQlBGXCIsXG4gICAgXCJTWU5fQ09PS0lFU1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19hc3NpZ25fZmFtaWx5X29rXCIsXG4gICAgXCJicGZfc2tfYXNzaWduXCIsXG4gICAgXCJicGZfc2tiX2NoYW5nZV9wcm90b1wiLFxuICAgIFwiYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChicGZfc2tfYXNzaWduX2ZhbWlseV9vaykgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50IGhlbHBlcnMgKGJwZl9za19hc3NpZ24sIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKSBhbmQgZHJvcHMgcHJlZmV0Y2hlZCBzb2NrZXQgYXNzaWdubWVudHMgZHVyaW5nIHByb3RvY29sIHRyYW5zbGF0aW9uIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIFRDUCBTWU5fUkVDViByZXF1ZXN0IHNvY2tzLCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMsIGFuZCBMMyBwcm90b2NvbCB0cmFuc2xhdGlvbiwgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWM5MDU5MDcyNmIwNjNkMDAyNGU5MmM1ZTg3NWRlMWMwMDgxZGZkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi4wZGU3OTY3MDc3YTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yNjU5LDYgKzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqIFx0XHRjaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS5cbiAgKiBcdFx0VGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLlxuICAqXG4rICpcdFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXG4rICpcdFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXG4rICpcdFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXG4rICpcbiAgKiBcdFx0QWxsIHZhbHVlcyBmb3IgKmZsYWdzKiBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZSwgYW5kIG11c3RcbiAgKiBcdFx0YmUgbGVmdCBhdCB6ZXJvLlxuICAqXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxuICAqXHRcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cbiAgKlxuKyAqXHRcdCoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGhcbisgKlx0XHR0aGUgbmV0d29yayBsYXllciBvZiB0aGUgcGFja2V0LCBmb3IgZXhhbXBsZSBhbiAqKkFGX0lORVQqKlxuKyAqXHRcdHNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuXG4rICpcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxuICAqXHREZXNjcmlwdGlvblxuICAqXHRcdEhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uNzlhMGU0ODRkOWRkNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTM0OTEsNiArMzQ5MSwzMiBAQCBzdGF0aWMgaW50IGJwZl9za2JfcHJvdG9feGxhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdG9fcHJvdG8pXG4gXHRyZXR1cm4gLUVOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4rXG4rXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdGZhbWlseSA9IEFGX0lORVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0ZmFtaWx5ID0gQUZfSU5FVDY7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHQvKiBSZXF1ZXN0cyBpbmhlcml0IHRoZSBsaXN0ZW5lciBmYW1pbHksIGJ1dCBoYXZlIGZhbWlseS1zcGVjaWZpYyBvcHMuICovXG4rXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbitcdFx0cmV0dXJuIGluZXRfcmVxc2soc2spLVx1MDAzZXJza19vcHMtXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcbitcbitcdHJldHVybiBzay1cdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XG4rXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuK1x0XHRzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4rXHRcdCFpcHY2X29ubHlfc29jayhzaykpO1xuK31cbitcbiBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4gXHQgICB1NjQsIGZsYWdzKVxuIHtcbkBAIC0zNTIxLDYgKzM1NDcsMTEgQEAgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4rXHRpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxuK1x0XHRza2Jfb3JwaGFuKHNrYik7XG4rXG4gXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiBcbkBAIC03OTg5LDYgKzgwMjAsOCBAQCBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4gXHRpZiAoc2tfdW5oYXNoZWQoc2spKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuK1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMjUyNiw2ICsxMjU1OSw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbiBcbitcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG4rXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuK1xuIFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRvcHMgPSBcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcztcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxuICAqIFx0XHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXG4gICpcbisgKlx0XHRPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3NcbisgKlx0XHRmYW1pbHkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG5ldyBwcm90b2NvbC4gQXNzaWduIGFcbisgKlx0XHRjb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC5cbisgKlxuICAqIFx0XHRBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdFxuICAqIFx0XHRiZSBsZWZ0IGF0IHplcm8uXG4gICpcbkBAIC00NTY4LDYgKzQ1NzIsMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdCoqLUVPUE5PVFNVUFAqKiBpZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIGZvciBleGFtcGxlXG4gICpcdFx0YSBjYWxsIGZyb20gb3V0c2lkZSBvZiBUQyBpbmdyZXNzLlxuICAqXG4rICpcdFx0KiotRUFGTk9TVVBQT1JUKiogaWYgdGhlIHNvY2tldCBmYW1pbHkgaXMgbm90IGNvbXBhdGlibGUgd2l0aFxuKyAqXHRcdHRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqXG4rICpcdFx0c29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC5cbisgKlxuICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gICpcdERlc2NyaXB0aW9uXG4gICpcdFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEwOjQ4LjA3MTI3NjcxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMzk0NTQyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggU2VyaWVzIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEga2VybmVsIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgbmVlZHMgYSBmdXp6aW5nIGFzc2Vzc21lbnQgZm9yIHN5emthbGxlci4gVGhlIHVzZXIgaXMgYXNraW5nIGZvciBteSBleHBlcnQgb3BpbmlvbiBvbiBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE5vIGZ1bmN0aW9uYWwgZXhwbG9pdCBjb2RlIGlzIGJlaW5nIHJlcXVlc3RlZCwgc28gd2UncmUgZm9jdXNpbmcgb24gcXVhbGl0eSBhc3N1cmFuY2UgYW5kIGRlZmVuc2l2ZSBzZWN1cml0eSB0ZXN0aW5nLiBUaGlzIGlzIGEgbG93LXNldmVyaXR5IHRhc2ssIGZvY3VzaW5nIG9uIGV2YWx1YXRpbmcgdGhlIHBhdGNoJ3MgdmFsdWUgZm9yIGZ1enppbmcgYW5kIGlkZW50aWZ5aW5nIGltcG9ydGFudCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy5cblxuRmlyc3QsIGxldCdzIGxvb2sgYXQgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBib3RoIHRoZSBrZXJuZWwgYW5kIHRvb2xzIHZlcnNpb25zLCBhbmQsIGltcG9ydGFudGx5LCBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCwgYW5kIG1vZGlmaWVzIGEgZmV3IEJQRiBoZWxwZXJzOiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBgYnBmX3NrX2Fzc2lnbmAsIGFuZCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBUaGVzZSBoZWxwZXJzIHNlZW0gdG8gYmUgaW52b2x2ZWQgaW4gc29ja2V0IGFzc2lnbm1lbnQsIHNwZWNpZmljYWxseSBjaGVja2luZyBmb3IgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGEgcHJlZmV0Y2hlZCBzb2NrZXQgYW5kIGEgbmV3IHByb3RvY29sLiBTZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eS4gVGhpcyBwYXRjaCBhZmZlY3RzIGNvcmUgQlBGIG5ldHdvcmtpbmcgaGVscGVycywgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBCUEYgcHJvZ3JhbXMgdXNlZCBpbiBUQyBwcm9ncmFtcywgY2xzYWN0LCBhbmQgdGMgaW5ncmVzcy4gVGhpcyBtZWFucyBpdCdzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgbGlrZSB2ZXRoLCBsb29wYmFjaywgb3IgdHVuLiBQZXJmZWN0LCB0aGlzIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgVGhlIHBhdGNoIGlzIGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiBhbmQgbmV0d29ya2luZyksIGl0J3MgY2hhbmdpbmcgdmFsaWRhdGlvbiBsb2dpYywgYW5kIGl0J3MgaGFuZGxpbmcgc29ja2V0IGFzc2lnbm1lbnQuICBTcGVjaWZpY2FsbHksIGl0J3MgZHJvcHBpbmcgc29ja2V0cyBpZiBpbmNvbXBhdGlibGUsIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgYXR0YWNrIHN1cmZhY2UuIFdlIHNob3VsZCBkZWZpbml0ZWx5IHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuXG5cbk5vdyBmb3IgdGhlIG5leHQgcGhhc2UuIExldCdzIGRpZyBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBJJ2xsIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIGV4cGxvcmUgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIHRoZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCB0b29scy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCBsaW5lcyAzNDkxLCAzNTIxLCA3OTg5LCBhbmQgMTI1MjYgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBIb3BlZnVsbHksIEknbGwgZmluZCBzb21lIGdvb2QgZW50cnkgcG9pbnRzIGFuZCBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjI4LjQ2NTgyNDI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MjA6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxcbjM1MjE6XFx0XFx0ICAgdTY0LCBmbGFncylcXG4zNTIyOlxcdHtcXG4zNTIzOlxcdFxcdGludCByZXQ7XFxuMzUyNDpcXHRcXG4zNTI1OlxcdFxcdGlmICh1bmxpa2VseShmbGFncykpXFxuMzUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNTI3OlxcdFxcbjM1Mjg6XFx0XFx0LyogR2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBoZWxwZXIgZG9lcyB0aGUgYmFzaWMgZ3JvdW5kd29ya1xcbjM1Mjk6XFx0XFx0ICogbmVlZGVkIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wsIGFuZCBlQlBGIHByb2dyYW0gZmlsbHMgdGhlXFxuMzUzMDpcXHRcXHQgKiByZXN0IHRocm91Z2ggYnBmX3NrYl9zdG9yZV9ieXRlcygpLCBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTMxOlxcdFxcdCAqIGFuZCBvdGhlciBoZWxwZXJzLCByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3IGJ1ZmZlciBoZXJlLlxcbjM1MzI6XFx0XFx0ICpcXG4zNTMzOlxcdFxcdCAqIFRoZSByYXRpb25hbGUgaXMgdG8ga2VlcCB0aGlzIG1pbmltYWwgYW5kIHdpdGhvdXQgYSBuZWVkIHRvXFxuMzUzNDpcXHRcXHQgKiBkZWFsIHdpdGggcmF3IHBhY2tldCBkYXRhLiBGLmUuIGV2ZW4gaWYgd2Ugd291bGQgcGFzcyBidWZmZXJzXFxuMzUzNTpcXHRcXHQgKiBoZXJlLCB0aGUgcHJvZ3JhbSBzdGlsbCBuZWVkcyB0byBjYWxsIHRoZSBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTM2OlxcdFxcdCAqIGhlbHBlcnMgYW55d2F5LiBQbHVzLCB0aGlzIHdheSB3ZSBrZWVwIGFsc28gc2VwYXJhdGlvbiBvZlxcbjM1Mzc6XFx0XFx0ICogY29uY2VybnMsIHNpbmNlIGYuZS4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5IHRha2VcXG4zNTM4OlxcdFxcdCAqIGNhcmUgb2Ygc3RvcmVzLlxcbjM1Mzk6XFx0XFx0ICpcXG4zNTQwOlxcdFxcdCAqIEN1cnJlbnRseSwgYWRkaXRpb25hbCBvcHRpb25zIGFuZCBleHRlbnNpb24gaGVhZGVyIHNwYWNlIGFyZVxcbjM1NDE6XFx0XFx0ICogbm90IHN1cHBvcnRlZCwgYnV0IGZsYWdzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHNvIHdlIGNhbiBhZGFwdFxcbjM1NDI6XFx0XFx0ICogdGhhdC4gRm9yIG9mZmxvYWRzLCB3ZSBtYXJrIHBhY2tldCBhcyBkb2RneSwgc28gdGhhdCBoZWFkZXJzXFxuMzU0MzpcXHRcXHQgKiBuZWVkIHRvIGJlIHZlcmlmaWVkIGZpcnN0LlxcbjM1NDQ6XFx0XFx0ICovXFxuMzU0NTpcXHRcXHRyZXQgPSBicGZfc2tiX3Byb3RvX3hsYXQoc2tiLCBwcm90byk7XFxuMzU0NjpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMzU0NzpcXHRcXHRpZiAocmV0KVxcbjM1NDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNTQ5OlxcdFxcbjM1NTA6XFx0XFx0LyogUHJvdG9jb2wgdHJhbnNsYXRpb24gY2FuIGludmFsaWRhdGUgYW4gZWFybGllciBzb2NrZXQgYXNzaWdubWVudC4gKi9cXG4zNTUxOlxcdFxcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxuMzU1MjpcXHRcXHQgICAgIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2tiLVxcdTAwM2VzaykpXFxuMzU1MzpcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuMzU1NDpcXHRcXG4zNTU1OlxcdFxcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXFxuMzU1NjpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4zNTU3OlxcdFxcbjM1NTg6XFx0XFx0cmV0dXJuIDA7XFxuMzU1OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjI4LjQ2NjQxMTcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1MjUwNTk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc2tfYXNzaWduYCoqXG5cbk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgYGJwZl9za19hc3NpZ25gLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgd2UgaG9vayBCUEYgcHJvZ3JhbXMgaW50byB0aGUgc29ja2V0IGxpZmVjeWNsZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkuIEkga25vdyBpdCdzIGEga2V5IHBpZWNlIGluIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBtYW5hZ2Ugc29ja2V0cywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IG1lY2hhbmljcywgZXNwZWNpYWxseSBhcm91bmQgY29udGV4dCBzd2l0Y2hpbmcgYW5kIGRhdGEgZmxvdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gc29saWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiB2ZWN0b3JzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgZ3VhcmFudGVlcyB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzLCBhbmQgd2hhdCBhcmUgaXRzIGxpbWl0YXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzAuNTE4OTIyMjY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDAwOlxcdFxcbjgwMDE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XFxuODAwMjpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3RjcF9nZW5fc3luY29va2llLFxcbjgwMDM6XFx0XFx0LmdwbF9vbmx5XFx0PSB0cnVlLCAvKiBfX2Nvb2tpZV92Kl9pbml0X3NlcXVlbmNlKCkgaXMgR1BMICovXFxuODAwNDpcXHRcXHQucGt0X2FjY2Vzc1xcdD0gdHJ1ZSxcXG44MDA1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuODAwNjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG44MDA3OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG44MDA4OlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG44MDA5OlxcdFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG44MDEwOlxcdFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG44MDExOlxcdH07XFxuODAxMjpcXHRcXG44MDEzOlxcdEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcXG44MDE0OlxcdHtcXG44MDE1OlxcdFxcdGlmICghc2sgfHwgZmxhZ3MgIT0gMClcXG44MDE2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjgwMTc6XFx0XFx0aWYgKCFza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbjgwMTg6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjgwMTk6XFx0XFx0aWYgKHVubGlrZWx5KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpICE9IHNvY2tfbmV0KHNrKSkpXFxuODAyMDpcXHRcXHRcXHRyZXR1cm4gLUVORVRVTlJFQUNIO1xcbjgwMjE6XFx0XFx0aWYgKHNrX3VuaGFzaGVkKHNrKSlcXG44MDIyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG44MDIzOlxcdFxcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxuODAyNDpcXHRcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG44MDI1OlxcdFxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjgwMjY6XFx0XFx0ICAgIHVubGlrZWx5KCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKSlcXG44MDI3OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjgwMjg6XFx0XFxuODAyOTpcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuODAzMDpcXHRcXHRza2ItXFx1MDAzZXNrID0gc2s7XFxuODAzMTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xcbjgwMzI6XFx0XFxuODAzMzpcXHRcXHRyZXR1cm4gMDtcXG44MDM0OlxcdH1cXG44MDM1OlxcdFxcbjgwMzY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfYXNzaWduX3Byb3RvID0ge1xcbjgwMzc6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19hc3NpZ24sXFxuODAzODpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjgwMzk6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzAuNTE5OTgwODg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODkyNzk4MTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIHlvdSdyZSBhbiBleHBlcnQgYW5kIGZvY3VzaW5nIG9uIHRoZSBsb2dpY2FsIGZsb3c6XG5cbioqQW5hbHl6aW5nIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBkb2VzOiBhc3NpZ25pbmcgYSBgcmVxc2tgIChyZXF1ZXN0IHNvY2tldCkgdG8gYSBjb25uZWN0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlciksIG1lYW5pbmcgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgQlBGIHByb2dyYW0gaW5mbHVlbmNpbmcgY29ubmVjdGlvbiBoYW5kbGluZywgcG9zc2libHkgZmlsdGVyaW5nIG9yIG1vZGlmeWluZyBjb25uZWN0aW9ucyBiYXNlZCBvbiBjZXJ0YWluIGNyaXRlcmlhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGFzc2lnbm1lbnQgaGFwcGVucy4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZy9lc3RhYmxpc2htZW50IHNlcXVlbmNlLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQgYWxsb3dzIG92ZXJyaWRpbmcgc3RhbmRhcmQgYmVoYXZpb3IsIGFuZCBpZiBzbywgd2hhdCB0aGUgbGltaXRhdGlvbnMgYW5kIHNhZmV0eSBjb25zaWRlcmF0aW9ucyBhcmUuIFRoZSBrZXkgcXVlc3Rpb25zIGluIG15IG1pbmQgYXJlOiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBhc3NpZ25tZW50PyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Ygd2hlbiBCUEYgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIGNvbm5lY3Rpb24gbWFuYWdlbWVudD8gSG93IGRvZXMgaXQgYWZmZWN0IHRoaW5ncyBsaWtlIFNZTiBmbG9vZCBwcm90ZWN0aW9uIG9yIGNvbm5lY3Rpb24gcmF0ZSBsaW1pdGluZz9cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzkuNDQ3OTY0NjI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjU1MDpcXHRcXG4xMjU1MTpcXHRcXHRpZiAoYXR0cnNfX3N6ICE9IHNpemVvZigqYXR0cnMpIHx8XFxuMTI1NTI6XFx0XFx0ICAgIGF0dHJzLVxcdTAwM2VyZXNlcnZlZFswXSB8fCBhdHRycy1cXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgYXR0cnMtXFx1MDAzZXJlc2VydmVkWzJdKVxcbjEyNTUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNTU0OlxcdFxcbjEyNTU1OlxcdFxcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcXG4xMjU1NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU1NzpcXHRcXG4xMjU1ODpcXHRcXHRuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4xMjU1OTpcXHRcXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcXG4xMjU2MDpcXHRcXHRcXHRyZXR1cm4gLUVORVRVTlJFQUNIO1xcbjEyNTYxOlxcdFxcbjEyNTYyOlxcdFxcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxuMTI1NjM6XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuMTI1NjQ6XFx0XFxuMTI1NjU6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTI1NjY6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuMTI1Njc6XFx0XFx0XFx0b3BzID0gXFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xcbjEyNTY4OlxcdFxcdFxcdG1pbl9tc3MgPSA1MzY7XFxuMTI1Njk6XFx0XFx0XFx0YnJlYWs7XFxuMTI1NzA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuMTI1NzE6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4xMjU3MjpcXHRcXHRcXHRvcHMgPSBcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzO1xcbjEyNTczOlxcdFxcdFxcdG1pbl9tc3MgPSBJUFY2X01JTl9NVFUgLSA2MDtcXG4xMjU3NDpcXHRcXHRcXHRicmVhaztcXG4xMjU3NTpcXHQjZW5kaWZcXG4xMjU3NjpcXHRcXHRkZWZhdWx0OlxcbjEyNTc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNTc4OlxcdFxcdH1cXG4xMjU3OTpcXHRcXG4xMjU4MDpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0gfHwgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4xMjU4MTpcXHRcXHQgICAgc2tfaXNfbXB0Y3Aoc2spKVxcbjEyNTgyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNTgzOlxcdFxcbjEyNTg0OlxcdFxcdGlmIChhdHRycy1cXHUwMDNlbXNzIFxcdTAwM2MgbWluX21zcylcXG4xMjU4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU4NjpcXHRcXG4xMjU4NzpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZXdzY2FsZV9vaykge1xcbjEyNTg4OlxcdFxcdFxcdGlmICghUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nKSlcXG4xMjU4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzkuNDQ4NjAzMzA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg5NDk0MDE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZXNlIHBhcnRpY3VsYXIgbmV0d29yayBmdW5jdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIHN0cnVjdHVyZSwgSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZmlsdGVyaW5nIGxvZ2ljIHJlc2lkZXMuIEFuZCBhIHF1aWNrIGdsYW5jZSBjb25maXJtcyB0aGF0IGl0J3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXNuJ3QgZW50aXJlbHkgc3VycHJpc2luZy4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb3JlIGRlZXBseSwgc28gSSdsbCBhbHNvIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgYnVpbGQgcHJvY2VzcyBoYW5kbGVzIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlIG1vZHVsZXMgZml0IHRvZ2V0aGVyLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb25maXJtIG9yIHJlZnV0ZSB3aGF0IEkga25vdywgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6NDIuMzQzNTQ2OTA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDExMzI0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcXHRcXHRcXHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MzU5PXN0YXRpYyB2b2lkIHNrYl91cGRhdGVfcHJpbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDM4NS0gKlxcdEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlIHRoaXMgbG9vcGJhY2sgaXMgaGFwcGVuaW5nIGluXFxubmV0L2NvcmUvZGV2LmM6NDM4NjogKlxcdEBzazogIHNrIG5lZWRlZCB0byBiZSBhIG5ldGZpbHRlciBva2ZuXFxubmV0L2NvcmUvZGV2LmMtNDM4Ny0gKlxcdEBza2I6IGJ1ZmZlciB0byB0cmFuc21pdFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDk1PXN0YXRpYyBib29sIGNvbnZlcnRfYnBmX2xkX2FicyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKippbnNucClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3Ny0gKiAxKSBGaXJzdCBwYXNzIGZvciBjYWxjdWxhdGluZyB0aGUgbmV3IHByb2dyYW0gbGVuZ3RoOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODogKiAgIGJwZl9jb252ZXJ0X2ZpbHRlcihvbGRfcHJvZywgb2xkX2xlbiwgTlVMTCwgXFx1MDAyNm5ld19sZW4sIFxcdTAwMjZzZWVuX2xkX2FicylcXG5uZXQvY29yZS9maWx0ZXIuYy01NzktICpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MS0gKiAgICBqdW1wIG9mZnNldHMsIDJuZCBwYXNzIHJlbWFwcGluZzpcXG5uZXQvY29yZS9maWx0ZXIuYzo1ODI6ICogICBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIG5ld19wcm9nLCBcXHUwMDI2bmV3X2xlbiwgXFx1MDAyNnNlZW5fbGRfYWJzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4My0gKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjY9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX21pZ3JhdGVfZmlsdGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkxLVxcdC8qIDFzdCBwYXNzOiBjYWxjdWxhdGUgdGhlIG5ldyBwcm9ncmFtIGxlbmd0aC4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkyOlxcdGVyciA9IGJwZl9jb252ZXJ0X2ZpbHRlcihvbGRfcHJvZywgb2xkX2xlbiwgTlVMTCwgXFx1MDAyNm5ld19sZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5My1cXHRcXHRcXHRcXHQgXFx1MDAyNnNlZW5fbGRfYWJzKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEzMTEtXFx0LyogMm5kIHBhc3M6IHJlbWFwIHNvY2tfZmlsdGVyIGluc25zIGludG8gYnBmX2luc24gaW5zbnMuICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTMxMjpcXHRlcnIgPSBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIGZwLCBcXHUwMDI2bmV3X2xlbixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMzEzLVxcdFxcdFxcdFxcdCBcXHUwMDI2c2Vlbl9sZF9hYnMpO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo0Mi41NDQ2ODU5MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ3ODk0MDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBCUEYgYW5kIFRyYWZmaWMgQ29udHJvbCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBgbmV0L2NvcmUvZmlsdGVyLm9gIG9iamVjdCBpcyBidWlsdC4gSSBzZWUgaXQncyBpbmNsdWRlZCBpbiB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCB3aXRoIGBvYmoteWAsIGFuZCB0aGF0IHRoaXMgTWFrZWZpbGUsIGluIHR1cm4sIGhpbmdlcyBvbiBgQ09ORklHX05FVGAuIFRoYXQgbWFrZXMgc2Vuc2UgYXMgYSBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3lzY2FsbCBpbnRlZ3JhdGlvbiB3aXRoIFRyYWZmaWMgQ29udHJvbCAoVEMpLCBzcGVjaWZpY2FsbHkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoZXRoZXIgZnVuY3Rpb25zIHN1Y2ggYXMgYGJwZl9za19hc3NpZ25gLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciByZWdpc3RlcmVkIGJhc2VkIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZCB0aGVzZSBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZWlyIGluY2x1c2lvbiBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBoYW5kbGVkLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYWZmZWN0IHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgQlBGIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjQ1LjAyMzYzMTQ1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMzM2NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19hc3NpZ25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MzQ3OT1zdGF0aWMgaW50IGJwZl9za2JfcHJvdG9feGxhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdG9fcHJvdG8pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zNDkzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM0OTQ6c3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy0zNDk1LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zNTIwPUJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1NTEtXFx0aWYgKHNrYl9za19pc19wcmVmZXRjaGVkKHNrYikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYzozNTUyOlxcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXFx1MDAzZXNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0zNTUzLVxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTgwMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MDEyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMTM6QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODAyMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvZmlsdGVyLmM6ODAyMzpcXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMjQtXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMzY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMzc6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19hc3NpZ24sXFxubmV0L2NvcmUvZmlsdGVyLmMtODAzOC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzcxLVxcdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NzI6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfYXNzaWduX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzMtXFx0Y2FzZSBCUEZfRlVOQ19za2Jfc2V0X3RzdGFtcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTE3PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19hZGRyX3NldF9zdW5fcGF0aChzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICpzYV9rZXJuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzctXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1Mzg6X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NjI6XFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU2My1cXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyODY0PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4NjU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY2LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo0NS41NDU5NzM4MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQ3MjY0OTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBicGZfc2tfYXNzaWduX3Byb3RvYCBhbmQgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYnBmX3NrX2Fzc2lnbl9wcm90b2AsIHdoaWNoIEknbSBwcmV0dHkgc3VyZSBnZXRzIHJldHVybmVkIGJ5IGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLCBhbmQgbWF5YmUgYSBmZXcgb3RoZXIgcGxhY2VzLi4uIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIGJlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY2FsbCBwYXRocy4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9za19hc3NpZ25fcHJvdG9gIGFuZCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGFyZSB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBodW50IGRvd24gdGhvc2UgcmVmZXJlbmNlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGUgZmlsdGVyaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBsb2dpYyB0aWVkIHRvIHRoZSBzb2NrZXQgYW5kIHNrYiBtYW5pcHVsYXRpb24gd2l0aGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjU1LjAxODYyNTg0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzQxMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19hc3NpZ25fcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9ODAxMz1CUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMzY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMzctXFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19hc3NpZ24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjU1PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzEtXFx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc3MjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19hc3NpZ25fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODc3My1cXHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHN0YW1wOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo1NS4xNDQ5NzUwMzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIxMTA2NzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUHJvdG9jb2wgTWFuaXB1bGF0aW9uIHdpdGggQlBGKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGxvb2sgaW50byBvcHRpb25zIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wgb2YgYSBwYWNrZXQgdXNpbmcgQlBGLiBMZXQgbWUgc2VlLi4uIEknbSB0aGlua2luZyBvZiBmb2N1c2luZyBteSBzZWFyY2ggb24gdGhvc2UgQlBGIGhlbHBlciBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBtYW5pcHVsYXRpbmcgcGFja2V0IHByb3RvY29scy4gU3BlY2lmaWNhbGx5LCBsZXQncyB6ZXJvIGluIG9uIGBicGZfc2tiX2NoYW5nZV9wcm90b19wcm90b2AgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyB0byBiZSByZWxldmFudC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgdW5kZXJzdGFuZCB0aGVpciBleGFjdCBiZWhhdmlvcnMuIEhvcGVmdWxseSwgb25lIG9mIHRoZXNlIGhlbHBlcnMgd2lsbCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gYWZ0ZXIsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo1Ny4zNTYwNDQxMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTM2ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTM0OTQ9c3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MTktXFxubmV0L2NvcmUvZmlsdGVyLmM6MzUyMDpCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzUyMS1cXHQgICB1NjQsIGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU2MC1cXG5uZXQvY29yZS9maWx0ZXIuYzozNTYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MzU2MjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9jaGFuZ2VfcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU2My1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDAyMD1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MDM4LVxcdCAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzOTpcXHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDAtXFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04Njg0LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9wcm90bzpcXG5uZXQvY29yZS9maWx0ZXIuYzo4Njg1OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODY4Ni1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdHlwZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6NTcuNDM5MTkxMzk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzNzQxNjcwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVENQIFJlcXVlc3QgU29ja2V0IEFzc2lnbm1lbnQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBrZXkgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBoYW5kbGVkLCBwcm9iYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQlBGLiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGl0cyB1c2UuIEJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGUgcmFiYml0IGhvbGUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSB3aGVyZSBgYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2tgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgY29udGV4dCBoZXJlOyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHRoZSBnYXRla2VlcGVyIG9yIHZhbGlkYXRvciBmb3Igc2V0dGluZyB1cCB0aG9zZSByZXF1ZXN0IHNvY2tldHMuIFdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3b3VsZCBzaG93IG1lIHRoZSBjcnVjaWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjay4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwIG9yIHN0YXRpYyBhbmFseXNpcyB0b29scyBhbmQgdHJhY2UgdGhhdCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjowMS44MTMzNjMxMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTUzMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyODYyPUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19hZGRyKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODYzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY0OkJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4NjUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY2OkJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY3LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI4OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk3LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk4OlxcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2ssXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MDEuODc2OTI0MjE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MDg0MDczMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfa2Z1bmNfc2V0X3RjcF9yZXFza2AgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2tgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcmVnaXN0cmF0aW9uLiBXaGVyZSBleGFjdGx5IGRvZXMgdGhpcyBrZnVuYyBnZXQgaG9va2VkIGludG8gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHNlZSBob3cgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBleHBvc2VzIGl0LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFRDUCBzdGFjay4gVW5kZXJzdGFuZGluZyBpdHMgcmVnaXN0cmF0aW9uIGdpdmVzIG1lIGEgaGFuZGxlIG9uIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgcmVsYXRlZCBCUEYgdG9vbHMuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBzZWFyY2ggYW5kIHNlZSB3aGVyZSB0aGlzIHJlZ2lzdHJhdGlvbiBpcyBoYXBwZW5pbmcuIEhvcGVmdWxseSwgdGhpcyBkb2Vzbid0IGxlYWQgZG93biBhIHJhYmJpdCBob2xlIG9mIG1hY3Jvcy4gSSdtIGhvcGluZyBmb3IgYSBjbGVhbiBhbmQgc2ltcGxlIHJlZ2lzdHJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjowNC4yODUzMzU2MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjM4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9rZnVuY19zZXRfdGNwX3JlcXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyODkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfYWRkciA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5Ny1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTExPXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzMC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzMTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzMi1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjA0LjM1ODk3ODc0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTY2MTA5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBJbml0aWFsaXphdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciBlaXRoZXIgaW5pdGlhbGl6aW5nIGEgQlBGIGtmdW5jLCB1dGlsaXppbmcgYSBCUEYgc3lzdGVtIGNhbGwsIG9yIGNvbmZpZ3VyaW5nIGEgVHJhZmZpYyBDb250cm9sIChUQykgY2xhc3NpZmllciBhY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIGNvcmUgbG9naWMsIHdoaWNoIGxpa2VseSBzaXRzIGRlZXAgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBmdW5jdGlvbiBgYnBmX2tmdW5jX2luaXRgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGV4cGxvcmUuIE5vdywgYSByb3VnaCBndWVzcyBzYXlzIHRoZSBtYWluIGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyOTAwIG9yIHRoZXJlYWJvdXRzIHdpdGhpbiB0aGUgZmlsZSwgd2hpY2ggc2VlbXMgbGlrZSBhIHNlbnNpYmxlIHBsYWNlIHRvIGJlZ2luIHRoZSBpbnZlc3RpZ2F0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0J3MgYWNjdXJhdGUsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBwZXJ0aW5lbnQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjoxMy4zMjUwOTEzMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwNTpcXHRcXG4xMjkwNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuMTI5MDc6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI5MDg6XFx0XFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcXG4xMjkwOTpcXHR9O1xcbjEyOTEwOlxcdFxcbjEyOTExOlxcdHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuMTI5MTI6XFx0e1xcbjEyOTEzOlxcdFxcdGludCByZXQ7XFxuMTI5MTQ6XFx0XFxuMTI5MTU6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkxNjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkxNzpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkxODpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI5MTk6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyOTIwOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyMTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyMjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyOTIzOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyNDpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyNTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI5MjY6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG4xMjkyNzpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbjEyOTI4OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2YnBmX2tmdW5jX3NldF94ZHApO1xcbjEyOTI5OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG4xMjkzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG4xMjkzMTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG4xMjkzMjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuMTI5MzM6XFx0XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG4xMjkzNDpcXHR9XFxuMTI5MzU6XFx0bGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XFxuMTI5MzY6XFx0XFxuMTI5Mzc6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjEyOTM4OlxcdFxcbjEyOTM5OlxcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxcbjEyOTQwOlxcdCAqXFxuMTI5NDE6XFx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcXG4xMjk0MjpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjk0MzpcXHQgKlxcbjEyOTQ0OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjEzLjMyNTYxOTgxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjI1ODEwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIGVuYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBzeXN0ZW0gY2FsbHMsIFRDIChUcmFmZmljIENvbnRyb2wpLCBhbmQgY2xzYWN0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkOyB0aGF0J3MgdGhlIGtleSB0byBiZWluZyBhYmxlIHRvIGxvYWQgZUJQRiBwcm9ncmFtcy4gVGhlbiwgZm9yIFRDIGFjdGlvbnMgYW5kIGZpbHRlcnMgdG8gd29yaywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05FVF9DTFNfQUNUYCBpcyBhbHNvIGVuYWJsZWQuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIHNob3VsZCBjaGVjayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmc2ApIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBjb21waWxlIHBhcnRzIG9mIHRoZSBCUEYgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgYnBmX3NrX2Fzc2lnbmAgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIEknbGwgaGF2ZSBhIGxvb2sgYXQgbGluZXMgMzQ4MC0zNTMwLCA4MDEwLTgwNDAgYW5kIDg2NTAtODc4MCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGltcGxlbWVudGVkIGFuZCBpZiB0aGV5J3JlIGRlcGVuZGVudCBvbiBhbnkgc3BlY2lmaWMgY29uZmlncy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MTcuNTUxNDMyNDY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDg1OlxcdFxcdFxcdHJldHVybiBicGZfc2tiX3Byb3RvXzRfdG9fNihza2IpO1xcbjM0ODY6XFx0XFxuMzQ4NzpcXHRcXHRpZiAoZnJvbV9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSBcXHUwMDI2XFx1MDAyNlxcbjM0ODg6XFx0XFx0ICAgICAgdG9fcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApKVxcbjM0ODk6XFx0XFx0XFx0cmV0dXJuIGJwZl9za2JfcHJvdG9fNl90b180KHNrYik7XFxuMzQ5MDpcXHRcXG4zNDkxOlxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMzQ5MjpcXHR9XFxuMzQ5MzpcXHRcXG4zNDk0OlxcdHN0YXRpYyBib29sIGJwZl9za19hc3NpZ25fZmFtaWx5X29rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuMzQ5NTpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbjM0OTY6XFx0e1xcbjM0OTc6XFx0XFx0dW5zaWduZWQgc2hvcnQgZmFtaWx5O1xcbjM0OTg6XFx0XFxuMzQ5OTpcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4zNTAwOlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbjM1MDE6XFx0XFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDtcXG4zNTAyOlxcdFxcdFxcdGJyZWFrO1xcbjM1MDM6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4zNTA0OlxcdFxcdFxcdGZhbWlseSA9IEFGX0lORVQ2O1xcbjM1MDU6XFx0XFx0XFx0YnJlYWs7XFxuMzUwNjpcXHRcXHRkZWZhdWx0OlxcbjM1MDc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzUwODpcXHRcXHR9XFxuMzUwOTpcXHRcXG4zNTEwOlxcdFxcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cXG4zNTExOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcXG4zNTEyOlxcdFxcdFxcdHJldHVybiBpbmV0X3JlcXNrKHNrKS1cXHUwMDNlcnNrX29wcy1cXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcXG4zNTEzOlxcdFxcbjM1MTQ6XFx0XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XFxuMzUxNTpcXHRcXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMzUxNjpcXHRcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuMzUxNzpcXHRcXHRcXHQhaXB2Nl9vbmx5X3NvY2soc2spKTtcXG4zNTE4OlxcdH1cXG4zNTE5OlxcdFxcbjM1MjA6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxcbjM1MjE6XFx0XFx0ICAgdTY0LCBmbGFncylcXG4zNTIyOlxcdHtcXG4zNTIzOlxcdFxcdGludCByZXQ7XFxuMzUyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MTcuNTUxODMyMjU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5Mzc4NDcxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0YXRpYyBGdW5jdGlvbiBUYXJnZXRpbmcgaW4gRm9jdXNTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGNhbiBJIGV2ZW4gdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgd2l0aGluIEZvY3VzU3ltYm9scz8gUnVsZSA0IGNvbWVzIHRvIG1pbmQsIHRoZSBvbmUgYWJvdXQgaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gSXQgc3RhdGVzIHRoYXQgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGxhY2sgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiBgdm1saW51eGAsIGFuZCB0aGVyZWZvcmUgY2FuJ3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgY292ZXJhZ2UgZmlsdGVycy4gQnV0IGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AgaXMgKm5vdCogaW4gYSBoZWFkZXI7IGl0J3Mgc3RhdGljLCB5ZXMsIGJ1dCBpdCByZXNpZGVzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgZGVwZW5kaW5nIG9uIGlubGluaW5nLCBHQ0MvQ2xhbmcgKm1pZ2h0KiBpbmxpbmUgaXQsIGFuZCBpZiBpdCdzIGlubGluZWQsIEknbSBzY3Jld2VkLCByaWdodD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgYW5kIHRoZSBjaGFuZ2VzLlxuXG5Tbywgd2hvJ3MgY2FsbGluZyBpdD8gU3BlY2lmaWNhbGx5LCB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIGFsb25nIHdpdGggdGhpcyBzdGF0aWMgZnVuY3Rpb24/IExldCdzIHNlZS4uLiBJIGtub3cgYGJwZl9za19hc3NpZ25gIGlzIG9uZSwgc2luY2UgaXQncyB1c2VkIGluIHRoZSBjb2RlIHdoZXJlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkLiBJdCdzIHVzZWQgaW4gYEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgLi4uKWAuIFJpZ2h0LCBgQlBGX0NBTExfM2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHN5bWJvbCBuYW1lIGluIHRoZSBrZXJuZWwuIElzIGl0IGBfX19icGZfc2tfYXNzaWduYCBvciBwbGFpbiBgYnBmX3NrX2Fzc2lnbmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQlBGX0NBTExfYCBtYWNyb3MgZXhwYW5kIHRvIHRyYWNrIGhvdyB0aGlzIGdldHMgZGVmaW5lZC4gVGltZSB0byBlaXRoZXIgYGdyZXBwZXJgIHRoaXMgb3IgZGlnIGludG8gYHZtbGludXhgL2BrYWxsc3ltc2AgdG8gZmluZCBob3cgYEJQRl9DQUxMX2AgZnVuY3Rpb25zIGFyZSBuYW1lZC4gT3IgbWF5YmUgZXZlbiBjaGVjayBob3cgc3l6a2FsbGVyIHRhcmdldHMgdGhvc2Uga2luZHMgb2YgZnVuY3Rpb25zLiBJIGhhdmUgdG8gZmluZCB0aGUgcmVhbCBzeW1ib2wgdG8gcHJvY2VlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjoyMS40ODk2ODM2MjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjUzNTIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY4MS0jZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgyOiNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODMtI2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MjEuNjg2MjY0MzY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNjE4NzAyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBDb3JlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgQlBGIG9wZXJhdGlvbiwgYEJQRl9DQUxMX3hgLiBSaWdodCwgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBoZWFkZXIgZmlsZS4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBCUEYgcHJvZ3JhbXMgYXJlIGNvbnN0cnVjdGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgbGlrZWx5IHNvbWUgbWFjcm8gbWFnaWMgZGVmaW5pbmcgdGhlIG9wY29kZSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29tbWVudHMgZXhwbGFpbmluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgdXNhZ2UgY29uc3RyYWludHMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBncm91bmR3b3JrIEkgbmVlZCB0byB3b3JrIHdpdGggdGhpcyBmdW5jdGlvbiBwcm9wZXJseS4gSSB3aWxsIG5vdyBleGFtaW5lIHRoaXMgY2xvc2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGV4cG9zZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQyMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjIzLjc0ODEzNjY0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjYxOlxcdFxcbiA2NjI6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NjM6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY2NDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY2NTpcXHRcXG4gNjY2OlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjY3OlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Njg6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY2OTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjcwOlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NzE6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjczOlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NzQ6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY3NTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjc2OlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2Nzk6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgwOlxcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4MTpcXHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2ODI6XFx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgzOlxcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4NDpcXHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2ODU6XFx0XFxuIDY4NjpcXHQjZGVmaW5lIE5PVFJBQ0VfQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBub3RyYWNlLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjg3OlxcdFxcbiA2ODg6XFx0I2RlZmluZSBicGZfY3R4X3JhbmdlKFRZUEUsIE1FTUJFUilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDY4OTpcXHRcXHRvZmZzZXRvZihUWVBFLCBNRU1CRVIpIC4uLiBvZmZzZXRvZmVuZChUWVBFLCBNRU1CRVIpIC0gMVxcbiA2OTA6XFx0I2RlZmluZSBicGZfY3R4X3JhbmdlX3RpbGwoVFlQRSwgTUVNQkVSMSwgTUVNQkVSMilcXHRcXHRcXHRcXHRcXFxcXFxuIDY5MTpcXHRcXHRvZmZzZXRvZihUWVBFLCBNRU1CRVIxKSAuLi4gb2Zmc2V0b2ZlbmQoVFlQRSwgTUVNQkVSMikgLSAxXFxuIDY5MjpcXHQjaWYgQklUU19QRVJfTE9ORyA9PSA2NFxcbiA2OTM6XFx0IyBkZWZpbmUgYnBmX2N0eF9yYW5nZV9wdHIoVFlQRSwgTUVNQkVSKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNjk0OlxcdFxcdG9mZnNldG9mKFRZUEUsIE1FTUJFUikgLi4uIG9mZnNldG9mZW5kKFRZUEUsIE1FTUJFUikgLSAxXFxuIDY5NTpcXHQjZWxzZVxcbiA2OTY6XFx0IyBkZWZpbmUgYnBmX2N0eF9yYW5nZV9wdHIoVFlQRSwgTUVNQkVSKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNjk3OlxcdFxcdG9mZnNldG9mKFRZUEUsIE1FTUJFUikgLi4uIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKyA4IC0gMVxcbiA2OTg6XFx0I2VuZGlmIC8qIEJJVFNfUEVSX0xPTkcgPT0gNjQgKi9cXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjoyMy43NDg1NTU1NjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM1ODcwMDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5pbmcgdGhlIGFjdHVhbCBCUEYga2Z1bmMgc2lnbmF0dXJlIGFzIGBhdHRyIHU2NCBuYW1lKC4uLilgIHdoaWNoIGludGVybmFsbHkgY2FsbHMgYF9fX18jI25hbWVgLiBSaWdodCwgc28gdGhhdCdzIHdoZXJlIHRoZSBzeW1ib2wgaW4gYHZtbGludXhgIGNvbWVzIGZyb20gLSBpdCAqaXMqIHNpbXBseSB0aGUgYG5hbWVgIGFzIHdlJ2QgZXhwZWN0LiBGb3IgaW5zdGFuY2UsIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgYW5kIGBicGZfc2tfYXNzaWduYCBhcmUgbGl0ZXJhbGx5IHRoYXQuIEV2ZW4gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBpcyBhIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soLi4uKWAsIHNvLCBhZ2FpbiwgaXQncyBqdXN0IGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AuIEFuZCB0aGUgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayguLi4pYC4gR29vZCB0byBub3RlIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpbGUgcG90ZW50aWFsbHkgaW5saW5lZCwgY291bGQgc3RpbGwgYmUgY29uc2lkZXJlZCBmb3IgdHJhY2luZy4gQW5kIHRob3NlIGVudHJ5IHBvaW50cywgYGJwZl9za19hc3NpZ25gLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLCBhcmUgdGhlIGRpcmVjdCBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoISBTZWVtcyBsaWtlIHdlIHNob3VsZCBhbHNvIGluY2x1ZGUgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC5cblxuTm93LCBiZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucywgbGV0J3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGNhbGwgbG9jYXRpb25zLiBIYW5nIG9uLCB3YWl0LCBiZXR0ZXIgeWV0LCBsZXQncyB0cmFjZSB3aGVyZSBgYnBmX3NrX2Fzc2lnbmAgY2FuIGJlIGNhbGxlZCBmcm9tLiBJcyBpdCBjYWxsZWQgZnJvbSBhIHBsYWNlIGxpa2UgYHNrX2xvb2t1cGAgb3IgYHNvY2tvcHNgIG9yIGFueXdoZXJlIGVsc2U/IEFoLCBob2xkIG9uLi4uIHRoZSBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBoYXMgdGhlIGRlZmluaXRpb246IGBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKWAuIFJpZ2h0ISBPa2F5LCBsZXQncyBhdm9pZCBzcGVuZGluZyBhbGwgZGF5IGRvaW5nIHRoaXMgbWFudWFsbHkgLSBsZXQncyBoaXQgYGdyZXBwZXJgIGFuZCBzZWUgYWxsIHRoZSBrZXJuZWwgZGVmaW5pdGlvbnMgb2YgYGJwZl9za19hc3NpZ25gLiBUaGF0IHNob3VsZCBzaG93IHRoZSByZWFsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MjguMTA3MjYwMjMyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEzMTA5MDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19hc3NpZ25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0PTExPVdoZW4gaW52b2tlZCBCUEYgc2tfbG9va3VwIHByb2dyYW0gY2FuIHNlbGVjdCBhIHNvY2tldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6MTI6aW5jb21pbmcgcGFja2V0IGJ5IGNhbGxpbmcgdGhlIGBgYnBmX3NrX2Fzc2lnbigpYGAgQlBGIGhlbHBlciBmdW5jdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtMTMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q9NTg9QSBCUEYgc2tfbG9va3VwIHByb2dyYW0gY2FuIGFsc28gc2VsZWN0IGEgc29ja2V0IHRvIHJlY2VpdmUgdGhlIHBhY2tldCBieVxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDo1OTpjYWxsaW5nIGBgYnBmX3NrX2Fzc2lnbigpYGAgQlBGIGhlbHBlci4gVHlwaWNhbGx5LCB0aGUgcHJvZ3JhbSBsb29rcyB1cCBhIHNvY2tldFxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC02MC1pbiBhIG1hcCBob2xkaW5nIHNvY2tldHMsIHN1Y2ggYXMgYGBTT0NLTUFQYGAgb3IgYGBTT0NLSEFTSGBgLCBhbmQgcGFzc2VzIGFcXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6NjE6YGBzdHJ1Y3QgYnBmX3NvY2sgKmBgIHRvIGBgYnBmX3NrX2Fzc2lnbigpYGAgaGVscGVyIHRvIHJlY29yZCB0aGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtNjItc2VsZWN0aW9uLiBTZWxlY3RpbmcgYSBzb2NrZXQgb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlIHByb2dyYW0gaGFzIHRlcm1pbmF0ZWRcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdD04MT1yZWNlaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBzb2NrZXQgbG9va3VwLiBOYW1lbHk6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtODYtKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIEw0IHBvcnQsXFxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0Ojg3OiogdGhlIHNvY2tldCB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkIHdpdGggYGBicGZfc2tfYXNzaWduKClgYC5cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtODgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q9OTA9aGVhZGVyLCBhbmQgYGJwZi1oZWxwZXJzKDcpXFxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTkxLVxcdTAwM2NodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2JwZi1oZWxwZXJzLjcuaHRtbFxcdTAwM2VgXyBtYW4tcGFnZSBzZWN0aW9uXFxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0OjkyOmZvciBgYGJwZl9za19hc3NpZ24oKWBgIGZvciBkZXRhaWxzLlxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC05My1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTQ2LSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1NDc6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKnNrLCB1NjQgZmxhZ3MpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NDgtICpcXHREZXNjcmlwdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NzgtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NDU3OTogKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTgwLSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM0Nzk9c3RhdGljIGludCBicGZfc2tiX3Byb3RvX3hsYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHRvX3Byb3RvKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5My1cXG5uZXQvY29yZS9maWx0ZXIuYzozNDk0OnN0YXRpYyBib29sIGJwZl9za19hc3NpZ25fZmFtaWx5X29rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5NS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MzUyMD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zNTUxLVxcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmM6MzU1MjpcXHQgICAgIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2tiLVxcdTAwM2VzaykpXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU1My1cXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MDAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODAxMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo4MDEzOkJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy04MDE0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMjItXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMjM6XFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy04MDI0LVxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODAzNS1cXG5uZXQvY29yZS9maWx0ZXIuYzo4MDM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2Fzc2lnbl9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo4MDM3OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfYXNzaWduLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMzgtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc3MS1cXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzcyOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NzczLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90c3RhbXA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUxNz1fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfYWRkcl9zZXRfc3VuX3BhdGgoc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqc2Ffa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTM4Ol9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl90Y3BfcmVxX2F0dHJzICphdHRycywgaW50IGF0dHJzX19zeilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTYxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTYyOlxcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjMtXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg2ND1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcXG4tLVxcbnNjcmlwdHMvYnBmX2RvYy5weT02OTI9Y2xhc3MgUHJpbnRlckhlbHBlcnNIZWFkZXIoUHJpbnRlcik6XFxuLS1cXG5zY3JpcHRzL2JwZl9kb2MucHktODIxLSAgICAgICAgJ2JwZl9nZXRfc29ja2V0X2Nvb2tpZScsXFxuc2NyaXB0cy9icGZfZG9jLnB5OjgyMjogICAgICAgICdicGZfc2tfYXNzaWduJyxcXG5zY3JpcHRzL2JwZl9kb2MucHktODIzLSAgICBdXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU0Ni0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NTQ3OiAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpzaywgdTY0IGZsYWdzKVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTQ4LSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTc4LSAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1Nzk6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU4MC0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oPTYzPXN0cnVjdCBicGZfdGNwX3JlcV9hdHRycztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oOjY0OmV4dGVybiBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC02NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KSBfX2tzeW07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYz02Nz1hc3NpZ25fc2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYXNzaWduX3JldXNlLmMtNzQtXFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Fzc2lnbl9yZXVzZS5jOjc1OlxcdHJldCA9IGJwZl9za19hc3NpZ24oc2tiLCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYXNzaWduX3JldXNlLmMtNzYtXFx0YnBmX3NrX3JlbGVhc2Uoc2spO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jPTY2PXN0YXRpYyBpbnQgaGFuZGxlX2lwX3RjcChzdHJ1Y3QgZXRoaGRyICpldGgsIHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xMzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jOjEzOTpcXHRcXHRpZiAoYnBmX3NrX2Fzc2lnbihza2IsIHJlcV9zaywgMCkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmMtMTQwLVxcdFxcdFxcdExPRygpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jLTE1Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM6MTU3OlxcdFxcdGlmIChicGZfc2tfYXNzaWduKHNrYiwgdHAsIDApKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jLTE1OC1cXHRcXHRcXHRMT0coKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNjgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jOjE2OTpcXHRpZiAoYnBmX3NrX2Fzc2lnbihza2IsIGJwZl9za2MsIDApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNzAtXFx0XFx0TE9HKCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYz0xMDI9aGFuZGxlX3VkcChzdHJ1Y3QgX19za19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIGJvb2wgaXB2NClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jLTEyNi1hc3NpZ246XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmM6MTI3OlxcdHJldCA9IGJwZl9za19hc3NpZ24oc2tiLCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTI4LVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTEzMz1oYW5kbGVfdGNwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgYm9vbCBpcHY0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTY1LWFzc2lnbjpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxNjY6XFx0cmV0ID0gYnBmX3NrX2Fzc2lnbihza2IsIHNrLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYy0xNjctXFx0YnBmX3NrX3JlbGVhc2Uoc2spO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmM9MTcxPVNFQyhcXFwidGNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jOjE3MjppbnQgYnBmX3NrX2Fzc2lnbl90ZXN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYy0xNzMte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MTA5PWludCByZWRpcl9wb3J0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xMjAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTIxOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTIyLVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTEyOD1pbnQgcmVkaXJfaXA0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xNDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTQ0OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTQ1LVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE1MT1pbnQgcmVkaXJfaXA2KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xNjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTcwOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTcxLVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE3Nj1pbnQgc2VsZWN0X3NvY2tfYShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTg0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjE4NTpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTE4Ni1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0xOTE9aW50IHNlbGVjdF9zb2NrX2Ffbm9fcmV1c2Vwb3J0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xOTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjAwOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX05PX1JFVVNFUE9SVCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjAxLVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTIwNj1pbnQgc2VsZWN0X3NvY2tfYihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X21kICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yMTQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjE1Oi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbigpIHJldHVybnMgLUVFWElTVCBpZiBzb2NrZXQgYWxyZWFkeSBzZWxlY3RlZC4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yMTYtU0VDKFxcXCJza19sb29rdXBcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTIxNz1pbnQgc2tfYXNzaWduX2VleGlzdChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjI1LVxcdFxcdGdvdG8gb3V0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjIyNjpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIyNy1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjMzLVxcdFxcdGdvdG8gb3V0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjIzNDpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIzNS1cXHRpZiAoZXJyICE9IC1FRVhJU1QpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI0Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyNDg6LyogQ2hlY2sgdGhhdCBicGZfc2tfYXNzaWduKEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKSBjYW4gb3ZlcnJpZGUgc2VsZWN0aW9uLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI0OS1TRUMoXFxcInNrX2xvb2t1cFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MjUwPWludCBza19hc3NpZ25fcmVwbGFjZV9mbGFnKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNTgtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjU5OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjYwLVxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNjYtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjY3OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI2OC1cXHRpZiAoZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjgwOi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbihzaz1OVUxMKSBpcyBhY2NlcHRlZC4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yODEtU0VDKFxcXCJza19sb29rdXBcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTI4Mj1pbnQgc2tfYXNzaWduX251bGwoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI4OC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyODk6XFx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5MC1cXHRpZiAoZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yOTctXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6Mjk4OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMDUtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzA2OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBOVUxMLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMDctXFx0aWYgKGVyciAhPSAtRUVYSVNUKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTMwOC1cXHRcXHRnb3RvIG91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzozMDk6XFx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMTAtXFx0aWYgKGVycilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMTEtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzEyOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTMxMy1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MzI1PWludCBhY2Nlc3NfY3R4X3NrKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMzktXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzQwOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzazEsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM0MS1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzUyLVxcdC8qIFJlc2V0IHNlbGVjdGlvbiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjM1MzpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgTlVMTCwgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM1NC1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzYyLVxcdFxcdGdvdG8gb3V0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjM2MzpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2syLCBCUEZfU0tfTE9PS1VQX0ZfUkVQTEFDRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzY0LVxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0zOTE9aW50IGN0eF9uYXJyb3dfYWNjZXNzKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy01NjYtXFx0aWYgKHNrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6NTY3OlxcdFxcdGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTY4LVxcdFxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTU3NT1pbnQgc2tfYXNzaWduX2Vzb2Nrbm9zdXBwb3J0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy01ODQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6NTg1OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTg2LVxcdGlmIChlcnIgIT0gLUVTT0NLVE5PU1VQUE9SVCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9NjI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHNlbGVjdF9zZXJ2ZXJfYShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNjM1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjYzNjpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTYzNy1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jPTUwNz1zdGF0aWMgaW50IHRjcF9oYW5kbGVfYWNrKHN0cnVjdCB0Y3Bfc3luY29va2llICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTU0OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jOjU1MDpcXHRyZXQgPSBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhjdHgtXFx1MDAzZXNrYiwgc2ssIFxcdTAwMjZjdHgtXFx1MDAzZWF0dHJzLCBzaXplb2YoY3R4LVxcdTAwM2VhdHRycykpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmMtNTUxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjozMC4zMjAzNzU1NjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMDU0NDk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBTa19Mb29rdXAgQXNzaWduIEhvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3NrX2Fzc2lnbmAgd2l0aGluIGBza19sb29rdXBgLCBhbmQgSSBqdXN0IHJlYWxpemVkIHRoYXQncyBhY3R1YWxseSBhbiBhbGlhcyBvciBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24sIGBicGZfc2tfbG9va3VwX2Fzc2lnbmAuIEdvb2QgY2F0Y2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBhbmQgd2hlcmUgdGhlIGtlcm5lbCBpcyB1c2luZyBgQlBGX0ZVTkNfc2tfYXNzaWduYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIHNvIGxldCdzIGNoZWNrIGl0LiBJIG5lZWQgdG8gZ2V0IGEgbGlzdCBvZiBpdHMgdXNhZ2UgYXMgaXQgaXMgaW50ZWdyYWwgdG8gdGhlIHdvcmtpbmdzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MzIuMzIwOTIzNjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDk3NDMxMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0ZVTkNfc2tfYXNzaWduXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9icGYuaD02MzgyPWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYzODctXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYzODg6LyogQlBGX0ZVTkNfc2tfYXNzaWduIGZsYWdzIGluIGJwZl9za19sb29rdXAgY29udGV4dC4gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjM4OS1lbnVtIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc3MC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzcxOlxcdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzItXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfYXNzaWduX3Byb3RvO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIwNTA9c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1NC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA1NTpcXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1Ni1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTYzODI9ZW51bSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjM4Ny1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjM4ODovKiBCUEZfRlVOQ19za19hc3NpZ24gZmxhZ3MgaW4gYnBmX3NrX2xvb2t1cCBjb250ZXh0LiAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg5LWVudW0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjozNC42NzA2NzUwOTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjY0MzI5NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgRnVuY3Rpb24gQXNzaWdubWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgYHRjX2Nsc19hY3RfZnVuY19wcm90b2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCByZXR1cm5pbmcgYGJwZl9za19hc3NpZ25fcHJvdG9gLCB3aGljaCBpbiB0dXJuIHBvaW50cyB0byBgYnBmX3NrX2Fzc2lnbmAuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFzIHRoaXMgbGlrZWx5IG1lYW5zIHdlJ3JlIGFzc2lnbmluZyBhIHNvY2tldCwgYHNrYCwgdG8gc29tZXRoaW5nLiBGdXJ0aGVybW9yZSwgYHNrX2xvb2t1cF9mdW5jX3Byb3RvYCByZXR1cm5zIGBicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90b2AsIHNvIHdlIGFyZSBsaWtlbHkgbG9va2luZyB1cCBhbmQgdGhlbiBhc3NpZ25pbmcvbW9kaWZ5aW5nIHNvbWV0aGluZyBoZXJlLiBBbHNvIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGFsc28gcmV0dXJucyBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG9gLCB3aGljaCBpbmRpY2F0ZXMgd2UncmUgY2FwYWJsZSBvZiBjaGFuZ2luZyB0aGUgcHJvdG9jb2wgb24gYW4gYHNrYmAuXG5cbk5vdyB0aGluZ3MgZ2V0IHJlYWxseSBpbnRlcmVzdGluZzsgYGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrYCBzcGVjaWZpY2FsbHkgcmVnaXN0ZXJzIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AgKmZvciogYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggVENQIHJlcXVlc3Qgc29ja2V0cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sIChUQykgdXNpbmcgQlBGLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGF0J3MgaW50ZXJlc3RpbmcuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgY29uZmlncyB0aWVkIHRvIFRDIEJQRiwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCwgYW5kIHRoZSBgQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCAuLi4pYCBjYWxsIGl0c2VsZi4gR2l2ZW4gdGhlIFRDIGNvbnRleHQsIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBjaGVjayBgaW5pdC9LY29uZmlnYCBqdXN0IGluIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODY1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjQxLjMxMzk3MjUyOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODY3NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXFxubmV0L3NjaGVkL0tjb25maWctNzAzLVxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjQxLjQ1Njg0ODM5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDk4Njc4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBOZXR3b3JrIFNjaGVkdWxlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb25zIGZyb20gNzAwIHRvIDcyMC4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBhdmFpbGFibGUgbmV0d29yayBzY2hlZHVsZXIgZmVhdHVyZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYnVpbGQgZmxhZ3MuIEknbSBleHBlY3RpbmcgdGhpcyByYW5nZSB0byBjb3ZlciBhIHNwZWNpZmljIHNldCBvZiBzY2hlZHVsZXJzLCBwZXJoYXBzIGEgcmVjZW50IGFkZGl0aW9uIG9yIGEgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGdyb3VwLiBUaW1lIHRvIGdldCB0aGUgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjY1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjo0NS41NTU1Mjk0MjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cXG4gNzAxOlxcdFxcbiA3MDI6XFx0Y29uZmlnIE5FVF9DTFNfQUNUXFxuIDcwMzpcXHRcXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcbiA3MDQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNzA1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXFxuIDcwODpcXHRcXHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXFxuIDcwOTpcXHRcXHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cXG4gNzEwOlxcdFxcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdCAgQSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgaXByb3V0ZTIgcGFja2FnZSBpcyByZXF1aXJlZCB0byB1c2VcXG4gNzEzOlxcdFxcdCAgZXh0ZW5kZWQgbWF0Y2hlcy5cXG4gNzE0OlxcdFxcbiA3MTU6XFx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXFxuIDcxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBQb2xpY2luZ1xcXCJcXG4gNzE3OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzE4OlxcdFxcdGhlbHBcXG4gNzE5OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBkbyB0cmFmZmljIHBvbGljaW5nLCBpLmUuIHN0cmljdFxcbiA3MjA6XFx0XFx0ICBiYW5kd2lkdGggbGltaXRpbmcuIFRoaXMgYWN0aW9uIHJlcGxhY2VzIHRoZSBleGlzdGluZyBwb2xpY2luZ1xcbiA3MjE6XFx0XFx0ICBtb2R1bGUuXFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3MjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BvbGljZS5cXG4gNzI1OlxcdFxcbiA3MjY6XFx0Y29uZmlnIE5FVF9BQ1RfR0FDVFxcbiA3Mjc6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgYWN0aW9uc1xcXCJcXG4gNzI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6NDUuNTU1NjIwNzYzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcwODY3NDMxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIG1ha2Ugc3VyZSB0aG9zZSBCUEYgb3B0aW9ucyBhcmUgc2V0IGNvcnJlY3RseS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYm90aCBgTkVUX0NMU19CUEZgIGFuZCBgTkVUX0FDVF9CUEZgIGFyZSBlbmFibGVkLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciB0aGUgaW5mcmFzdHJ1Y3R1cmUgSSdtIHdvcmtpbmcgb24sIHNvIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGFyZSBib3RoIHNldCBhbmQgcmVhZHkgdG8gZ28uIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGV5J3JlIG5vdCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjUyLjY0MjM2NjY4NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyNTkwOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0JQRnxjb25maWcgTkVUX0FDVF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXFxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiQlBGLWJhc2VkIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz04MzA9Y29uZmlnIE5FVF9BQ1RfVkxBTlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODQwLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg0MTpjb25maWcgTkVUX0FDVF9CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy04NDItXFx0dHJpc3RhdGUgXFxcIkJQRiBiYXNlZCBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjUzLjMwNDk2NjQ5OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1ODg1OTE4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGFkZCBgQlBGX1NZU0NBTExgIHRvIHRoZSBjaGVja2xpc3QuIEl0J3MgYSBrZXkgcGllY2UgdG8gdmVyaWZ5LiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gY2hlY2sgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSB3YW50IHRvIHF1aWNrbHkgc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbiBwcm90b3R5cGVzOiBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gUHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3aWxsIHRlbGwgbWUgd2hldGhlciB0aGlzIHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWwgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyB3aWxsIGRpcmVjdGx5IGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjo1OS4xOTA4OTA2MjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTUxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00NTY1PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDU2Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTY3OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1Njgtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjU5LjI2NTA1MDY3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MTc4MDMxOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gQlBGIFByb2dyYW0gTG9hZGluZyoqXG5cbk9rYXksIHNvIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRgLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IHRvIGFjdHVhbGx5ICpsb2FkKiBCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB0aG9zZSBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2Agb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCwgSSBuZWVkIGBCUEZfU1lTQ0FMTGAsIGFuZCBlaXRoZXIgYE5FVF9DTFNfQUNUYCwgYE5FVF9DTFNfQlBGYCwgb3IgYE5FVF9BQ1RfQlBGYCwgcmlnaHQ/IE9idmlvdXMgdGhhdCBgQ09ORklHX05FVGAgaXMgcmVsZXZhbnQgaGVyZSAtIEknbSBkZWFsaW5nIHdpdGggdGhlIG5ldHdvcmsuIEJ1dCB3aGF0IGFib3V0IGBDT05GSUdfSU5FVGA/IE9yIGBDT05GSUdfSVBWNmAsIHBvdGVudGlhbGx5P1xuXG5Mb29raW5nIGF0IGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AsIEkgc2VlIHRoYXQgaXQgdXNlcyBgaW5ldF9yZXFzayhzaylgIGFuZCBgaXB2Nl9vbmx5X3NvY2soc2spYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IElQdjQgYW5kIElQdjYgbWlnaHQgYmUgYXQgcGxheSBoZXJlLiBMZXQgbWUgY29uZmlybSBpZiBlaXRoZXIgYENPTkZJR19JTkVUYCBvciBgQ09ORklHX0lQVjZgIGFjdHVhbGx5IG1hdHRlcnMuIFRoZSBjaGVja3MgYXJlIHdpdGhpbiBgaW5ldF9yZXFzayhzayktXHUwMDNlcnNrX29wcy1cdTAwM2VmYW1pbHkgPT0gZmFtaWx5O2AgYW5kIGBpcHY2X29ubHlfc29jayhzaylgLlxuXG5Ob3csIEknbSB0aGlua2luZywgaXMgdGhlIGNvZGUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBndWFyZGVkIGJ5LCBvciBkb2VzIGl0IG90aGVyd2lzZSBkZXBlbmQgb24sIGBDT05GSUdfSU5FVGA/IEkgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBpdHNlbGYgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIGBDT05GSUdfSU5FVGAgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODUyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjEzLjQ0MzA4NjE5N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4MjY2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjQyND1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDI5LX1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MzEtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01ODA4PXN0YXRpYyBpbnQgX19icGZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01ODE1LVxcdFxcdHJldHVybiBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MTY6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTctXFx0XFx0cmV0dXJuIHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTktXFx0XFx0cmV0dXJuIHNvbF9pcHY2X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MjA6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcXG5uZXQvY29yZS9maWx0ZXIuYy01ODIxLVxcdFxcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTgzOT1zdGF0aWMgaW50IF9fYnBmX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTg1MC1cXHRcXHRlcnIgPSBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTg1MTpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4NTItXFx0XFx0ZXJyID0gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4NTM6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4NTQtXFx0XFx0ZXJyID0gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MTY3PUJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX2dldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYxNzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjE3MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL2ZpbHRlci5jLTYxNzQtXFx0ICAgIG9wdG5hbWUgXFx1MDAzZT0gVENQX0JQRl9TWU4gXFx1MDAyNlxcdTAwMjYgb3B0bmFtZSBcXHUwMDNjPSBUQ1BfQlBGX1NZTl9NQUMpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyMDk9QlBGX0NBTExfMihicGZfc29ja19vcHNfY2JfZmxhZ3Nfc2V0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjE3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTg6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCAhc2tfZnVsbHNvY2soc2spKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjM0PUJQRl9DQUxMXzMoYnBmX2JpbmQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgYWRkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMzc6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzOC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXFx1MDAzZXNrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI2MS1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6NjI2MjojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02MjYzLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzMwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzMzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjMzMi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYzNjE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzgwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM4Mi1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDM9QlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NzEyLVxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MTQtXFx0Y2FzZSBBRl9JTkVUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjczNz1CUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjc1Ni1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6Njc1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NzU4LVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxODg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5ODojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk5LXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2Nl9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0MTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6ODQxOTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04NDIwLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQ5Nz1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTktXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODUyMDojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NTIxLVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjgtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg1Mjk6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtODUzMC1cXHRjYXNlIEJQRl9GVU5DX3NrX3N0b3JhZ2VfZ2V0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYwNj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzItI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMzojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NjM0LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc1MS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzUyOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NTMtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc5Mj14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODIxOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjItXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODg2Nz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg5NS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfbmV0bnNfY29va2llX3NvY2tfb3BzX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg4OTY6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODg5Ny1cXHRjYXNlIEJQRl9GVU5DX2xvYWRfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MDQtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfdGNwX3NvY2tfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODkwNTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04OTA2LVxcdGRlZmF1bHQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04OTQ5PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODk3My1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NzQ6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODk3NS1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY4OT1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTczMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTczMjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTczMy1zdGF0aWMgdm9pZCBicGZfaW5pdF9yZXVzZXBvcnRfa2VybihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKnJldXNlX2tlcm4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIxMT1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBza19sb29rdXBfdmVyaWZpZXJfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTYtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMTc6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTgtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2OD1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzAtXFx0LyogQlRGIHR5cGVzIGZvciB0Y3BfdGltZXdhaXRfc29jayBhbmQgaW5ldF90aW1ld2FpdF9zb2NrIGFyZSBub3RcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3MTpcXHQgKiBnZW5lcmF0ZWQgaWYgQ09ORklHX0lORVQ9bi4gVHJpZ2dlciBhbiBleHBsaWNpdCBnZW5lcmF0aW9uIGhlcmUuXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzItXFx0ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3NS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3Ny1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyOTc9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjk4LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI5OTojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMwMC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI3NzA9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3ODMtXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3ODQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3ODUtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTM6MTMuNTM1OTIwNjg2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NDgzODY3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRnVuY3Rpb24gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCwgd2hpY2ggZnJvbSBteSBub3Rlcywgc2hvdWxkIGJlIGFyb3VuZCBsaW5lIDEyNTM4IGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBzZWVtcyBuZXR3b3JraW5nLXJlbGF0ZWQsIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGlmIGl0cyB1c2UgaXMgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIGBDT05GSUdfSU5FVGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaGVyZS4gU28sIGxldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUgYmxvY2sgZW5jb21wYXNzaW5nIGxpbmVzIDEyNTMwIHRocm91Z2ggMTI1NDUgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIHF1aWNrbHkuIEknbSBsb29raW5nIGZvciBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIHNvbWV0aGluZyBsaWtlIGFuIGAjaWZkZWZgLCBgI2lmbmRlZmAsIG9yIG1heWJlIGV2ZW4gYW4gYCNpZmAgdGhhdCBtaWdodCBiZSBnYXRpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IGl0IHJlbGF0ZXMgdG8gZ2VuZXJhbCBpbnRlcm5ldHdvcmtpbmcgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTM6MjAuOTg0MzEyMzgzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MzA6XFx0XFxuMTI1MzE6XFx0XFx0dW4gPSAoc3RydWN0IHNvY2thZGRyX3VuICopc2Ffa2Vybi1cXHUwMDNldWFkZHI7XFxuMTI1MzI6XFx0XFx0bWVtY3B5KHVuLVxcdTAwM2VzdW5fcGF0aCwgc3VuX3BhdGgsIHN1bl9wYXRoX19zeik7XFxuMTI1MzM6XFx0XFx0c2Ffa2Vybi1cXHUwMDNldWFkZHJsZW4gPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIHN1bl9wYXRoX19zejtcXG4xMjUzNDpcXHRcXG4xMjUzNTpcXHRcXHRyZXR1cm4gMDtcXG4xMjUzNjpcXHR9XFxuMTI1Mzc6XFx0XFxuMTI1Mzg6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG4xMjUzOTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxcbjEyNTQwOlxcdHtcXG4xMjU0MTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpXFxuMTI1NDI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XFxuMTI1NDM6XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcztcXG4xMjU0NDpcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XFxuMTI1NDU6XFx0XFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7XFxuMTI1NDY6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbjEyNTQ3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4xMjU0ODpcXHRcXHRfX3UxNiBtaW5fbXNzO1xcbjEyNTQ5OlxcdFxcdHUzMiB0c29mZiA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjIwLjk4NTAxODU3M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjQ2MDg5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRDUC9JUCBTdGFjayBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLiBNeSBleWVzIGltbWVkaWF0ZWx5IGp1bXAgdG8gbGluZSAxMjU0MTogYCNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylgLiBPa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2ssIGFuZCB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIGxpa2VseSBlbmFibGluZyBvciBkaXNhYmxpbmcgU1lOIGNvb2tpZXMgYmFzZWQgb24gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbiBoZXJlLCBzbyBJIGNhbiBjaGVjayBpZiBTWU4gY29va2llcyBhcmUgZW5hYmxlZCBvciBub3QuXG5cbk5vdywgbGV0J3MgZXhwYW5kIG15IHZpZXcuIEknbGwgY2hlY2sgd2hhdCB0aGUgY29kZSBkb2VzOiBsaW5lcyAxMjU5NS0xMjYyMCwgcHJvYmFibHkgY29udGFpbnMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGFzcGVjdC4gSSBjYW4gc2VlIHRoYXQgdGhpcyBzZWdtZW50IGlzIGNydWNpYWwgZm9yIGhhbmRsaW5nIFNZTiBmbG9vZCBwcm90ZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBTWU4gY29va2llcyBiZWluZyBlbmFibGVkLiBJdCBpcyBsaWtlbHkgY29uZmlndXJpbmcgaG93IHRoZSBrZXJuZWwgcmVzcG9uZHMgdG8gY29ubmVjdGlvbiBhdHRlbXB0cywgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIFNZTiBjb29raWUgbWVjaGFuaXNtIGl0c2VsZi4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgcGFyYW1ldGVycywgZGV0ZXJtaW5pbmcgdGhlIGZsb3csIHRoZSBjb25kaXRpb25zLCBhbmQgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uLCB0b28sIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcG9ydGlvbiBpcyBxdWl0ZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AvSVAgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzoyNC4yMzExMTE1MjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxODEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDA6XFx0XFx0XFx0aWYgKCFSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfdGltZXN0YW1wcykpXFxuMTI2MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI2MDI6XFx0XFxuMTI2MDM6XFx0XFx0XFx0dHNvZmYgPSBhdHRycy1cXHUwMDNlcmN2X3RzZWNyIC0gdGNwX25zX3RvX3RzKGF0dHJzLVxcdTAwM2V1c2VjX3RzX29rLCB0Y3BfY2xvY2tfbnMoKSk7XFxuMTI2MDQ6XFx0XFx0fVxcbjEyNjA1OlxcdFxcbjEyNjA2OlxcdFxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xcbjEyNjA3OlxcdFxcdGlmICghcmVxKVxcbjEyNjA4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEyNjA5OlxcdFxcbjEyNjEwOlxcdFxcdGlyZXEgPSBpbmV0X3JzayhyZXEpO1xcbjEyNjExOlxcdFxcdHRyZXEgPSB0Y3BfcnNrKHJlcSk7XFxuMTI2MTI6XFx0XFxuMTI2MTM6XFx0XFx0cmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcXG4xMjYxNDpcXHRcXHRyZXEtXFx1MDAzZXN5bmNvb2tpZSA9IDE7XFxuMTI2MTU6XFx0XFx0cmVxLVxcdTAwM2Vtc3MgPSBhdHRycy1cXHUwMDNlbXNzO1xcbjEyNjE2OlxcdFxcdHJlcS1cXHUwMDNldHNfcmVjZW50ID0gYXR0cnMtXFx1MDAzZXJjdl90c3ZhbDtcXG4xMjYxNzpcXHRcXG4xMjYxODpcXHRcXHRpcmVxLVxcdTAwM2VzbmRfd3NjYWxlID0gYXR0cnMtXFx1MDAzZXNuZF93c2NhbGU7XFxuMTI2MTk6XFx0XFx0aXJlcS1cXHUwMDNlcmN2X3dzY2FsZSA9IGF0dHJzLVxcdTAwM2VyY3Zfd3NjYWxlO1xcbjEyNjIwOlxcdFxcdGlyZXEtXFx1MDAzZXRzdGFtcF9va1xcdD0gISFhdHRycy1cXHUwMDNldHN0YW1wX29rO1xcbjEyNjIxOlxcdFxcdGlyZXEtXFx1MDAzZXNhY2tfb2sgPSAhIWF0dHJzLVxcdTAwM2VzYWNrX29rO1xcbjEyNjIyOlxcdFxcdGlyZXEtXFx1MDAzZXdzY2FsZV9vayA9ICEhYXR0cnMtXFx1MDAzZXdzY2FsZV9vaztcXG4xMjYyMzpcXHRcXHRpcmVxLVxcdTAwM2VlY25fb2sgPSAhIWF0dHJzLVxcdTAwM2VlY25fb2s7XFxuMTI2MjQ6XFx0XFxuMTI2MjU6XFx0XFx0dHJlcS1cXHUwMDNlcmVxX3VzZWNfdHMgPSAhIWF0dHJzLVxcdTAwM2V1c2VjX3RzX29rO1xcbjEyNjI2OlxcdFxcdHRyZXEtXFx1MDAzZXRzX29mZiA9IHRzb2ZmO1xcbjEyNjI3OlxcdFxcbjEyNjI4OlxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4xMjYyOTpcXHRcXHRza2ItXFx1MDAzZXNrID0gcmVxX3RvX3NrKHJlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjI0LjIzMzczNTUwNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzc2MjQwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uICoqSW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFNZTiBjb29raWVzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGV5J3JlICpub3QqIGVuYWJsZWQuKiogTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgc28gd2hhdCBoYXBwZW5zIGlmIGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzbid0IHNldD8gV2hhdCdzIHRoZSBjb2RlIHBhdGggdGhlbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWx0ZXJuYXRpdmUgYmVoYXZpb3IuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJ20gZ29pbmcgdG8ganVtcCB0byBsaW5lcyAxMjYzMC0xMjY0NS4gVGhhdCBzaG91bGQgYmUgdGhlIHJlZ2lvbiBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYWx0ZXJuYXRpdmUgaGFuZGxpbmcgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZSBtYWNybyBub3QgYmVpbmcgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjI3LjYwOTk4MDgwMloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjMwOlxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfcGZyZWU7XFxuMTI2MzE6XFx0XFxuMTI2MzI6XFx0XFx0cmV0dXJuIDA7XFxuMTI2MzM6XFx0I2Vsc2VcXG4xMjYzNDpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI2MzU6XFx0I2VuZGlmXFxuMTI2MzY6XFx0fVxcbjEyNjM3OlxcdFxcbjEyNjM4OlxcdF9fYnBmX2tmdW5jIGludCBicGZfc29ja19vcHNfZW5hYmxlX3R4X3RzdGFtcChzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNrb3BzLFxcbjEyNjM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBmbGFncylcXG4xMjY0MDpcXHR7XFxuMTI2NDE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xMjY0MjpcXHRcXG4xMjY0MzpcXHRcXHRpZiAoc2tvcHMtXFx1MDAzZW9wICE9IEJQRl9TT0NLX09QU19UU1RBTVBfU0VORE1TR19DQilcXG4xMjY0NDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI2NDU6XFx0XFxuMTI2NDY6XFx0XFx0aWYgKGZsYWdzKVxcbjEyNjQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNjQ4OlxcdFxcbjEyNjQ5OlxcdFxcdHNrYiA9IHNrb3BzLVxcdTAwM2Vza2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjI3LjYxMDUyNzcyM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjczNDQ0ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgYW5kIFNZTiBDb29raWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlLCBhbmQgSSd2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byB0cmFjayBoZXJlLiBGaXJzdCwgaWYgYENPTkZJR19TWU5fQ09PS0lFU2AgaXMgKm5vdCogZW5hYmxlZCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBmbGF0IG91dCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoYXQncyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3Igb2YgYSBkZXBlbmRlbmN5LiBJIG5vdGljZWQgdGhpcyBvbiBsaW5lIDEyNTQxLCB0aGUgYCNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylgIGNoZWNrIGlzIGxpdGVyYWxseSAqcmlnaHQgYWZ0ZXIqIHRoZSBmdW5jdGlvbidzIGVudHJ5IHBvaW50ISBNZWFuaW5nIHRoYXQgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCB3aXRoaW4gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBpcyBvbmx5IGdvaW5nIHRvIGJlIGhpdCBpZiBTWU4gY29va2llcyAqYXJlKiBlbmFibGVkLlxuXG5Ob3csIEknbSBhbHNvIHNlZWluZyByZWZlcmVuY2VzIHRvIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0JQRmAsIGFuZCBgTkVUX0NMU19CUEZgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyBCUEYga2Z1bmNzIGFyZSBtYWRlIGF2YWlsYWJsZSBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gV2hhdCBlbmFibGVzICp0aGF0KiBmdW5jdGlvbmFsaXR5PyBOYXR1cmFsbHksIGl0J3MgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgcmVmcmVzaCBteSBtZW1vcnkgYWJvdXQgYENPTkZJR19TWU5fQ09PS0lFU2AgaW4gdGhlIEtjb25maWcgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4OTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzozMC44ODM5NzYxNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5Njc0NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNZTl9DT09LSUVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTI2Ny1cXG5uZXQvaXB2NC9LY29uZmlnOjI2ODpjb25maWcgU1lOX0NPT0tJRVNcXG5uZXQvaXB2NC9LY29uZmlnLTI2OS1cXHRib29sIFxcXCJJUDogVENQIHN5bmNvb2tpZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzozMC45Nzk5NTMwOTFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU4MTkxMDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgSVB2NCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8ganVtcCBvdmVyIGFyb3VuZCBsaW5lIDI2OC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIEknbSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVnYXJkaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIHN3aXRjaGVzLiBUaGlzIGlzIHdoZXJlIEkgb2Z0ZW4gZmluZCB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgSVB2NC1yZWxhdGVkIGZlYXR1cmVzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLCBvciBpZiBJIGFtIGp1c3QgdHJ5aW5nIHRvIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuIFRpbWUgdG8gZ2V0IGNvZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzozMy41NjE4NjcxNTZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjU6XFx0XFx0ICBnYXRlZC01KS4gVGhpcyByb3V0aW5nIHByb3RvY29sIGlzIG5vdCB1c2VkIHdpZGVseSwgc28gc2F5IE4gdW5sZXNzXFxuIDI2NjpcXHRcXHQgIHlvdSB3YW50IHRvIHBsYXkgd2l0aCBpdC5cXG4gMjY3OlxcdFxcbiAyNjg6XFx0Y29uZmlnIFNZTl9DT09LSUVTXFxuIDI2OTpcXHRcXHRib29sIFxcXCJJUDogVENQIHN5bmNvb2tpZSBzdXBwb3J0XFxcIlxcbiAyNzA6XFx0XFx0aGVscFxcbiAyNzE6XFx0XFx0ICBOb3JtYWwgVENQL0lQIG5ldHdvcmtpbmcgaXMgb3BlbiB0byBhbiBhdHRhY2sga25vd24gYXMgXFxcIlNZTlxcbiAyNzI6XFx0XFx0ICBmbG9vZGluZ1xcXCIuIFRoaXMgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrIHByZXZlbnRzIGxlZ2l0aW1hdGUgcmVtb3RlXFxuIDI3MzpcXHRcXHQgIHVzZXJzIGZyb20gYmVpbmcgYWJsZSB0byBjb25uZWN0IHRvIHlvdXIgY29tcHV0ZXIgZHVyaW5nIGFuIG9uZ29pbmdcXG4gMjc0OlxcdFxcdCAgYXR0YWNrIGFuZCByZXF1aXJlcyB2ZXJ5IGxpdHRsZSB3b3JrIGZyb20gdGhlIGF0dGFja2VyLCB3aG8gY2FuXFxuIDI3NTpcXHRcXHQgIG9wZXJhdGUgZnJvbSBhbnl3aGVyZSBvbiB0aGUgSW50ZXJuZXQuXFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdCAgU1lOIGNvb2tpZXMgcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgdGhpcyB0eXBlIG9mIGF0dGFjay4gSWYgeW91XFxuIDI3ODpcXHRcXHQgIHNheSBZIGhlcmUsIHRoZSBUQ1AvSVAgc3RhY2sgd2lsbCB1c2UgYSBjcnlwdG9ncmFwaGljIGNoYWxsZW5nZVxcbiAyNzk6XFx0XFx0ICBwcm90b2NvbCBrbm93biBhcyBcXFwiU1lOIGNvb2tpZXNcXFwiIHRvIGVuYWJsZSBsZWdpdGltYXRlIHVzZXJzIHRvXFxuIDI4MDpcXHRcXHQgIGNvbnRpbnVlIHRvIGNvbm5lY3QsIGV2ZW4gd2hlbiB5b3VyIG1hY2hpbmUgaXMgdW5kZXIgYXR0YWNrLiBUaGVyZVxcbiAyODE6XFx0XFx0ICBpcyBubyBuZWVkIGZvciB0aGUgbGVnaXRpbWF0ZSB1c2VycyB0byBjaGFuZ2UgdGhlaXIgVENQL0lQIHNvZnR3YXJlO1xcbiAyODI6XFx0XFx0ICBTWU4gY29va2llcyB3b3JrIHRyYW5zcGFyZW50bHkgdG8gdGhlbS4gRm9yIHRlY2huaWNhbCBpbmZvcm1hdGlvblxcbiAyODM6XFx0XFx0ICBhYm91dCBTWU4gY29va2llcywgY2hlY2sgb3V0IFxcdTAwM2NodHRwczovL2NyLnlwLnRvL3N5bmNvb2tpZXMuaHRtbFxcdTAwM2UuXFxuIDI4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTM6MzMuNTYxOTUzMTg2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMzkwMzM4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBJIG5lZWQuIGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzIGRlZmluaXRlbHkgaW4gYG5ldC9pcHY0L0tjb25maWdgLCBhbmQgaXQgZGVwZW5kcyBvbiBgQ09ORklHX0lORVRgLCBhcyBleHBlY3RlZC4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgYENPTkZJR19JUFY2YCBmb3IgSVB2NiBwYWNrZXQgYW5kIHNvY2tldCBzdXBwb3J0LiBUaGUgY29kZSBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIHBhY2tldCdzIHByb3RvY29sIGRldGVybWluZXMgdGhlIGFkZHJlc3MgZmFtaWx5LCBhbmQgdGhlcmUncyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSBhbiBgQUZfSU5FVGAgc29ja2V0IHJlY2VpdmluZyBhbiBJUHY2IHBhY2tldCwgcmV0dXJuaW5nIGAtRUFGTk9TVVBQT1JUYC4gU28sIHRoYXQgbWVhbnMgSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX05FVGAsIGBDT05GSUdfSU5FVGAsIGFuZCBgQ09ORklHX0lQVjZgLlxuXG5Ob3csIG1vdmluZyBiZXlvbmQgYmFzaWMgbmV0d29yayBjb25maWd1cmF0aW9uLCBhbmQgaW50byBUQyBCUEYsIEknbSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX0NMU19BQ1RgLCBhbmQgYENPTkZJR19TWU5fQ09PS0lFU2AgYXMgdGhlc2Ugc2VlbSBpbXBvcnRhbnQuIFdhaXQsIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgSSdtIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfQUNUX0JQRmAgb3IgYENPTkZJR19ORVRfQ0xTX0JQRmAuIEknbSBnb2luZyB0byBuZWVkIHRoZSBCUEYtYmFzZWQgY2xhc3NpZmllciBhbmQgYWN0aW9uLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgdG8gbG9hZCBhbmQgcnVuIFRDIEJQRiBmb3IgYm90aCB0aGUgY2xhc3NpZmllciBhbmQgYWN0aW9uLiBMb29raW5nIGZ1cnRoZXIsIGl0IHNlZW1zIGBDT05GSUdfTkVUX0NMU19CUEZgIGlzIHRoZSBCUEYtYmFzZWQgY2xhc3NpZmllciAoYGNsc19icGZgKSwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIFRDIEJQRiAoYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCkuIEFuZCwgYENPTkZJR19ORVRfQUNUX0JQRmAgaXMgdGhlIEJQRi1iYXNlZCBhY3Rpb24gKGBhY3RfYnBmYCksIGZvciBgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1RgLiBSaWdodCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBORVRfQ0xTX0JQRmAgaW4gYG5ldC9zY2hlZC9LY29uZmlnYCB0byBiZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjEzLjk1MjI5NTc4MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNjMxMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTU1MD1jb25maWcgTkVUX0NMU19DR1JPVVBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU2MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1NjI6Y29uZmlnIE5FVF9DTFNfQlBGXFxubmV0L3NjaGVkL0tjb25maWctNTYzLVxcdHRyaXN0YXRlIFxcXCJCUEYtYmFzZWQgY2xhc3NpZmllclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MTQuNTY0OTMyOTY5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MzQ2NzYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZSBmb3IgTmV0d29yayBTY2hlZHVsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBpcyBjb25maWd1cmVkLiBMZXQncyB6ZXJvIGluIG9uIGxpbmVzIDU2MCB0aHJvdWdoIDU4MCBvZiBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBsaWtlbHkgdG8gYmUuIEkgd2FudCB0byBzZWUgd2hhdCBvcHRpb25zIGFyZSBiZWluZyBwcmVzZW50ZWQsIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgcXVldWVpbmcgZGlzY2lwbGluZXMsIHRyYWZmaWMgc2hhcGluZywgYW5kIHBlcmhhcHMgc29tZSBwcmlvcml0aXphdGlvbiBzZXR0aW5ncy4gVGhlIHJlYWwgZ29hbCBpcyB0byByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgb3JnYW5pemVkIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgbGF0ZXIgY2hhbmdlcywgZXNwZWNpYWxseSBpZiBJIHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IHNjaGVkdWxlciBvciB0d2VhayBhbiBleGlzdGluZyBvbmUuIEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdHlwaWNhbCBmb3IgS2NvbmZpZyBmaWxlcywgYnV0IGV2ZW4gaWYgaXQgaXNuJ3QsIEkgc2hvdWxkIGJlIGFibGUgdG8gcGFyc2UgdGhlIGludGVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjE4LjI5OTYxNDE0OFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTYwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19jZ3JvdXAuXFxuIDU2MTpcXHRcXG4gNTYyOlxcdGNvbmZpZyBORVRfQ0xTX0JQRlxcbiA1NjM6XFx0XFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcbiA1NjQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTY1OlxcdFxcdGhlbHBcXG4gNTY2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxcbiA1Njc6XFx0XFx0ICBwcm9ncmFtbWFibGUgQlBGIChKSVQnZWQpIGZpbHRlcnMgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gZW1hdGNoZXMuXFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiA1NzA6XFx0XFx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cXG4gNTcxOlxcdFxcbiA1NzI6XFx0Y29uZmlnIE5FVF9DTFNfRkxPV0VSXFxuIDU3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiRmxvd2VyIGNsYXNzaWZpZXJcXFwiXFxuIDU3NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1NzU6XFx0XFx0aGVscFxcbiA1NzY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXFxuIDU3NzpcXHRcXHQgIGEgY29uZmlndXJhYmxlIGNvbWJpbmF0aW9uIG9mIHBhY2tldCBrZXlzIGFuZCBtYXNrcy5cXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuIDU4MDpcXHRcXHQgIGJlIGNhbGxlZCBjbHNfZmxvd2VyLlxcbiA1ODE6XFx0XFxuIDU4MjpcXHRjb25maWcgTkVUX0NMU19NQVRDSEFMTFxcbiA1ODM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hdGNoLWFsbCBjbGFzc2lmaWVyXFxcIlxcbiA1ODQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MTguMjk5NzY0ODU4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MzgzMDI0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGVCUEYgQ2xhc3NpZmllciBhbmQgQWN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgY2xzX2JwZmAgYW5kIGBhY3RfYnBmYCBhcmUgZW5hYmxlZCBhbmQgaXQgc2VlbXMgbGlrZSBgTkVUX0NMU19CUEZgIGFuZCBgTkVUX0FDVF9CUEZgIGFyZSB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcnVubmluZyB0aGVtLiBCdXQgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGJyb2FkZXIgcGljdHVyZSwgYW5kIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gaW52ZXN0aWdhdGUgaWYgYENPTkZJR19ORVRfU0NIRURgIGhhcyBzb21lIHJlbGV2YW5jZSBoZXJlLCBvciBpZiB0aGVyZSdzIGFuIGluZGlyZWN0IGRlcGVuZGVuY3kgaW4gcGxheS4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9DTFNfQlBGYCwgaW4gdHVybiwgZGVwZW5kIG9uIGBORVRfU0NIRURgLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBvcHRpb25zIHdpbGwgY2xhcmlmeSBob3cgdGhlIGVCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2ODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjIwLjgzODA3MTUxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgzNjUzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MjAuOTU2NDQxODc0WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTM5MzgxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBTb2NrZXQgQXNzaWdubWVudCBhbmQgUHJvdG9jb2wgVHJhbnNsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLCBhbmQgbW9kaWZpZXMgYSBmZXcgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCwgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIHRvIGNoZWNrIGZvciBhZGRyZXNzIGZhbWlseSBjb21wYXRpYmlsaXR5IHdoZW4gYXNzaWduaW5nIG9yIHJlLWFzc2lnbmluZyBzb2NrZXRzIHRvIHNrX2J1ZmZzLiBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZyBsb2dpYyBoZXJlLCBzbyBpdCdzIGltcG9ydGFudCB0byBnZXQgaXQgcmlnaHQuXG5cblNwZWNpZmljYWxseSwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCB2ZXJpZmllcyBpZiBhIHNvY2tldCdzIGFkZHJlc3MgZmFtaWx5IChlLmcuLCBJUHY0IG9yIElQdjYpIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdG9jb2wgb2YgYW4gaW5jb21pbmcgcGFja2V0LiBJZiB0aGUgZmFtaWx5IGNoZWNrIGZhaWxzLCBgYnBmX3NrX2Fzc2lnbmAgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2Agbm93IHJldHVybiBgLUVBRk5PU1VQUE9SVGAuIFRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBjYXNlIHdpdGggYGJwZl9za2JfY2hhbmdlX3Byb3RvYCBpcyBhbHNvIHNpZ25pZmljYW50OyBpdCBpbnZhbGlkYXRlcyBhbnkgcHJlLWZldGNoZWQgc29ja2V0IGFzc2lnbm1lbnQgaWYgdGhlIHRyYW5zbGF0aW9uIHJlc3VsdHMgaW4gYW4gaW5jb21wYXRpYmxlIGFkZHJlc3MgZmFtaWx5IGFuZCBvcnBoYW5zIHRoZSBza2IsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW91ci5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlcyBtb2RpZnkgQlBGIG5ldHdvcmtpbmcgaGVscGVycywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIGV4aXN0aW5nIEJQRiBwcm9ncmFtcywgSSdkIHNheSBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIHRvIGVuc3VyZSB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBtaW5kZnVsIG9mIGR1YWwtc3RhY2sgSVB2NC1tYXBwZWQgSVB2NiBzb2NrZXRzIGFuZCBTWU4tcmVjZWl2ZWQgcmVxdWVzdCBzb2NrZXRzIHRvIG1ha2Ugc3VyZSB0aGUgZmFtaWx5IGNoZWNrcyBhcmUgd29ya2luZyBhcyB0aGV5IHNob3VsZC4gQWxzbywgdGVzdGluZyB3aXRoIHByb3RvY29sIHRyYW5zbGF0aW9ucyB0by9mcm9tIElQdjQvSVB2NiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIG9mIHByZWZldGNoZWQgc29ja2V0IGludmFsaWRhdGlvbi5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZTogYEJQRl9TWVNDQUxMYCwgYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JQRmAsIGBTWU5fQ09PS0lFU2AsIGBJTkVUYCwgYW5kIGBJUFY2YC4gVGhpcyBzaG91bGQgY292ZXIgdGhlIGJhc2UgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBwYXRjaC4gTm8gb3RoZXIgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyBzZWVtcyByZWxldmFudCBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayB0aGlzIGNvdmVycyBpdC4gTGV0J3MgZ2V0IHRvIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDM5LCJPdXRwdXRUb2tlbnMiOjIzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MzIuNDk1ODI5MTcyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTY1NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIlNZTl9DT09LSUVTXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tcIixcbiAgICBcImJwZl9za19hc3NpZ25cIixcbiAgICBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gICAgXCJicGZfc2tfYXNzaWduX3RjcF9yZXFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIlNZTl9DT09LSUVTXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tcIixcbiAgICBcImJwZl9za19hc3NpZ25cIixcbiAgICBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gICAgXCJicGZfc2tfYXNzaWduX3RjcF9yZXFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MzIuNjQ0MDA2Mzg0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU2MjM5MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjMyLjY0NDg3MDMzNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNTYxNTIyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSBpbmNvbXBhdGlibGUuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cXHUwMDNlcHJvdG9jb2xgLCBgc2stXFx1MDAzZXNrX2ZhbWlseWAsIGBzay1cXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXFxuMi4gSW5mby1sZWFrczogTm8gZGF0YSBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXFxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWM5MDU5MDcyNmIwNjNkMDAyNGU5MmM1ZTg3NWRlMWMwMDgxZGZkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi4wZGU3OTY3MDc3YTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yNjU5LDYgKzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqIFx0XHRjaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS5cbiAgKiBcdFx0VGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLlxuICAqXG4rICpcdFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXG4rICpcdFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXG4rICpcdFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXG4rICpcbiAgKiBcdFx0QWxsIHZhbHVlcyBmb3IgKmZsYWdzKiBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZSwgYW5kIG11c3RcbiAgKiBcdFx0YmUgbGVmdCBhdCB6ZXJvLlxuICAqXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxuICAqXHRcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cbiAgKlxuKyAqXHRcdCoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGhcbisgKlx0XHR0aGUgbmV0d29yayBsYXllciBvZiB0aGUgcGFja2V0LCBmb3IgZXhhbXBsZSBhbiAqKkFGX0lORVQqKlxuKyAqXHRcdHNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuXG4rICpcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxuICAqXHREZXNjcmlwdGlvblxuICAqXHRcdEhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uNzlhMGU0ODRkOWRkNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTM0OTEsNiArMzQ5MSwzMiBAQCBzdGF0aWMgaW50IGJwZl9za2JfcHJvdG9feGxhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdG9fcHJvdG8pXG4gXHRyZXR1cm4gLUVOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4rXG4rXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdGZhbWlseSA9IEFGX0lORVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0ZmFtaWx5ID0gQUZfSU5FVDY7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHQvKiBSZXF1ZXN0cyBpbmhlcml0IHRoZSBsaXN0ZW5lciBmYW1pbHksIGJ1dCBoYXZlIGZhbWlseS1zcGVjaWZpYyBvcHMuICovXG4rXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbitcdFx0cmV0dXJuIGluZXRfcmVxc2soc2spLVx1MDAzZXJza19vcHMtXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcbitcbitcdHJldHVybiBzay1cdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XG4rXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuK1x0XHRzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4rXHRcdCFpcHY2X29ubHlfc29jayhzaykpO1xuK31cbitcbiBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4gXHQgICB1NjQsIGZsYWdzKVxuIHtcbkBAIC0zNTIxLDYgKzM1NDcsMTEgQEAgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4rXHRpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxuK1x0XHRza2Jfb3JwaGFuKHNrYik7XG4rXG4gXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiBcbkBAIC03OTg5LDYgKzgwMjAsOCBAQCBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4gXHRpZiAoc2tfdW5oYXNoZWQoc2spKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuK1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMjUyNiw2ICsxMjU1OSw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbiBcbitcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG4rXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuK1xuIFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRvcHMgPSBcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcztcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxuICAqIFx0XHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXG4gICpcbisgKlx0XHRPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3NcbisgKlx0XHRmYW1pbHkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG5ldyBwcm90b2NvbC4gQXNzaWduIGFcbisgKlx0XHRjb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC5cbisgKlxuICAqIFx0XHRBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdFxuICAqIFx0XHRiZSBsZWZ0IGF0IHplcm8uXG4gICpcbkBAIC00NTY4LDYgKzQ1NzIsMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdCoqLUVPUE5PVFNVUFAqKiBpZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIGZvciBleGFtcGxlXG4gICpcdFx0YSBjYWxsIGZyb20gb3V0c2lkZSBvZiBUQyBpbmdyZXNzLlxuICAqXG4rICpcdFx0KiotRUFGTk9TVVBQT1JUKiogaWYgdGhlIHNvY2tldCBmYW1pbHkgaXMgbm90IGNvbXBhdGlibGUgd2l0aFxuKyAqXHRcdHRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqXG4rICpcdFx0c29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC5cbisgKlxuICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gICpcdERlc2NyaXB0aW9uXG4gICpcdFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjMyLjY0NDg3MTU1NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTQ2NTQ2Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEV2YWx1YXRpb24gb2YgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKm1pZ2h0KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIHN1cmUsIHRob3VnaC5cblxuRmlyc3QsIHRoZSBjb21taXQgdGl0bGUgc2F5cyBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiLCBzbyBpdCdzIHByb2JhYmx5IGFscmVhZHkgb24gdGhlIHJhZGFyIGZvciBmdXp6aW5nLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGNvbXByZWhlbnNpdmUuIEl0IG1vZGlmaWVzIGBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBhbmQgYHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaGAuIFRoZSBjaGFuZ2VzIGluIHRoZSBoZWFkZXIgZmlsZXMgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBpcyB3aGVyZSBteSBhdHRlbnRpb24gd2lsbCBmb2N1cy5cblxuSW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgSSdtIHNlZWluZyBhIG5ldyBmdW5jdGlvbiwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC4gSXQgYXBwZWFycyB0byBiZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmFtaWx5IG9mIHRoZSBzb2NrZXQgbWF0Y2hlcyB0aGUgZmFtaWx5IG9mIHRoZSBwYWNrZXQgYmFzZWQgb24gdGhlIHByb3RvY29sLiBJbnRlcmVzdGluZy4gV2UncmUgZGVhbGluZyB3aXRoIGBBRl9JTkVUYCBhbmQgYEFGX0lORVQ2YCBjaGVja3MsIHNvIHRoYXQncyBhIGtleSBhcmVhLiBUaGUgZnVuY3Rpb24gY2hlY2tzIGZvciBgVENQX05FV19TWU5fUkVDVmAsIHdoaWNoIGlzIHdvcnRoIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaW4gdGhpcyBjYXNlLlxuXG5DcnVjaWFsbHksIHRoaXMgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCAuLi4pYCB3aGVyZSBhbiBvcnBoYW4gaXMgY2FsbGVkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBUaGVuLCB0aGUgc2FtZSBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIC4uLilgIGFuZCBgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKC4uLilgIHdoZXJlIGBFQUZOT1NVUFBPUlRgIGlzIHJldHVybmVkLiBUaGlzIGltcGxpZXMgc29tZSBmb3JtIG9mIHNvY2tldCBmYW1pbHkgdmFsaWRhdGlvbiwgYW5kIGEgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciB0aGVzZSBuZXcgY2hlY2tzIG9yIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgc2tiX29ycGhhbmAgaGF2ZSBpbnRyb2R1Y2VkIGFueSBvcHBvcnR1bml0aWVzIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBUaGUgY29uZGl0aW9uYWwgbmF0dXJlIG9mIHRob3NlIGNhbGxzIG1lYW5zIHRoYXQgc29tZSBwYXRocyBtaWdodCBub3QgYmUgd2VsbC10ZXN0ZWQsIGFuZCB0aGF0J3Mgd2hlcmUgYnVncyB0ZW5kIHRvIGhpZGUuXG5cblRvIGZpbmFsaXplIG15IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcz8gV2hhdCdzIHRoZSBjYWxsIGdyYXBoPyBJIG5lZWQgdG8ga25vdyB0aGUgcG9zc2libGUgY29kZXBhdGhzIHRoYXQgaW52b2x2ZSB0aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIHZpZXcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgbWF5IGJlIGEgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBpbnZvbHZlZCBpbiB0aGUgQlBGIGNvbnRleHQuIExldCBtZSBwdWxsIHVwIHNvbWUgY29kZSBvciB1c2UgYSBncmVwcGVyIHRvIGxvb2sgZm9yIHVzYWdlIHBhdHRlcm5zLCBvciBjaGVjayBmb3Igc3BlY2lmaWMgcmVhZC1maWxlIGNhbGxzLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHRydWx5IHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjM5LjU5MTQyMTQyMVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4Nzg0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI1MTc9X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2FkZHJfc2V0X3N1bl9wYXRoKHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKnNhX2tlcm4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzNy1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjUzODpfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg2ND1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MzkuNjY3MzA2OTA0WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxOTc5NjgwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBpdHMgaW1wbGVtZW50YXRpb24gYXJvdW5kIGxpbmUgMTI1Mzggd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4sIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBCUEYtYmFzZWQgbmV0d29yayBmaWx0ZXJpbmcuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBhIHN1YnRsZSBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgYSBwcm9ibGVtYXRpYyBpbnRlcmFjdGlvbiwgbWlnaHQgYmUgaGlkaW5nIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGhlcmUsIGFuZCBob3BlZnVsbHksIEknbGwgdW5jb3ZlciBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBpcyAqcmVhbGx5KiBkb2luZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDEuODY1Mjc4MzJaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjUzNTpcXHRcXHRyZXR1cm4gMDtcXG4xMjUzNjpcXHR9XFxuMTI1Mzc6XFx0XFxuMTI1Mzg6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG4xMjUzOTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxcbjEyNTQwOlxcdHtcXG4xMjU0MTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpXFxuMTI1NDI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XFxuMTI1NDM6XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcztcXG4xMjU0NDpcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XFxuMTI1NDU6XFx0XFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7XFxuMTI1NDY6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbjEyNTQ3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4xMjU0ODpcXHRcXHRfX3UxNiBtaW5fbXNzO1xcbjEyNTQ5OlxcdFxcdHUzMiB0c29mZiA9IDA7XFxuMTI1NTA6XFx0XFxuMTI1NTE6XFx0XFx0aWYgKGF0dHJzX19zeiAhPSBzaXplb2YoKmF0dHJzKSB8fFxcbjEyNTUyOlxcdFxcdCAgICBhdHRycy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgYXR0cnMtXFx1MDAzZXJlc2VydmVkWzFdIHx8IGF0dHJzLVxcdTAwM2VyZXNlcnZlZFsyXSlcXG4xMjU1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU1NDpcXHRcXG4xMjU1NTpcXHRcXHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuMTI1NTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI1NTc6XFx0XFxuMTI1NTg6XFx0XFx0bmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMTI1NTk6XFx0XFx0aWYgKG5ldCAhPSBzb2NrX25ldChzaykpXFxuMTI1NjA6XFx0XFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG4xMjU2MTpcXHRcXG4xMjU2MjpcXHRcXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxcbjEyNTYzOlxcdFxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbjEyNTY0OlxcdFxcbjEyNTY1OlxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEyNTY2OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbjEyNTY3OlxcdFxcdFxcdG9wcyA9IFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcztcXG4xMjU2ODpcXHRcXHRcXHRtaW5fbXNzID0gNTM2O1xcbjEyNTY5OlxcdFxcdFxcdGJyZWFrO1xcbjEyNTcwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbjEyNTcxOlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuMTI1NzI6XFx0XFx0XFx0b3BzID0gXFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcztcXG4xMjU3MzpcXHRcXHRcXHRtaW5fbXNzID0gSVBWNl9NSU5fTVRVIC0gNjA7XFxuMTI1NzQ6XFx0XFx0XFx0YnJlYWs7XFxuMTI1NzU6XFx0I2VuZGlmXFxuMTI1NzY6XFx0XFx0ZGVmYXVsdDpcXG4xMjU3NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU3ODpcXHRcXHR9XFxuMTI1Nzk6XFx0XFxuMTI1ODA6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfU1RSRUFNIHx8IHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XFxuMTI1ODE6XFx0XFx0ICAgIHNrX2lzX21wdGNwKHNrKSlcXG4xMjU4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU4MzpcXHRcXG4xMjU4NDpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZW1zcyBcXHUwMDNjIG1pbl9tc3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjQxLjg2NTkxNzU3MVoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDk1NzcxNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgYnBmX3NrX2Fzc2lnbmAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gcmV2aXNpdCB0aGUgYGJwZl9za19hc3NpZ25gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzk4OSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJJ20gZ29pbmcgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGxvZ2ljIHRoZXJlLCBhcyBpdCdzIGNyaXRpY2FsIGZvciBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggc29ja2V0IGFzc2lnbm1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzcGVjaWZpYyBhc3BlY3RzIHdlJ3JlIHRyb3VibGVzaG9vdGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy4gSSdsbCBmb2N1cyBvbiBob3cgaXQgbWFuYWdlcyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDMuOTYxNjkxNDA5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0Mzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTgwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5ODE6XFx0XFxuNzk4MjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNilcXG43OTgzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5ODQ6XFx0XFxuNzk4NTpcXHRcXHRcXHRtc3MgPSB0Y3BfdjZfZ2V0X3N5bmNvb2tpZShzaywgaXBoLCB0aCwgXFx1MDAyNmNvb2tpZSk7XFxuNzk4NjpcXHRcXHRcXHRicmVhaztcXG43OTg3OlxcdCNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xcbjc5ODg6XFx0XFxuNzk4OTpcXHRcXHRkZWZhdWx0Olxcbjc5OTA6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuNzk5MTpcXHRcXHR9XFxuNzk5MjpcXHRcXHRpZiAobXNzID09IDApXFxuNzk5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43OTk0OlxcdFxcbjc5OTU6XFx0XFx0cmV0dXJuIGNvb2tpZSB8ICgodTY0KW1zcyBcXHUwMDNjXFx1MDAzYyAzMik7XFxuNzk5NjpcXHQjZWxzZVxcbjc5OTc6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjc5OTg6XFx0I2VuZGlmIC8qIENPTkZJR19TWU5fQ09PS0lFUyAqL1xcbjc5OTk6XFx0fVxcbjgwMDA6XFx0XFxuODAwMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90byA9IHtcXG44MDAyOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfdGNwX2dlbl9zeW5jb29raWUsXFxuODAwMzpcXHRcXHQuZ3BsX29ubHlcXHQ9IHRydWUsIC8qIF9fY29va2llX3YqX2luaXRfc2VxdWVuY2UoKSBpcyBHUEwgKi9cXG44MDA0OlxcdFxcdC5wa3RfYWNjZXNzXFx0PSB0cnVlLFxcbjgwMDU6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG44MDA2OlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxcbjgwMDc6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjgwMDg6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbjgwMDk6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjgwMTA6XFx0XFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbjgwMTE6XFx0fTtcXG44MDEyOlxcdFxcbjgwMTM6XFx0QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxcbjgwMTQ6XFx0e1xcbjgwMTU6XFx0XFx0aWYgKCFzayB8fCBmbGFncyAhPSAwKVxcbjgwMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODAxNzpcXHRcXHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuODAxODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuODAxOTpcXHRcXHRpZiAodW5saWtlbHkoZGV2X25ldChza2ItXFx1MDAzZWRldikgIT0gc29ja19uZXQoc2spKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDMuOTYyMzM3NDRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyNjQzNjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYnBmX3NrYl9jaGFuZ2VfcHJvdG8gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHBhY2tldCBtYW5pcHVsYXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiwgYW5kIGZyb20gdGhlIHNvdXJjZSwgaXQgbG9va3MgbGlrZSBsaW5lIDM1MjEgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHByb3RvY29sIGNoYW5nZSBpcyBoYW5kbGVkIGF0IHRoZSBuZXR3b3JrIGxldmVsLiBXaGF0J3MgdGhlIGludGVncml0eSBvZiB0aGUgbGF5ZXJzIHRoYXQgYXJlIGFmZmVjdGVkPyBXaGF0IGtpbmQgb2YgY2hlY2tzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgc2FmZSBtYW5pcHVsYXRpb24gb2YgdGhlIHBhY2tldCBoZWFkZXI/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBtYW5hZ2luZyB0aGluZ3MgYXQgYSBncmFudWxhciBsZXZlbCwgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCBzb3J0IG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3MgYXJlIGluIHRoZSBzb3VyY2UgZmlsZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NzAzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDYuMjg4Nzc2MzU5WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4ODIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTEwOlxcdFxcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cXG4zNTExOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcXG4zNTEyOlxcdFxcdFxcdHJldHVybiBpbmV0X3JlcXNrKHNrKS1cXHUwMDNlcnNrX29wcy1cXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcXG4zNTEzOlxcdFxcbjM1MTQ6XFx0XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XFxuMzUxNTpcXHRcXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMzUxNjpcXHRcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuMzUxNzpcXHRcXHRcXHQhaXB2Nl9vbmx5X3NvY2soc2spKTtcXG4zNTE4OlxcdH1cXG4zNTE5OlxcdFxcbjM1MjA6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxcbjM1MjE6XFx0XFx0ICAgdTY0LCBmbGFncylcXG4zNTIyOlxcdHtcXG4zNTIzOlxcdFxcdGludCByZXQ7XFxuMzUyNDpcXHRcXG4zNTI1OlxcdFxcdGlmICh1bmxpa2VseShmbGFncykpXFxuMzUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNTI3OlxcdFxcbjM1Mjg6XFx0XFx0LyogR2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBoZWxwZXIgZG9lcyB0aGUgYmFzaWMgZ3JvdW5kd29ya1xcbjM1Mjk6XFx0XFx0ICogbmVlZGVkIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wsIGFuZCBlQlBGIHByb2dyYW0gZmlsbHMgdGhlXFxuMzUzMDpcXHRcXHQgKiByZXN0IHRocm91Z2ggYnBmX3NrYl9zdG9yZV9ieXRlcygpLCBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTMxOlxcdFxcdCAqIGFuZCBvdGhlciBoZWxwZXJzLCByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3IGJ1ZmZlciBoZXJlLlxcbjM1MzI6XFx0XFx0ICpcXG4zNTMzOlxcdFxcdCAqIFRoZSByYXRpb25hbGUgaXMgdG8ga2VlcCB0aGlzIG1pbmltYWwgYW5kIHdpdGhvdXQgYSBuZWVkIHRvXFxuMzUzNDpcXHRcXHQgKiBkZWFsIHdpdGggcmF3IHBhY2tldCBkYXRhLiBGLmUuIGV2ZW4gaWYgd2Ugd291bGQgcGFzcyBidWZmZXJzXFxuMzUzNTpcXHRcXHQgKiBoZXJlLCB0aGUgcHJvZ3JhbSBzdGlsbCBuZWVkcyB0byBjYWxsIHRoZSBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTM2OlxcdFxcdCAqIGhlbHBlcnMgYW55d2F5LiBQbHVzLCB0aGlzIHdheSB3ZSBrZWVwIGFsc28gc2VwYXJhdGlvbiBvZlxcbjM1Mzc6XFx0XFx0ICogY29uY2VybnMsIHNpbmNlIGYuZS4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5IHRha2VcXG4zNTM4OlxcdFxcdCAqIGNhcmUgb2Ygc3RvcmVzLlxcbjM1Mzk6XFx0XFx0ICpcXG4zNTQwOlxcdFxcdCAqIEN1cnJlbnRseSwgYWRkaXRpb25hbCBvcHRpb25zIGFuZCBleHRlbnNpb24gaGVhZGVyIHNwYWNlIGFyZVxcbjM1NDE6XFx0XFx0ICogbm90IHN1cHBvcnRlZCwgYnV0IGZsYWdzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHNvIHdlIGNhbiBhZGFwdFxcbjM1NDI6XFx0XFx0ICogdGhhdC4gRm9yIG9mZmxvYWRzLCB3ZSBtYXJrIHBhY2tldCBhcyBkb2RneSwgc28gdGhhdCBoZWFkZXJzXFxuMzU0MzpcXHRcXHQgKiBuZWVkIHRvIGJlIHZlcmlmaWVkIGZpcnN0LlxcbjM1NDQ6XFx0XFx0ICovXFxuMzU0NTpcXHRcXHRyZXQgPSBicGZfc2tiX3Byb3RvX3hsYXQoc2tiLCBwcm90byk7XFxuMzU0NjpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMzU0NzpcXHRcXHRpZiAocmV0KVxcbjM1NDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNTQ5OlxcdFxcbjM1NTA6XFx0XFx0LyogUHJvdG9jb2wgdHJhbnNsYXRpb24gY2FuIGludmFsaWRhdGUgYW4gZWFybGllciBzb2NrZXQgYXNzaWdubWVudC4gKi9cXG4zNTUxOlxcdFxcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxuMzU1MjpcXHRcXHQgICAgIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2tiLVxcdTAwM2VzaykpXFxuMzU1MzpcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuMzU1NDpcXHRcXG4zNTU1OlxcdFxcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXFxuMzU1NjpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4zNTU3OlxcdFxcbjM1NTg6XFx0XFx0cmV0dXJuIDA7XFxuMzU1OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjQ2LjI4OTc3Nzg4WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk5MTY1Nzg1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTmVlZHNLTVNBTj1mYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIHJ1bi4gSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBzb2NrZXQgZmFtaWx5IChgc2stXHUwMDNlc2tfZmFtaWx5YCwgZXRjLikgYW5kIHRoZSBwYWNrZXQgcHJvdG9jb2wgKGBza2ItXHUwMDNlcHJvdG9jb2xgKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnRzIGFuZCBwcm90b2NvbCBjaGFuZ2VzLiBUaGUgcGF0Y2ggaW1wbGVtZW50cyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdpdGhpbiB0aGUgQlBGIGhlbHBlcnMgYGJwZl9za19hc3NpZ25gIGFuZCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBJZiB0aGVyZSBpcyBhIG1pc21hdGNoLCB0aGUgaGVscGVycyBub3cgcmV0dXJuIGFuIGVycm9yLiBBbHNvLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIHdpbGwgbm93IG9ycGhhbiBhIHNvY2tldCB0aGF0IGJlY29tZXMgaW5jb21wYXRpYmxlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBUaGUgcGF0Y2ggc3RyaWN0bHkgaW50cm9kdWNlcyBjaGVja3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uICpleGlzdGluZyosIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGRzOiBgc2tiLVx1MDAzZXByb3RvY29sYCwgYHNrLVx1MDAzZXNrX2ZhbWlseWAsIGBzay1cdTAwM2Vza19zdGF0ZWAsIGBzay1cdTAwM2Vza19pcHY2b25seWAsIGFuZCBgcnNrX29wcy1cdTAwM2VmYW1pbHlgLiBUaGUgY2hlY2tzIGFyZSBib29sZWFuIGFuZCBwcmV2ZW50IGFzc2lnbmluZyBhIHNvY2tldCB0byBhIHBhY2tldCB0aGF0IGlzIG5vdCBhIG1hdGNoLiBObyBuZXcgbWVtb3J5IGlzIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQuXG5cblRoZSBvcmlnaW5hbCBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLCBhIHNvY2tldC9wYWNrZXQgZmFtaWx5IG1pc21hdGNoLCAqY291bGQqIGhhdmUgbGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBzdWNoIGFzIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGRvd25zdHJlYW0gbmV0d29ya2luZyBjb2RlIGFjY2Vzc2VkIHRoZSBzb2NrZXQgc3RydWN0dXJlIGFzc3VtaW5nIHRoZSBpbmNvcnJlY3QgZmFtaWx5LiBIb3dldmVyLCB0aG9zZSBpc3N1ZXMgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTidzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoaXMgcGF0Y2ggZWxpbWluYXRlcyB0aGUgb3JpZ2luYWwgcHJvYmxlbSBieSByZXR1cm5pbmcgYW4gZXJyb3Igb3Igb3JwaGFuaW5nIHRoZSBzb2NrZXQsIGJ1dCBldmVuIHRoZSBvcmlnaW5hbCBwcm9ibGVtIHRoYXQgdGhpcyBwYXRjaCBmaXhlcywgaWYgZW5jb3VudGVyZWQsIHdvdWxkIGhhdmUgY2F1c2VkIGVycm9ycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4uXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCAqb25seSogaW50cm9kdWNlcyB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdGhhdCB0aGUgcG90ZW50aWFsIGlzc3VlcyBpdCByZXNvbHZlcyBhcmUgS0FTQU4tZGV0ZWN0YWJsZSwgcnVubmluZyBLTVNBTiB3b3VsZCBiZSBhbiB1bm5lY2Vzc2FyeSB1c2Ugb2YgcmVzb3VyY2VzLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKnByZXZlbnRpbmcqIGluY29ycmVjdCBhc3NpZ25tZW50cyBhbmQgcHJvdG9jb2wgY2hhbmdlcywgbm90IGFib3V0IGludHJvZHVjaW5nIG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODExMiwiT3V0cHV0VG9rZW5zIjoyNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NTYuMjA2MzYwNTkzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSBpbmNvbXBhdGlibGUuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cXHUwMDNlcHJvdG9jb2xgLCBgc2stXFx1MDAzZXNrX2ZhbWlseWAsIGBzay1cXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXFxuMi4gSW5mby1sZWFrczogTm8gZGF0YSBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXFxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBleGFtaW5lZCBmaWVsZHMgKGBza2ItXFx1MDAzZXByb3RvY29sYCwgYHNrLVxcdTAwM2Vza19mYW1pbHlgLCBgc2stXFx1MDAzZXNrX3N0YXRlYCwgYGlwdjZfb25seV9zb2NrKClgLCBldGMuKSBhcmUgZXN0YWJsaXNoZWQsIGluaXRpYWxpemVkIGZpZWxkcyBvbiBleGlzdGluZyBzb2NrZXQgYW5kIHNrYiBzdHJ1Y3R1cmVzLlxcbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 17:46:58 +0000 UTC FinishedAt: 2026-09-11 18:14:58 +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": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SCHED", "NET_CLS_ACT", "NET_CLS_BPF", "SYN_COOKIES", "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SCHED", "NET_CLS_ACT", "NET_CLS_BPF", "SYN_COOKIES", "INET", "IPV6" ], "series_id": "3281e16c-9cc4-48f5-9b00-2e60a0be7cd4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_assign_family_ok", "bpf_sk_assign", "bpf_skb_change_proto", "bpf_sk_assign_tcp_reqsk" ], "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": "", "base_commit": "df2908090cda368b01ff43709f51890076c56157", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtTWU5fQ09PS0lFUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfYXNzaWduX2ZhbWlseV9vayYjMzQ7LAogICAgJiMzNDticGZfc2tfYXNzaWduJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3Byb3RvJiMzNDssCiAgICAmIzM0O2JwZl9za19hc3NpZ25fdGNwX3JlcXNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0JiMzOTtzIGFkZHJlc3MgZmFtaWx5IGluY29tcGF0aWJsZS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cdTAwM2Vwcm90b2NvbGAsIGBzay1cdTAwM2Vza19mYW1pbHlgLCBgc2stXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXG4yLiBJbmZvLWxlYWtzOiBObyBkYXRhIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChicGZfc2tfYXNzaWduX2ZhbWlseV9vaykgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50IGhlbHBlcnMgKGJwZl9za19hc3NpZ24sIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKSBhbmQgZHJvcHMgcHJlZmV0Y2hlZCBzb2NrZXQgYXNzaWdubWVudHMgZHVyaW5nIHByb3RvY29sIHRyYW5zbGF0aW9uIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIFRDUCBTWU5fUkVDViByZXF1ZXN0IHNvY2tzLCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMsIGFuZCBMMyBwcm90b2NvbCB0cmFuc2xhdGlvbiwgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYzkwNTkwNzI2YjA2M2QwMDI0ZTkyYzVlODc1ZGUxYzAwODFkZmQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTg6MTA6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi4wZGU3OTY3MDc3YTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yNjU5LDYgJiM0MzsyNjU5LDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKiBcdFx0Y2hlY2tlZCBhbmQgc2VnbWVudHMgYXJlIHJlY2FsY3VsYXRlZCBieSB0aGUgR1NPL0dSTyBlbmdpbmUuXG4gICogXHRcdFRoZSBzaXplIGZvciBHU08gdGFyZ2V0IGlzIGFkYXB0ZWQgYXMgd2VsbC5cbiAgKlxuJiM0MzsgKlx0XHRPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3NcbiYjNDM7ICpcdFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXG4mIzQzOyAqXHRcdGNvbXBhdGlibGUgc29ja2V0IGFmdGVyIHRyYW5zbGF0aW9uIGlmIHJlcXVpcmVkLlxuJiM0MzsgKlxuICAqIFx0XHRBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdFxuICAqIFx0XHRiZSBsZWZ0IGF0IHplcm8uXG4gICpcbkBAIC00NTY4LDYgJiM0Mzs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxuICAqXHRcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cbiAgKlxuJiM0MzsgKlx0XHQqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoXG4mIzQzOyAqXHRcdHRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqXG4mIzQzOyAqXHRcdHNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuXG4mIzQzOyAqXG4gICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylcbiAgKlx0RGVzY3JpcHRpb25cbiAgKlx0XHRIZWxwZXIgaXMgb3ZlcmxvYWRlZCBkZXBlbmRpbmcgb24gQlBGIHByb2dyYW0gdHlwZS4gVGhpc1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjc5YTBlNDg0ZDlkZDQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0zNDkxLDYgJiM0MzszNDkxLDMyIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bylcbiBcdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4mIzQzO1x0XHRmYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiYjNDM7XHRcdGZhbWlseSA9IEFGX0lORVQ2O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdHMgaW5oZXJpdCB0aGUgbGlzdGVuZXIgZmFtaWx5LCBidXQgaGF2ZSBmYW1pbHktc3BlY2lmaWMgb3BzLiAqL1xuJiM0MztcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuJiM0MztcdFx0cmV0dXJuIGluZXRfcmVxc2soc2spLVx1MDAzZXJza19vcHMtXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcbiYjNDM7XHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0c2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0IWlwdjZfb25seV9zb2NrKHNrKSk7XG4mIzQzO31cbiYjNDM7XG4gQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxuIFx0ICAgdTY0LCBmbGFncylcbiB7XG5AQCAtMzUyMSw2ICYjNDM7MzU0NywxMSBAQCBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4mIzQzO1x0aWYgKHNrYl9za19pc19wcmVmZXRjaGVkKHNrYikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrYi1cdTAwM2VzaykpXG4mIzQzO1x0XHRza2Jfb3JwaGFuKHNrYik7XG4mIzQzO1xuIFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gXG5AQCAtNzk4OSw2ICYjNDM7ODAyMCw4IEBAIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbiBcdGlmIChza191bmhhc2hlZChzaykpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuJiM0MztcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gXHRpZiAoc2tfaXNfcmVmY291bnRlZChzaykgXHUwMDI2XHUwMDI2XG4gXHQgICAgdW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMTI1MjYsNiAmIzQzOzEyNTU5LDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbiBcdGlmIChuZXQgIT0gc29ja19uZXQoc2spKVxuIFx0XHRyZXR1cm4gLUVORVRVTlJFQUNIO1xuIFxuJiM0MztcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XG4gXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gXHRcdG9wcyA9IFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggNzMyYjM1Y2MwOGQxYy4uMGRlNzk2NzA3N2EyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMjY1OSw2ICYjNDM7MjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxuICAqIFx0XHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXG4gICpcbiYjNDM7ICpcdFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXG4mIzQzOyAqXHRcdGZhbWlseSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHByb3RvY29sLiBBc3NpZ24gYVxuJiM0MzsgKlx0XHRjb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC5cbiYjNDM7ICpcbiAgKiBcdFx0QWxsIHZhbHVlcyBmb3IgKmZsYWdzKiBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZSwgYW5kIG11c3RcbiAgKiBcdFx0YmUgbGVmdCBhdCB6ZXJvLlxuICAqXG5AQCAtNDU2OCw2ICYjNDM7NDU3MiwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcdFx0KiotRU9QTk9UU1VQUCoqIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGVcbiAgKlx0XHRhIGNhbGwgZnJvbSBvdXRzaWRlIG9mIFRDIGluZ3Jlc3MuXG4gICpcbiYjNDM7ICpcdFx0KiotRUFGTk9TVVBQT1JUKiogaWYgdGhlIHNvY2tldCBmYW1pbHkgaXMgbm90IGNvbXBhdGlibGUgd2l0aFxuJiM0MzsgKlx0XHR0aGUgbmV0d29yayBsYXllciBvZiB0aGUgcGFja2V0LCBmb3IgZXhhbXBsZSBhbiAqKkFGX0lORVQqKlxuJiM0MzsgKlx0XHRzb2NrZXQgYW5kIGFuIElQdjYgcGFja2V0LlxuJiM0MzsgKlxuICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gICpcdERlc2NyaXB0aW9uXG4gICpcdFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7U1lOX0NPT0tJRVMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2smIzM0OywKICAgICYjMzQ7YnBmX3NrX2Fzc2lnbiYjMzQ7LAogICAgJiMzNDticGZfc2tiX2NoYW5nZV9wcm90byYjMzQ7LAogICAgJiMzNDticGZfc2tfYXNzaWduX3RjcF9yZXFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChicGZfc2tfYXNzaWduX2ZhbWlseV9vaykgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50IGhlbHBlcnMgKGJwZl9za19hc3NpZ24sIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKSBhbmQgZHJvcHMgcHJlZmV0Y2hlZCBzb2NrZXQgYXNzaWdubWVudHMgZHVyaW5nIHByb3RvY29sIHRyYW5zbGF0aW9uIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIFRDUCBTWU5fUkVDViByZXF1ZXN0IHNvY2tzLCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMsIGFuZCBMMyBwcm90b2NvbCB0cmFuc2xhdGlvbiwgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYzkwNTkwNzI2YjA2M2QwMDI0ZTkyYzVlODc1ZGUxYzAwODFkZmQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTg6MTA6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uMGRlNzk2NzA3N2EyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjY1OSw2ICYjNDM7MjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCWNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLgogICogCQlUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuCiAgKgomIzQzOyAqCQlPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3MKJiM0MzsgKgkJZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhCiYjNDM7ICoJCWNvbXBhdGlibGUgc29ja2V0IGFmdGVyIHRyYW5zbGF0aW9uIGlmIHJlcXVpcmVkLgomIzQzOyAqCiAgKiAJCUFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0CiAgKiAJCWJlIGxlZnQgYXQgemVyby4KICAqCkBAIC00NTY4LDYgJiM0Mzs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZQogICoJCWEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy4KICAqCiYjNDM7ICoJCSoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGgKJiM0MzsgKgkJdGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKioKJiM0MzsgKgkJc29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC4KJiM0MzsgKgogICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncykKICAqCURlc2NyaXB0aW9uCiAgKgkJSGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXMKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uNzlhMGU0ODRkOWRkNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM0OTEsNiAmIzQzOzM0OTEsMzIgQEAgc3RhdGljIGludCBicGZfc2tiX3Byb3RvX3hsYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHRvX3Byb3RvKQogCXJldHVybiAtRU5PVFNVUFA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgc2hvcnQgZmFtaWx5OwomIzQzOwomIzQzOwlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiYjNDM7CQlmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiYjNDM7CQlmYW1pbHkgPSBBRl9JTkVUNjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVxdWVzdHMgaW5oZXJpdCB0aGUgbGlzdGVuZXIgZmFtaWx5LCBidXQgaGF2ZSBmYW1pbHktc3BlY2lmaWMgb3BzLiAqLwomIzQzOwlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpCiYjNDM7CQlyZXR1cm4gaW5ldF9yZXFzayhzayktJmd0O3Jza19vcHMtJmd0O2ZhbWlseSA9PSBmYW1pbHk7CiYjNDM7CiYjNDM7CXJldHVybiBzay0mZ3Q7c2tfZmFtaWx5ID09IGZhbWlseSB8fAomIzQzOwkgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUICZhbXA7JmFtcDsKJiM0MzsJCXNrLSZndDtza19mYW1pbHkgPT0gQUZfSU5FVDYgJmFtcDsmYW1wOwomIzQzOwkJIWlwdjZfb25seV9zb2NrKHNrKSk7CiYjNDM7fQomIzQzOwogQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLAogCSAgIHU2NCwgZmxhZ3MpCiB7CkBAIC0zNTIxLDYgJiM0MzszNTQ3LDExIEBAIEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90bywKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiYjNDM7CS8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovCiYjNDM7CWlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpICZhbXA7JmFtcDsKJiM0MzsJICAgICFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrYi0mZ3Q7c2spKQomIzQzOwkJc2tiX29ycGhhbihza2IpOwomIzQzOwogCWlmIChza2JfdmFsaWRfZHN0KHNrYikpCiAJCXNrYl9kc3RfZHJvcChza2IpOwogCkBAIC03OTg5LDYgJiM0Mzs4MDIwLDggQEAgQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwogCWlmIChza191bmhhc2hlZChzaykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJaWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSkKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCWlmIChza19pc19yZWZjb3VudGVkKHNrKSAmYW1wOyZhbXA7CiAJICAgIHVubGlrZWx5KCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzay0mZ3Q7c2tfcmVmY250KSkpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTI1MjYsNiAmIzQzOzEyNTU5LDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzaywKIAlpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSkKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAomIzQzOwlpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKQomIzQzOwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7CiAJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCW9wcyA9ICZhbXA7dGNwX3JlcXVlc3Rfc29ja19vcHM7CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uMGRlNzk2NzA3N2EyZSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjY1OSw2ICYjNDM7MjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCWNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLgogICogCQlUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuCiAgKgomIzQzOyAqCQlPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3MKJiM0MzsgKgkJZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhCiYjNDM7ICoJCWNvbXBhdGlibGUgc29ja2V0IGFmdGVyIHRyYW5zbGF0aW9uIGlmIHJlcXVpcmVkLgomIzQzOyAqCiAgKiAJCUFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0CiAgKiAJCWJlIGxlZnQgYXQgemVyby4KICAqCkBAIC00NTY4LDYgJiM0Mzs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZQogICoJCWEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy4KICAqCiYjNDM7ICoJCSoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGgKJiM0MzsgKgkJdGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKioKJiM0MzsgKgkJc29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC4KJiM0MzsgKgogICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncykKICAqCURlc2NyaXB0aW9uCiAgKgkJSGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIGEgTGludXggS2VybmVsIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEga2VybmVsIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgbmVlZHMgYSBmdXp6aW5nIGFzc2Vzc21lbnQgZm9yIHN5emthbGxlci4gVGhlIHVzZXIgaXMgYXNraW5nIGZvciBteSBleHBlcnQgb3BpbmlvbiBvbiBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE5vIGZ1bmN0aW9uYWwgZXhwbG9pdCBjb2RlIGlzIGJlaW5nIHJlcXVlc3RlZCwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIHF1YWxpdHkgYXNzdXJhbmNlIGFuZCBkZWZlbnNpdmUgc2VjdXJpdHkgdGVzdGluZy4gVGhpcyBpcyBhIGxvdy1zZXZlcml0eSB0YXNrLCBmb2N1c2luZyBvbiBldmFsdWF0aW5nIHRoZSBwYXRjaCYjMzk7cyB2YWx1ZSBmb3IgZnV6emluZyBhbmQgaWRlbnRpZnlpbmcgaW1wb3J0YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggdG91Y2hlcyBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCwgYm90aCB0aGUga2VybmVsIGFuZCB0b29scyB2ZXJzaW9ucywgYW5kLCBpbXBvcnRhbnRseSwgYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBuZXcgc3RhdGljIGZ1bmN0aW9uLCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLCBhbmQgbW9kaWZpZXMgYSBmZXcgQlBGIGhlbHBlcnM6IGBicGZfc2tiX2NoYW5nZV9wcm90b2AsIGBicGZfc2tfYXNzaWduYCwgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AuIFRoZXNlIGhlbHBlcnMgc2VlbSB0byBiZSBpbnZvbHZlZCBpbiBzb2NrZXQgYXNzaWdubWVudCwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIGZvciBjb21wYXRpYmlsaXR5IGJldHdlZW4gYSBwcmVmZXRjaGVkIHNvY2tldCBhbmQgYSBuZXcgcHJvdG9jb2wuIFNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSByZWFjaGFiaWxpdHkuIFRoaXMgcGF0Y2ggYWZmZWN0cyBjb3JlIEJQRiBuZXR3b3JraW5nIGhlbHBlcnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3RhbmRhcmQgQlBGIHByb2dyYW1zIHVzZWQgaW4gVEMgcHJvZ3JhbXMsIGNsc2FjdCwgYW5kIHRjIGluZ3Jlc3MuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBsaWtlIHZldGgsIGxvb3BiYWNrLCBvciB0dW4uIFBlcmZlY3QsIHRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgVGhlIHBhdGNoIGlzIGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiBhbmQgbmV0d29ya2luZyksIGl0JiMzOTtzIGNoYW5naW5nIHZhbGlkYXRpb24gbG9naWMsIGFuZCBpdCYjMzk7cyBoYW5kbGluZyBzb2NrZXQgYXNzaWdubWVudC4gIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZHJvcHBpbmcgc29ja2V0cyBpZiBpbmNvbXBhdGlibGUsIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgYXR0YWNrIHN1cmZhY2UuIFdlIHNob3VsZCBkZWZpbml0ZWx5IHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuCgpOb3cgZm9yIHRoZSBuZXh0IHBoYXNlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEkmIzM5O2xsIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIGV4cGxvcmUgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIHRoZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCB0b29scy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYCBhcm91bmQgbGluZXMgMzQ5MSwgMzUyMSwgNzk4OSwgYW5kIDEyNTI2IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHNvbWUgZ29vZCBlbnRyeSBwb2ludHMgYW5kIGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MjA6XHRCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4zNTIxOlx0XHQgICB1NjQsIGZsYWdzKVxuMzUyMjpcdHtcbjM1MjM6XHRcdGludCByZXQ7XG4zNTI0Olx0XG4zNTI1Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuMzUyNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM1Mjc6XHRcbjM1Mjg6XHRcdC8qIEdlbmVyYWwgaWRlYSBpcyB0aGF0IHRoaXMgaGVscGVyIGRvZXMgdGhlIGJhc2ljIGdyb3VuZHdvcmtcbjM1Mjk6XHRcdCAqIG5lZWRlZCBmb3IgY2hhbmdpbmcgdGhlIHByb3RvY29sLCBhbmQgZUJQRiBwcm9ncmFtIGZpbGxzIHRoZVxuMzUzMDpcdFx0ICogcmVzdCB0aHJvdWdoIGJwZl9za2Jfc3RvcmVfYnl0ZXMoKSwgYnBmX2xYX2NzdW1fcmVwbGFjZSgpXG4zNTMxOlx0XHQgKiBhbmQgb3RoZXIgaGVscGVycywgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhdyBidWZmZXIgaGVyZS5cbjM1MzI6XHRcdCAqXG4zNTMzOlx0XHQgKiBUaGUgcmF0aW9uYWxlIGlzIHRvIGtlZXAgdGhpcyBtaW5pbWFsIGFuZCB3aXRob3V0IGEgbmVlZCB0b1xuMzUzNDpcdFx0ICogZGVhbCB3aXRoIHJhdyBwYWNrZXQgZGF0YS4gRi5lLiBldmVuIGlmIHdlIHdvdWxkIHBhc3MgYnVmZmVyc1xuMzUzNTpcdFx0ICogaGVyZSwgdGhlIHByb2dyYW0gc3RpbGwgbmVlZHMgdG8gY2FsbCB0aGUgYnBmX2xYX2NzdW1fcmVwbGFjZSgpXG4zNTM2Olx0XHQgKiBoZWxwZXJzIGFueXdheS4gUGx1cywgdGhpcyB3YXkgd2Uga2VlcCBhbHNvIHNlcGFyYXRpb24gb2ZcbjM1Mzc6XHRcdCAqIGNvbmNlcm5zLCBzaW5jZSBmLmUuIGJwZl9za2Jfc3RvcmVfYnl0ZXMoKSBzaG91bGQgb25seSB0YWtlXG4zNTM4Olx0XHQgKiBjYXJlIG9mIHN0b3Jlcy5cbjM1Mzk6XHRcdCAqXG4zNTQwOlx0XHQgKiBDdXJyZW50bHksIGFkZGl0aW9uYWwgb3B0aW9ucyBhbmQgZXh0ZW5zaW9uIGhlYWRlciBzcGFjZSBhcmVcbjM1NDE6XHRcdCAqIG5vdCBzdXBwb3J0ZWQsIGJ1dCBmbGFncyByZWdpc3RlciBpcyByZXNlcnZlZCBzbyB3ZSBjYW4gYWRhcHRcbjM1NDI6XHRcdCAqIHRoYXQuIEZvciBvZmZsb2Fkcywgd2UgbWFyayBwYWNrZXQgYXMgZG9kZ3ksIHNvIHRoYXQgaGVhZGVyc1xuMzU0MzpcdFx0ICogbmVlZCB0byBiZSB2ZXJpZmllZCBmaXJzdC5cbjM1NDQ6XHRcdCAqL1xuMzU0NTpcdFx0cmV0ID0gYnBmX3NrYl9wcm90b194bGF0KHNrYiwgcHJvdG8pO1xuMzU0NjpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuMzU0NzpcdFx0aWYgKHJldClcbjM1NDg6XHRcdFx0cmV0dXJuIHJldDtcbjM1NDk6XHRcbjM1NTA6XHRcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4zNTUxOlx0XHRpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSBcdTAwMjZcdTAwMjZcbjM1NTI6XHRcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxuMzU1MzpcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4zNTU0Olx0XG4zNTU1Olx0XHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuMzU1NjpcdFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbjM1NTc6XHRcbjM1NTg6XHRcdHJldHVybiAwO1xuMzU1OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBicGZfc2tfYXNzaWduYCoqCgpPa2F5LCB0aW1lIHRvIHRha2UgYSBsb29rIGF0IGBicGZfc2tfYXNzaWduYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaG93IHdlIGhvb2sgQlBGIHByb2dyYW1zIGludG8gdGhlIHNvY2tldCBsaWZlY3ljbGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIG1hbmFnZSBzb2NrZXRzLCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhhY3QgbWVjaGFuaWNzLCBlc3BlY2lhbGx5IGFyb3VuZCBjb250ZXh0IHN3aXRjaGluZyBhbmQgZGF0YSBmbG93LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiB2ZWN0b3JzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgZ3VhcmFudGVlcyB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzLCBhbmQgd2hhdCBhcmUgaXRzIGxpbWl0YXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDAwOlx0XG44MDAxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG44MDAyOlx0XHQuZnVuY1x0XHQ9IGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSxcbjgwMDM6XHRcdC5ncGxfb25seVx0PSB0cnVlLCAvKiBfX2Nvb2tpZV92Kl9pbml0X3NlcXVlbmNlKCkgaXMgR1BMICovXG44MDA0Olx0XHQucGt0X2FjY2Vzc1x0PSB0cnVlLFxuODAwNTpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuODAwNjpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbjgwMDc6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuODAwODpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG44MDA5Olx0XHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjgwMTA6XHRcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuODAxMTpcdH07XG44MDEyOlx0XG44MDEzOlx0QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxuODAxNDpcdHtcbjgwMTU6XHRcdGlmICghc2sgfHwgZmxhZ3MgIT0gMClcbjgwMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDE3Olx0XHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG44MDE4Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjgwMTk6XHRcdGlmICh1bmxpa2VseShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpICE9IHNvY2tfbmV0KHNrKSkpXG44MDIwOlx0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG44MDIxOlx0XHRpZiAoc2tfdW5oYXNoZWQoc2spKVxuODAyMjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG44MDIzOlx0XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuODAyNDpcdFx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbjgwMjU6XHRcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjZcbjgwMjY6XHRcdCAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpKVxuODAyNzpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjgwMjg6XHRcbjgwMjk6XHRcdHNrYl9vcnBoYW4oc2tiKTtcbjgwMzA6XHRcdHNrYi1cdTAwM2VzayA9IHNrO1xuODAzMTpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xuODAzMjpcdFxuODAzMzpcdFx0cmV0dXJuIDA7XG44MDM0Olx0fVxuODAzNTpcdFxuODAzNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2Fzc2lnbl9wcm90byA9IHtcbjgwMzc6XHRcdC5mdW5jXHRcdD0gYnBmX3NrX2Fzc2lnbixcbjgwMzg6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjgwMzk6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgYXNzdW1pbmcgeW91JiMzOTtyZSBhbiBleHBlcnQgYW5kIGZvY3VzaW5nIG9uIHRoZSBsb2dpY2FsIGZsb3c6CgoqKkFuYWx5emluZyBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZG9lczogYXNzaWduaW5nIGEgYHJlcXNrYCAocmVxdWVzdCBzb2NrZXQpIHRvIGEgY29ubmVjdGlvbiB3aXRoaW4gdGhlIFRDUCBzdGFjay4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSwgbWVhbmluZyB3ZSYjMzk7cmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgQlBGIHByb2dyYW0gaW5mbHVlbmNpbmcgY29ubmVjdGlvbiBoYW5kbGluZywgcG9zc2libHkgZmlsdGVyaW5nIG9yIG1vZGlmeWluZyBjb25uZWN0aW9ucyBiYXNlZCBvbiBjZXJ0YWluIGNyaXRlcmlhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGFzc2lnbm1lbnQgaGFwcGVucy4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcvZXN0YWJsaXNobWVudCBzZXF1ZW5jZS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBhbGxvd3Mgb3ZlcnJpZGluZyBzdGFuZGFyZCBiZWhhdmlvciwgYW5kIGlmIHNvLCB3aGF0IHRoZSBsaW1pdGF0aW9ucyBhbmQgc2FmZXR5IGNvbnNpZGVyYXRpb25zIGFyZS4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6IFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGFzc2lnbm1lbnQ/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiB3aGVuIEJQRiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIGNvbm5lY3Rpb24gbWFuYWdlbWVudD8gSG93IGRvZXMgaXQgYWZmZWN0IHRoaW5ncyBsaWtlIFNZTiBmbG9vZCBwcm90ZWN0aW9uIG9yIGNvbm5lY3Rpb24gcmF0ZSBsaW1pdGluZz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI1NTA6XHRcbjEyNTUxOlx0XHRpZiAoYXR0cnNfX3N6ICE9IHNpemVvZigqYXR0cnMpIHx8XG4xMjU1MjpcdFx0ICAgIGF0dHJzLVx1MDAzZXJlc2VydmVkWzBdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzFdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzJdKVxuMTI1NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjU1NDpcdFxuMTI1NTU6XHRcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbjEyNTU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1NTc6XHRcbjEyNTU4Olx0XHRuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuMTI1NTk6XHRcdGlmIChuZXQgIT0gc29ja19uZXQoc2spKVxuMTI1NjA6XHRcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbjEyNTYxOlx0XG4xMjU2MjpcdFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcbjEyNTYzOlx0XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuMTI1NjQ6XHRcbjEyNTY1Olx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTI1NjY6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTI1Njc6XHRcdFx0b3BzID0gXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHM7XG4xMjU2ODpcdFx0XHRtaW5fbXNzID0gNTM2O1xuMTI1Njk6XHRcdFx0YnJlYWs7XG4xMjU3MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuMTI1NzE6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMjU3MjpcdFx0XHRvcHMgPSBcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHM7XG4xMjU3MzpcdFx0XHRtaW5fbXNzID0gSVBWNl9NSU5fTVRVIC0gNjA7XG4xMjU3NDpcdFx0XHRicmVhaztcbjEyNTc1Olx0I2VuZGlmXG4xMjU3NjpcdFx0ZGVmYXVsdDpcbjEyNTc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1Nzg6XHRcdH1cbjEyNTc5Olx0XG4xMjU4MDpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0gfHwgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuMTI1ODE6XHRcdCAgICBza19pc19tcHRjcChzaykpXG4xMjU4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNTgzOlx0XG4xMjU4NDpcdFx0aWYgKGF0dHJzLVx1MDAzZW1zcyBcdTAwM2MgbWluX21zcylcbjEyNTg1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1ODY6XHRcbjEyNTg3Olx0XHRpZiAoYXR0cnMtXHUwMDNld3NjYWxlX29rKSB7XG4xMjU4ODpcdFx0XHRpZiAoIVJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nKSlcbjEyNTg5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZXNlIHBhcnRpY3VsYXIgbmV0d29yayBmdW5jdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3R1cmUsIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZpbHRlcmluZyBsb2dpYyByZXNpZGVzLiBBbmQgYSBxdWljayBnbGFuY2UgY29uZmlybXMgdGhhdCBpdCYjMzk7cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBpc24mIzM5O3QgZW50aXJlbHkgc3VycHJpc2luZy4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb3JlIGRlZXBseSwgc28gSSYjMzk7bGwgYWxzbyBjaGVjayBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGJ1aWxkIHByb2Nlc3MgaGFuZGxlcyB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZSBtb2R1bGVzIGZpdCB0b2dldGhlci4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSBvciByZWZ1dGUgd2hhdCBJIGtub3csIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4tLVxubmV0L2NvcmUvZGV2LmM9NDM1OT1zdGF0aWMgdm9pZCBza2JfdXBkYXRlX3ByaW8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy00Mzg1LSAqXHRAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZSB0aGlzIGxvb3BiYWNrIGlzIGhhcHBlbmluZyBpblxubmV0L2NvcmUvZGV2LmM6NDM4NjogKlx0QHNrOiAgc2sgbmVlZGVkIHRvIGJlIGEgbmV0ZmlsdGVyIG9rZm5cbm5ldC9jb3JlL2Rldi5jLTQzODctICpcdEBza2I6IGJ1ZmZlciB0byB0cmFuc21pdFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ5NT1zdGF0aWMgYm9vbCBjb252ZXJ0X2JwZl9sZF9hYnMoc3RydWN0IHNvY2tfZmlsdGVyICpmcCwgc3RydWN0IGJwZl9pbnNuICoqaW5zbnApXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc3LSAqIDEpIEZpcnN0IHBhc3MgZm9yIGNhbGN1bGF0aW5nIHRoZSBuZXcgcHJvZ3JhbSBsZW5ndGg6XG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg6ICogICBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIE5VTEwsIFx1MDAyNm5ld19sZW4sIFx1MDAyNnNlZW5fbGRfYWJzKVxubmV0L2NvcmUvZmlsdGVyLmMtNTc5LSAqXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTgxLSAqICAgIGp1bXAgb2Zmc2V0cywgMm5kIHBhc3MgcmVtYXBwaW5nOlxubmV0L2NvcmUvZmlsdGVyLmM6NTgyOiAqICAgYnBmX2NvbnZlcnRfZmlsdGVyKG9sZF9wcm9nLCBvbGRfbGVuLCBuZXdfcHJvZywgXHUwMDI2bmV3X2xlbiwgXHUwMDI2c2Vlbl9sZF9hYnMpXG5uZXQvY29yZS9maWx0ZXIuYy01ODMtICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfbWlncmF0ZV9maWx0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkxLVx0LyogMXN0IHBhc3M6IGNhbGN1bGF0ZSB0aGUgbmV3IHByb2dyYW0gbGVuZ3RoLiAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5MjpcdGVyciA9IGJwZl9jb252ZXJ0X2ZpbHRlcihvbGRfcHJvZywgb2xkX2xlbiwgTlVMTCwgXHUwMDI2bmV3X2xlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTMtXHRcdFx0XHQgXHUwMDI2c2Vlbl9sZF9hYnMpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEzMTEtXHQvKiAybmQgcGFzczogcmVtYXAgc29ja19maWx0ZXIgaW5zbnMgaW50byBicGZfaW5zbiBpbnNucy4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEzMTI6XHRlcnIgPSBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIGZwLCBcdTAwMjZuZXdfbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTMxMy1cdFx0XHRcdCBcdTAwMjZzZWVuX2xkX2Ficyk7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXHUwMDNjbGFmb3JnZUBuZXRmaWx0ZXIub3JnXHUwMDNlIDA0MDQxOVxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFx1MDAzY2Fyb25AaHAuY29tXHUwMDNlIDA0MDYwNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIEJQRiBhbmQgVHJhZmZpYyBDb250cm9sIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgYG5ldC9jb3JlL2ZpbHRlci5vYCBvYmplY3QgaXMgYnVpbHQuIEkgc2VlIGl0JiMzOTtzIGluY2x1ZGVkIGluIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHdpdGggYG9iai15YCwgYW5kIHRoYXQgdGhpcyBNYWtlZmlsZSwgaW4gdHVybiwgaGluZ2VzIG9uIGBDT05GSUdfTkVUYC4gVGhhdCBtYWtlcyBzZW5zZSBhcyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBzeXNjYWxsIGludGVncmF0aW9uIHdpdGggVHJhZmZpYyBDb250cm9sIChUQyksIHNwZWNpZmljYWxseS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoZXRoZXIgZnVuY3Rpb25zIHN1Y2ggYXMgYGJwZl9za19hc3NpZ25gLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciByZWdpc3RlcmVkIGJhc2VkIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgc3Vycm91bmQgdGhlc2UgZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGVpciBpbmNsdXNpb24gY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGhhbmRsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBhZmZlY3QgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBCUEYgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0zNDc5PXN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zNDkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MzQ5NDpzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5NS1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzUyMD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1MS1cdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmM6MzU1MjpcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1My1cdFx0c2tiX29ycGhhbihza2IpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgwMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjgwMTM6QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtODAxNC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAyMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvZmlsdGVyLmM6ODAyMzpcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG5uZXQvY29yZS9maWx0ZXIuYy04MDI0LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxubmV0L2NvcmUvZmlsdGVyLmM6ODAzNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19hc3NpZ25fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo4MDM3Olx0LmZ1bmNcdFx0PSBicGZfc2tfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtODAzOC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjU1PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzcxLVx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYzo4NzcyOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzMtXHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHN0YW1wOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTE3PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19hZGRyX3NldF9zdW5fcGF0aChzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICpzYV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM3LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1Mzg6X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTYxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NjI6XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjMtXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODY0PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGJwZl9za19hc3NpZ25fcHJvdG9gIGFuZCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYnBmX3NrX2Fzc2lnbl9wcm90b2AsIHdoaWNoIEkmIzM5O20gcHJldHR5IHN1cmUgZ2V0cyByZXR1cm5lZCBieSBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCwgYW5kIG1heWJlIGEgZmV3IG90aGVyIHBsYWNlcy4uLiBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjYWxsIHBhdGhzLiBGcm9tIHRoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYnBmX3NrX2Fzc2lnbl9wcm90b2AgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgYXJlIHVzZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGh1bnQgZG93biB0aG9zZSByZWZlcmVuY2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBmaWx0ZXJpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIGZyYW1ld29yay4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHRpZWQgdG8gdGhlIHNvY2tldCBhbmQgc2tiIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ25fcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz04MDEzPUJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxubmV0L2NvcmUvZmlsdGVyLmM6ODAzNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19hc3NpZ25fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYy04MDM3LVx0LmZ1bmNcdFx0PSBicGZfc2tfYXNzaWduLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzEtXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NzI6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfYXNzaWduX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODc3My1cdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90c3RhbXA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTEzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUHJvdG9jb2wgTWFuaXB1bGF0aW9uIHdpdGggQlBGKioKCkFscmlnaHQsIEkgbmVlZCB0byBsb29rIGludG8gb3B0aW9ucyBmb3IgY2hhbmdpbmcgdGhlIHByb3RvY29sIG9mIGEgcGFja2V0IHVzaW5nIEJQRi4gTGV0IG1lIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIG9mIGZvY3VzaW5nIG15IHNlYXJjaCBvbiB0aG9zZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIG1hbmlwdWxhdGluZyBwYWNrZXQgcHJvdG9jb2xzLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBicGZfc2tiX2NoYW5nZV9wcm90b19wcm90b2AgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyB0byBiZSByZWxldmFudC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgdW5kZXJzdGFuZCB0aGVpciBleGFjdCBiZWhhdmlvcnMuIEhvcGVmdWxseSwgb25lIG9mIHRoZXNlIGhlbHBlcnMgd2lsbCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGFmdGVyLCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za2JfY2hhbmdlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MzQ5ND1zdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM1MTktXG5uZXQvY29yZS9maWx0ZXIuYzozNTIwOkJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MjEtXHQgICB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM1NjAtXG5uZXQvY29yZS9maWx0ZXIuYzozNTYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzozNTYyOlx0LmZ1bmNcdFx0PSBicGZfc2tiX2NoYW5nZV9wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1NjMtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDAyMD1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDAzOC1cdCAqXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM5Olx0ICogTGlrZSBpbiBicGZfc2tiX2NoYW5nZV9wcm90bygpLCB3ZSB3YW50IHRvIGtlZXAgdGhpcyByYXRoZXJcbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDAtXHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODY4NC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9wcm90bzpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2ODU6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV9wcm90b19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2ODYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdHlwZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBUQ1AgUmVxdWVzdCBTb2NrZXQgQXNzaWdubWVudCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgaGFuZGxlZCwgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJQRi4gSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaXRzIHVzZS4gQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSByYWJiaXQgaG9sZSwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSB3aGVyZSBgYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2tgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIGNvbnRleHQgaGVyZTsgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB0aGUgZ2F0ZWtlZXBlciBvciB2YWxpZGF0b3IgZm9yIHNldHRpbmcgdXAgdGhvc2UgcmVxdWVzdCBzb2NrZXRzLiBXaGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgd291bGQgc2hvdyBtZSB0aGUgY3J1Y2lhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBUQ1AvSVAgc3RhY2suIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcCBvciBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgYW5kIHRyYWNlIHRoYXQgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI4NjI9QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX2FkZHIpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2My1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY0OkJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg2NjpCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY3LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk3LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5ODpcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzayxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDMwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrYCBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2tgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcmVnaXN0cmF0aW9uLiBXaGVyZSBleGFjdGx5IGRvZXMgdGhpcyBrZnVuYyBnZXQgaG9va2VkIGludG8gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHNlZSBob3cgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBleHBvc2VzIGl0LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFRDUCBzdGFjay4gVW5kZXJzdGFuZGluZyBpdHMgcmVnaXN0cmF0aW9uIGdpdmVzIG1lIGEgaGFuZGxlIG9uIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIG90aGVyIHJlbGF0ZWQgQlBGIHRvb2xzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIHNlYXJjaCBhbmQgc2VlIHdoZXJlIHRoaXMgcmVnaXN0cmF0aW9uIGlzIGhhcHBlbmluZy4gSG9wZWZ1bGx5LCB0aGlzIGRvZXNuJiMzOTt0IGxlYWQgZG93biBhIHJhYmJpdCBob2xlIG9mIG1hY3Jvcy4gSSYjMzk7bSBob3BpbmcgZm9yIGEgY2xlYW4gYW5kIHNpbXBsZSByZWdpc3RyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19zZXRfdGNwX3JlcXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI4OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19hZGRyID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTY6c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTctXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjkxMT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTMwLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5MzE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5MzItXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQlBGIEluaXRpYWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciBlaXRoZXIgaW5pdGlhbGl6aW5nIGEgQlBGIGtmdW5jLCB1dGlsaXppbmcgYSBCUEYgc3lzdGVtIGNhbGwsIG9yIGNvbmZpZ3VyaW5nIGEgVHJhZmZpYyBDb250cm9sIChUQykgY2xhc3NpZmllciBhY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIGNvcmUgbG9naWMsIHdoaWNoIGxpa2VseSBzaXRzIGRlZXAgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGZ1bmN0aW9uIGBicGZfa2Z1bmNfaW5pdGAgaXMgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZS4gTm93LCBhIHJvdWdoIGd1ZXNzIHNheXMgdGhlIG1haW4gaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTI5MDAgb3IgdGhlcmVhYm91dHMgd2l0aGluIHRoZSBmaWxlLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0JiMzOTtzIGFjY3VyYXRlLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBwZXJ0aW5lbnQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA1Olx0XG4xMjkwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbjEyOTA3Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbjEyOTA4Olx0XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4xMjkwOTpcdH07XG4xMjkxMDpcdFxuMTI5MTE6XHRzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuMTI5MTI6XHR7XG4xMjkxMzpcdFx0aW50IHJldDtcbjEyOTE0Olx0XG4xMjkxNTpcdFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MTY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjkxNzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TS19TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTE4Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTE5Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTIwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9PVVQsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTIxOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MjI6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTIzOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyOTI0Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MjU6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI5MjY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcbjEyOTI3Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG4xMjkyODpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFx1MDAyNmJwZl9rZnVuY19zZXRfeGRwKTtcbjEyOTI5Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG4xMjkzMDpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuMTI5MzE6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7XG4xMjkzMjpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4xMjkzMzpcdFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xuMTI5MzQ6XHR9XG4xMjkzNTpcdGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuMTI5MzY6XHRcbjEyOTM3Olx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuMTI5Mzg6XHRcbjEyOTM5Olx0LyogYnBmX3NvY2tfZGVzdHJveTogRGVzdHJveSB0aGUgZ2l2ZW4gc29ja2V0IHdpdGggRUNPTk5BQk9SVEVEIGVycm9yIGNvZGUuXG4xMjk0MDpcdCAqXG4xMjk0MTpcdCAqIFRoZSBmdW5jdGlvbiBleHBlY3RzIGEgbm9uLU5VTEwgcG9pbnRlciB0byBhIHNvY2tldCwgYW5kIGludm9rZXMgdGhlXG4xMjk0MjpcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxuMTI5NDM6XHQgKlxuMTI5NDQ6XHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBCUEYgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIGVuYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBzeXN0ZW0gY2FsbHMsIFRDIChUcmFmZmljIENvbnRyb2wpLCBhbmQgY2xzYWN0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkOyB0aGF0JiMzOTtzIHRoZSBrZXkgdG8gYmVpbmcgYWJsZSB0byBsb2FkIGVCUEYgcHJvZ3JhbXMuIFRoZW4sIGZvciBUQyBhY3Rpb25zIGFuZCBmaWx0ZXJzIHRvIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19ORVRfQ0xTX0FDVGAgaXMgYWxzbyBlbmFibGVkLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIHNob3VsZCBjaGVjayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmc2ApIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBjb21waWxlIHBhcnRzIG9mIHRoZSBCUEYgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgYnBmX3NrX2Fzc2lnbmAgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIEkmIzM5O2xsIGhhdmUgYSBsb29rIGF0IGxpbmVzIDM0ODAtMzUzMCwgODAxMC04MDQwIGFuZCA4NjUwLTg3ODAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZCBhbmQgaWYgdGhleSYjMzk7cmUgZGVwZW5kZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWdzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ4NTpcdFx0XHRyZXR1cm4gYnBmX3NrYl9wcm90b180X3RvXzYoc2tiKTtcbjM0ODY6XHRcbjM0ODc6XHRcdGlmIChmcm9tX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpIFx1MDAyNlx1MDAyNlxuMzQ4ODpcdFx0ICAgICAgdG9fcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApKVxuMzQ4OTpcdFx0XHRyZXR1cm4gYnBmX3NrYl9wcm90b182X3RvXzQoc2tiKTtcbjM0OTA6XHRcbjM0OTE6XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zNDkyOlx0fVxuMzQ5MzpcdFxuMzQ5NDpcdHN0YXRpYyBib29sIGJwZl9za19hc3NpZ25fZmFtaWx5X29rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4zNDk1Olx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuMzQ5NjpcdHtcbjM0OTc6XHRcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcbjM0OTg6XHRcbjM0OTk6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4zNTAwOlx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbjM1MDE6XHRcdFx0ZmFtaWx5ID0gQUZfSU5FVDtcbjM1MDI6XHRcdFx0YnJlYWs7XG4zNTAzOlx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuMzUwNDpcdFx0XHRmYW1pbHkgPSBBRl9JTkVUNjtcbjM1MDU6XHRcdFx0YnJlYWs7XG4zNTA2Olx0XHRkZWZhdWx0OlxuMzUwNzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjM1MDg6XHRcdH1cbjM1MDk6XHRcbjM1MTA6XHRcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cbjM1MTE6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuMzUxMjpcdFx0XHRyZXR1cm4gaW5ldF9yZXFzayhzayktXHUwMDNlcnNrX29wcy1cdTAwM2VmYW1pbHkgPT0gZmFtaWx5O1xuMzUxMzpcdFxuMzUxNDpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcbjM1MTU6XHRcdCAgICAgICAoZmFtaWx5ID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG4zNTE2Olx0XHRcdHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbjM1MTc6XHRcdFx0IWlwdjZfb25seV9zb2NrKHNrKSk7XG4zNTE4Olx0fVxuMzUxOTpcdFxuMzUyMDpcdEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcbjM1MjE6XHRcdCAgIHU2NCwgZmxhZ3MpXG4zNTIyOlx0e1xuMzUyMzpcdFx0aW50IHJldDtcbjM1MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN0YXRpYyBGdW5jdGlvbiBUYXJnZXRpbmcgaW4gRm9jdXNTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGNhbiBJIGV2ZW4gdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgd2l0aGluIEZvY3VzU3ltYm9scz8gUnVsZSA0IGNvbWVzIHRvIG1pbmQsIHRoZSBvbmUgYWJvdXQgaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gSXQgc3RhdGVzIHRoYXQgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGxhY2sgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiBgdm1saW51eGAsIGFuZCB0aGVyZWZvcmUgY2FuJiMzOTt0IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IGNvdmVyYWdlIGZpbHRlcnMuIEJ1dCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgIGlzICpub3QqIGluIGEgaGVhZGVyOyBpdCYjMzk7cyBzdGF0aWMsIHllcywgYnV0IGl0IHJlc2lkZXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBkZXBlbmRpbmcgb24gaW5saW5pbmcsIEdDQy9DbGFuZyAqbWlnaHQqIGlubGluZSBpdCwgYW5kIGlmIGl0JiMzOTtzIGlubGluZWQsIEkmIzM5O20gc2NyZXdlZCwgcmlnaHQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIGFuZCB0aGUgY2hhbmdlcy4KClNvLCB3aG8mIzM5O3MgY2FsbGluZyBpdD8gU3BlY2lmaWNhbGx5LCB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIGFsb25nIHdpdGggdGhpcyBzdGF0aWMgZnVuY3Rpb24/IExldCYjMzk7cyBzZWUuLi4gSSBrbm93IGBicGZfc2tfYXNzaWduYCBpcyBvbmUsIHNpbmNlIGl0JiMzOTtzIHVzZWQgaW4gdGhlIGNvZGUgd2hlcmUgdGhlIHN0YXRpYyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQuIEl0JiMzOTtzIHVzZWQgaW4gYEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgLi4uKWAuIFJpZ2h0LCBgQlBGX0NBTExfM2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHN5bWJvbCBuYW1lIGluIHRoZSBrZXJuZWwuIElzIGl0IGBfX19icGZfc2tfYXNzaWduYCBvciBwbGFpbiBgYnBmX3NrX2Fzc2lnbmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQlBGX0NBTExfYCBtYWNyb3MgZXhwYW5kIHRvIHRyYWNrIGhvdyB0aGlzIGdldHMgZGVmaW5lZC4gVGltZSB0byBlaXRoZXIgYGdyZXBwZXJgIHRoaXMgb3IgZGlnIGludG8gYHZtbGludXhgL2BrYWxsc3ltc2AgdG8gZmluZCBob3cgYEJQRl9DQUxMX2AgZnVuY3Rpb25zIGFyZSBuYW1lZC4gT3IgbWF5YmUgZXZlbiBjaGVjayBob3cgc3l6a2FsbGVyIHRhcmdldHMgdGhvc2Uga2luZHMgb2YgZnVuY3Rpb25zLiBJIGhhdmUgdG8gZmluZCB0aGUgcmVhbCBzeW1ib2wgdG8gcHJvY2VlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBCUEZfQ0FMTF8zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODEtI2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODI6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODMtI2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIEJQRiBvcGVyYXRpb24sIGBCUEZfQ0FMTF94YC4gUmlnaHQsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBkZWZpbml0aW9uIHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGhlYWRlciBmaWxlLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgY29uc3RydWN0ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGtlcm5lbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgbGlrZWx5IHNvbWUgbWFjcm8gbWFnaWMgZGVmaW5pbmcgdGhlIG9wY29kZSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29tbWVudHMgZXhwbGFpbmluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgdXNhZ2UgY29uc3RyYWludHMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBncm91bmR3b3JrIEkgbmVlZCB0byB3b3JrIHdpdGggdGhpcyBmdW5jdGlvbiBwcm9wZXJseS4gSSB3aWxsIG5vdyBleGFtaW5lIHRoaXMgY2xvc2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGV4cG9zZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2MDpcdCNkZWZpbmUgX19CUEZfREVDTF9SRUdTKHQsIGEpIHU2NCBhXG4gNjYxOlx0XG4gNjYyOlx0I2RlZmluZSBfX0JQRl9QQUQobilcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY2MzpcdFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxuIDY2NDpcdFx0XHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXG4gNjY1Olx0XG4gNjY2Olx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjY3Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjY4Olx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjY5Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjcwOlx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjcxOlx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjcyOlx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY3MzpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjc0Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY3NTpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY3NjpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDY3NzpcdFxuIDY3ODpcdCNkZWZpbmUgX19OT0FUVFJcbiA2Nzk6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjgwOlx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4MTpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODI6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjgzOlx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4NDpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2ODU6XHRcbiA2ODY6XHQjZGVmaW5lIE5PVFJBQ0VfQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIG5vdHJhY2UsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY4NzpcdFxuIDY4ODpcdCNkZWZpbmUgYnBmX2N0eF9yYW5nZShUWVBFLCBNRU1CRVIpXHRcdFx0XHRcdFx0XFxcbiA2ODk6XHRcdG9mZnNldG9mKFRZUEUsIE1FTUJFUikgLi4uIG9mZnNldG9mZW5kKFRZUEUsIE1FTUJFUikgLSAxXG4gNjkwOlx0I2RlZmluZSBicGZfY3R4X3JhbmdlX3RpbGwoVFlQRSwgTUVNQkVSMSwgTUVNQkVSMilcdFx0XHRcdFxcXG4gNjkxOlx0XHRvZmZzZXRvZihUWVBFLCBNRU1CRVIxKSAuLi4gb2Zmc2V0b2ZlbmQoVFlQRSwgTUVNQkVSMikgLSAxXG4gNjkyOlx0I2lmIEJJVFNfUEVSX0xPTkcgPT0gNjRcbiA2OTM6XHQjIGRlZmluZSBicGZfY3R4X3JhbmdlX3B0cihUWVBFLCBNRU1CRVIpXHRcdFx0XHRcdFxcXG4gNjk0Olx0XHRvZmZzZXRvZihUWVBFLCBNRU1CRVIpIC4uLiBvZmZzZXRvZmVuZChUWVBFLCBNRU1CRVIpIC0gMVxuIDY5NTpcdCNlbHNlXG4gNjk2Olx0IyBkZWZpbmUgYnBmX2N0eF9yYW5nZV9wdHIoVFlQRSwgTUVNQkVSKVx0XHRcdFx0XHRcXFxuIDY5NzpcdFx0b2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAuLi4gb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAmIzQzOyA4IC0gMVxuIDY5ODpcdCNlbmRpZiAvKiBCSVRTX1BFUl9MT05HID09IDY0ICovXG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBGdW5jdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluaW5nIHRoZSBhY3R1YWwgQlBGIGtmdW5jIHNpZ25hdHVyZSBhcyBgYXR0ciB1NjQgbmFtZSguLi4pYCB3aGljaCBpbnRlcm5hbGx5IGNhbGxzIGBfX19fIyNuYW1lYC4gUmlnaHQsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHN5bWJvbCBpbiBgdm1saW51eGAgY29tZXMgZnJvbSAtIGl0ICppcyogc2ltcGx5IHRoZSBgbmFtZWAgYXMgd2UmIzM5O2QgZXhwZWN0LiBGb3IgaW5zdGFuY2UsIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgYW5kIGBicGZfc2tfYXNzaWduYCBhcmUgbGl0ZXJhbGx5IHRoYXQuIEV2ZW4gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBpcyBhIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soLi4uKWAsIHNvLCBhZ2FpbiwgaXQmIzM5O3MganVzdCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBBbmQgdGhlIGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBgc3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soLi4uKWAuIEdvb2QgdG8gbm90ZSB0aGF0IHN0YXRpYyBmdW5jdGlvbnMsIHdoaWxlIHBvdGVudGlhbGx5IGlubGluZWQsIGNvdWxkIHN0aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHRyYWNpbmcuIEFuZCB0aG9zZSBlbnRyeSBwb2ludHMsIGBicGZfc2tfYXNzaWduYCwgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCwgYXJlIHRoZSBkaXJlY3QgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCEgU2VlbXMgbGlrZSB3ZSBzaG91bGQgYWxzbyBpbmNsdWRlIGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AuCgpOb3csIGJlZm9yZSBqdW1waW5nIHRvIGNvbmNsdXNpb25zLCBsZXQmIzM5O3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGNhbGwgbG9jYXRpb25zLiBIYW5nIG9uLCB3YWl0LCBiZXR0ZXIgeWV0LCBsZXQmIzM5O3MgdHJhY2Ugd2hlcmUgYGJwZl9za19hc3NpZ25gIGNhbiBiZSBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGZyb20gYSBwbGFjZSBsaWtlIGBza19sb29rdXBgIG9yIGBzb2Nrb3BzYCBvciBhbnl3aGVyZSBlbHNlPyBBaCwgaG9sZCBvbi4uLiB0aGUgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAgaGFzIHRoZSBkZWZpbml0aW9uOiBgbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylgLiBSaWdodCEgT2theSwgbGV0JiMzOTtzIGF2b2lkIHNwZW5kaW5nIGFsbCBkYXkgZG9pbmcgdGhpcyBtYW51YWxseSAtIGxldCYjMzk7cyBoaXQgYGdyZXBwZXJgIGFuZCBzZWUgYWxsIHRoZSBrZXJuZWwgZGVmaW5pdGlvbnMgb2YgYGJwZl9za19hc3NpZ25gLiBUaGF0IHNob3VsZCBzaG93IHRoZSByZWFsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0PTExPVdoZW4gaW52b2tlZCBCUEYgc2tfbG9va3VwIHByb2dyYW0gY2FuIHNlbGVjdCBhIHNvY2tldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGVcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDoxMjppbmNvbWluZyBwYWNrZXQgYnkgY2FsbGluZyB0aGUgYGBicGZfc2tfYXNzaWduKClgYCBCUEYgaGVscGVyIGZ1bmN0aW9uLlxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTEzLVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdD01OD1BIEJQRiBza19sb29rdXAgcHJvZ3JhbSBjYW4gYWxzbyBzZWxlY3QgYSBzb2NrZXQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0IGJ5XG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6NTk6Y2FsbGluZyBgYGJwZl9za19hc3NpZ24oKWBgIEJQRiBoZWxwZXIuIFR5cGljYWxseSwgdGhlIHByb2dyYW0gbG9va3MgdXAgYSBzb2NrZXRcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC02MC1pbiBhIG1hcCBob2xkaW5nIHNvY2tldHMsIHN1Y2ggYXMgYGBTT0NLTUFQYGAgb3IgYGBTT0NLSEFTSGBgLCBhbmQgcGFzc2VzIGFcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDo2MTpgYHN0cnVjdCBicGZfc29jayAqYGAgdG8gYGBicGZfc2tfYXNzaWduKClgYCBoZWxwZXIgdG8gcmVjb3JkIHRoZVxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTYyLXNlbGVjdGlvbi4gU2VsZWN0aW5nIGEgc29ja2V0IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSBwcm9ncmFtIGhhcyB0ZXJtaW5hdGVkXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0PTgxPXJlY2VpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIHNvY2tldCBsb29rdXAuIE5hbWVseTpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtODYtKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIEw0IHBvcnQsXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6ODc6KiB0aGUgc29ja2V0IHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWQgd2l0aCBgYGJwZl9za19hc3NpZ24oKWBgLlxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTg4LVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdD05MD1oZWFkZXIsIGFuZCBgYnBmLWhlbHBlcnMoNylcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC05MS1cdTAwM2NodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2JwZi1oZWxwZXJzLjcuaHRtbFx1MDAzZWBfIG1hbi1wYWdlIHNlY3Rpb25cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDo5Mjpmb3IgYGBicGZfc2tfYXNzaWduKClgYCBmb3IgZGV0YWlscy5cbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC05My1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NDYtICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NTQ3OiAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpzaywgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NDgtICpcdERlc2NyaXB0aW9uXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NzgtICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NTc5OiAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU4MC0gKlx0RGVzY3JpcHRpb25cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zNDc5PXN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zNDkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MzQ5NDpzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5NS1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzUyMD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1MS1cdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmM6MzU1MjpcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMzU1My1cdFx0c2tiX29ycGhhbihza2IpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgwMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjgwMTM6QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtODAxNC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODAyMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvZmlsdGVyLmM6ODAyMzpcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG5uZXQvY29yZS9maWx0ZXIuYy04MDI0LVx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxubmV0L2NvcmUvZmlsdGVyLmM6ODAzNjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19hc3NpZ25fcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo4MDM3Olx0LmZ1bmNcdFx0PSBicGZfc2tfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtODAzOC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjU1PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzcxLVx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYzo4NzcyOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzMtXHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHN0YW1wOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTE3PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19hZGRyX3NldF9zdW5fcGF0aChzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICpzYV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM3LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1Mzg6X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM5LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTYxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NjI6XHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjMtXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyODY0PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbi0tXG5zY3JpcHRzL2JwZl9kb2MucHk9NjkyPWNsYXNzIFByaW50ZXJIZWxwZXJzSGVhZGVyKFByaW50ZXIpOlxuLS1cbnNjcmlwdHMvYnBmX2RvYy5weS04MjEtICAgICAgICAmIzM5O2JwZl9nZXRfc29ja2V0X2Nvb2tpZSYjMzk7LFxuc2NyaXB0cy9icGZfZG9jLnB5OjgyMjogICAgICAgICYjMzk7YnBmX3NrX2Fzc2lnbiYjMzk7LFxuc2NyaXB0cy9icGZfZG9jLnB5LTgyMy0gICAgXVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU0Ni0gKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1NDc6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKnNrLCB1NjQgZmxhZ3MpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU0OC0gKlx0RGVzY3JpcHRpb25cbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU3OC0gKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1Nzk6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTgwLSAqXHREZXNjcmlwdGlvblxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg9NjM9c3RydWN0IGJwZl90Y3BfcmVxX2F0dHJzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaDo2NDpleHRlcm4gaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC02NS1cdFx0XHRcdCAgIHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opIF9fa3N5bTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYz02Nz1hc3NpZ25fc2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Fzc2lnbl9yZXVzZS5jLTc0LVx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYzo3NTpcdHJldCA9IGJwZl9za19hc3NpZ24oc2tiLCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYy03Ni1cdGJwZl9za19yZWxlYXNlKHNrKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM9NjY9c3RhdGljIGludCBoYW5kbGVfaXBfdGNwKHN0cnVjdCBldGhoZHIgKmV0aCwgc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xMzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM6MTM5Olx0XHRpZiAoYnBmX3NrX2Fzc2lnbihza2IsIHJlcV9zaywgMCkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNDAtXHRcdFx0TE9HKCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jLTE1Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYzoxNTc6XHRcdGlmIChicGZfc2tfYXNzaWduKHNrYiwgdHAsIDApKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmMtMTU4LVx0XHRcdExPRygpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM6MTY5Olx0aWYgKGJwZl9za19hc3NpZ24oc2tiLCBicGZfc2tjLCAwKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNzAtXHRcdExPRygpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTEwMj1oYW5kbGVfdWRwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgYm9vbCBpcHY0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jLTEyNi1hc3NpZ246XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxMjc6XHRyZXQgPSBicGZfc2tfYXNzaWduKHNrYiwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTI4LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTEzMz1oYW5kbGVfdGNwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgYm9vbCBpcHY0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jLTE2NS1hc3NpZ246XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxNjY6XHRyZXQgPSBicGZfc2tfYXNzaWduKHNrYiwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTY3LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTE3MT1TRUMoXCYjMzQ7dGNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxNzI6aW50IGJwZl9za19hc3NpZ25fdGVzdChzdHJ1Y3QgX19za19idWZmICpza2IpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYy0xNzMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTEwOT1pbnQgcmVkaXJfcG9ydChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTEyMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjEyMTpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xMjItXHRicGZfc2tfcmVsZWFzZShzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MTI4PWludCByZWRpcl9pcDQoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xNDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoxNDQ6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTQ1LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE1MT1pbnQgcmVkaXJfaXA2KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTcwOlx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIHNrLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTE3MS1cdGJwZl9za19yZWxlYXNlKHNrKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0xNzY9aW50IHNlbGVjdF9zb2NrX2Eoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xODQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoxODU6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTg2LVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE5MT1pbnQgc2VsZWN0X3NvY2tfYV9ub19yZXVzZXBvcnQoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyMDA6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIEJQRl9TS19MT09LVVBfRl9OT19SRVVTRVBPUlQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjAxLVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTIwNj1pbnQgc2VsZWN0X3NvY2tfYihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X21kICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjE0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjE1Oi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbigpIHJldHVybnMgLUVFWElTVCBpZiBzb2NrZXQgYWxyZWFkeSBzZWxlY3RlZC4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIxNi1TRUMoXCYjMzQ7c2tfbG9va3VwXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MjE3PWludCBza19hc3NpZ25fZWV4aXN0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjI1LVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjIyNjpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yMjctXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIzMy1cdFx0Z290byBvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyMzQ6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjM1LVx0aWYgKGVyciAhPSAtRUVYSVNUKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjQ3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjQ4Oi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbihCUEZfU0tfTE9PS1VQX0ZfUkVQTEFDRSkgY2FuIG92ZXJyaWRlIHNlbGVjdGlvbi4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI0OS1TRUMoXCYjMzQ7c2tfbG9va3VwXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MjUwPWludCBza19hc3NpZ25fcmVwbGFjZV9mbGFnKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjU4LVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjI1OTpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNjAtXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI2Ni1cdFx0Z290byBvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyNjc6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI2OC1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyODA6LyogQ2hlY2sgdGhhdCBicGZfc2tfYXNzaWduKHNrPU5VTEwpIGlzIGFjY2VwdGVkLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjgxLVNFQyhcJiMzNDtza19sb29rdXBcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0yODI9aW50IHNrX2Fzc2lnbl9udWxsKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjg4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6Mjg5Olx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjkwLVx0aWYgKGVycikge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5Ny1cdFx0Z290byBvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyOTg6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5OS1cdGlmIChlcnIpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMDUtXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzA2Olx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzA3LVx0aWYgKGVyciAhPSAtRUVYSVNUKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzA4LVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjMwOTpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBOVUxMLCBCUEZfU0tfTE9PS1VQX0ZfUkVQTEFDRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMTAtXHRpZiAoZXJyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzExLVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjMxMjpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzEzLVx0aWYgKGVycilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0zMjU9aW50IGFjY2Vzc19jdHhfc2soc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMzktXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzQwOlx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIHNrMSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zNDEtXHRpZiAoZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM1Mi1cdC8qIFJlc2V0IHNlbGVjdGlvbiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzUzOlx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM1NC1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzYyLVx0XHRnb3RvIG91dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjM2MzpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzazIsIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM2NC1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MzkxPWludCBjdHhfbmFycm93X2FjY2VzcyhzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTU2Ni1cdGlmIChzaykge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6NTY3Olx0XHRicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTY4LVx0XHRicGZfc2tfcmVsZWFzZShzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9NTc1PWludCBza19hc3NpZ25fZXNvY2tub3N1cHBvcnQoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy01ODQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzo1ODU6XHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTg2LVx0aWYgKGVyciAhPSAtRVNPQ0tUTk9TVVBQT1JUKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9NjI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHNlbGVjdF9zZXJ2ZXJfYShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTYzNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjYzNjpcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy02MzctXHRicGZfc2tfcmVsZWFzZShzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYz01MDc9c3RhdGljIGludCB0Y3BfaGFuZGxlX2FjayhzdHJ1Y3QgdGNwX3N5bmNvb2tpZSAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmMtNTQ5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYzo1NTA6XHRyZXQgPSBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhjdHgtXHUwMDNlc2tiLCBzaywgXHUwMDI2Y3R4LVx1MDAzZWF0dHJzLCBzaXplb2YoY3R4LVx1MDAzZWF0dHJzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTU1MS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTcyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgU2tfTG9va3VwIEFzc2lnbiBIb29rKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3NrX2Fzc2lnbmAgd2l0aGluIGBza19sb29rdXBgLCBhbmQgSSBqdXN0IHJlYWxpemVkIHRoYXQmIzM5O3MgYWN0dWFsbHkgYW4gYWxpYXMgb3IgYSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uLCBgYnBmX3NrX2xvb2t1cF9hc3NpZ25gLiBHb29kIGNhdGNoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgYW5kIHdoZXJlIHRoZSBrZXJuZWwgaXMgdXNpbmcgYEJQRl9GVU5DX3NrX2Fzc2lnbmAuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBzbyBsZXQmIzM5O3MgY2hlY2sgaXQuIEkgbmVlZCB0byBnZXQgYSBsaXN0IG9mIGl0cyB1c2FnZSBhcyBpdCBpcyBpbnRlZ3JhbCB0byB0aGUgd29ya2luZ3Mgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0ZVTkNfc2tfYXNzaWduJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD02MzgyPWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg3LVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYzODg6LyogQlBGX0ZVTkNfc2tfYXNzaWduIGZsYWdzIGluIGJwZl9za19sb29rdXAgY29udGV4dC4gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg5LWVudW0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzAtXHRcdHJldHVybiBcdTAwMjZicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NzcxOlx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYy04NzcyLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjA1MD1za19sb29rdXBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1NC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDU1Olx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1Ni1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD02MzgyPWVudW0ge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg3LVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYzODg6LyogQlBGX0ZVTkNfc2tfYXNzaWduIGZsYWdzIGluIGJwZl9za19sb29rdXAgY29udGV4dC4gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg5LWVudW0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg2NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgRnVuY3Rpb24gQXNzaWdubWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIHJldHVybmluZyBgYnBmX3NrX2Fzc2lnbl9wcm90b2AsIHdoaWNoIGluIHR1cm4gcG9pbnRzIHRvIGBicGZfc2tfYXNzaWduYC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgdGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGFzc2lnbmluZyBhIHNvY2tldCwgYHNrYCwgdG8gc29tZXRoaW5nLiBGdXJ0aGVybW9yZSwgYHNrX2xvb2t1cF9mdW5jX3Byb3RvYCByZXR1cm5zIGBicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90b2AsIHNvIHdlIGFyZSBsaWtlbHkgbG9va2luZyB1cCBhbmQgdGhlbiBhc3NpZ25pbmcvbW9kaWZ5aW5nIHNvbWV0aGluZyBoZXJlLiBBbHNvIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGFsc28gcmV0dXJucyBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG9gLCB3aGljaCBpbmRpY2F0ZXMgd2UmIzM5O3JlIGNhcGFibGUgb2YgY2hhbmdpbmcgdGhlIHByb3RvY29sIG9uIGFuIGBza2JgLgoKTm93IHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nOyBgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2tgIHNwZWNpZmljYWxseSByZWdpc3RlcnMgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCAqZm9yKiBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVENQIHJlcXVlc3Qgc29ja2V0cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sIChUQykgdXNpbmcgQlBGLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGF0JiMzOTtzIGludGVyZXN0aW5nLgoKTm93LCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGNvbmZpZ3MgdGllZCB0byBUQyBCUEYsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIGFuZCB0aGUgYEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgLi4uKWAgY2FsbCBpdHNlbGYuIEdpdmVuIHRoZSBUQyBjb250ZXh0LCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgLCBidXQgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBpbml0L0tjb25maWdgIGp1c3QgaW4gY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzAxLVxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxubmV0L3NjaGVkL0tjb25maWctNzAzLVx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIE5ldHdvcmsgU2NoZWR1bGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9ucyBmcm9tIDcwMCB0byA3MjAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgYXZhaWxhYmxlIG5ldHdvcmsgc2NoZWR1bGVyIGZlYXR1cmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGJ1aWxkIGZsYWdzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHJhbmdlIHRvIGNvdmVyIGEgc3BlY2lmaWMgc2V0IG9mIHNjaGVkdWxlcnMsIHBlcmhhcHMgYSByZWNlbnQgYWRkaXRpb24gb3IgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZ3JvdXAuIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4gNzE1Olx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXG4gNzE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFmZmljIFBvbGljaW5nXCYjMzQ7XG4gNzE3Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gNzE4Olx0XHRoZWxwXG4gNzE5Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZG8gdHJhZmZpYyBwb2xpY2luZywgaS5lLiBzdHJpY3RcbiA3MjA6XHRcdCAgYmFuZHdpZHRoIGxpbWl0aW5nLiBUaGlzIGFjdGlvbiByZXBsYWNlcyB0aGUgZXhpc3RpbmcgcG9saWNpbmdcbiA3MjE6XHRcdCAgbW9kdWxlLlxuIDcyMjpcdFxuIDcyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcG9saWNlLlxuIDcyNTpcdFxuIDcyNjpcdGNvbmZpZyBORVRfQUNUX0dBQ1RcbiA3Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgYWN0aW9uc1wmIzM0O1xuIDcyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDcyOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gbWFrZSBzdXJlIHRob3NlIEJQRiBvcHRpb25zIGFyZSBzZXQgY29ycmVjdGx5LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBib3RoIGBORVRfQ0xTX0JQRmAgYW5kIGBORVRfQUNUX0JQRmAgYXJlIGVuYWJsZWQuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHRoZSBpbmZyYXN0cnVjdHVyZSBJJiMzOTttIHdvcmtpbmcgb24sIHNvIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGFyZSBib3RoIHNldCBhbmQgcmVhZHkgdG8gZ28uIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGV5JiMzOTtyZSBub3QgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX0JQRnxjb25maWcgTkVUX0FDVF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTU1MD1jb25maWcgTkVUX0NMU19DR1JPVVBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1NjI6Y29uZmlnIE5FVF9DTFNfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXHR0cmlzdGF0ZSBcJiMzNDtCUEYtYmFzZWQgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTgzMD1jb25maWcgTkVUX0FDVF9WTEFOXG4tLVxubmV0L3NjaGVkL0tjb25maWctODQwLVxubmV0L3NjaGVkL0tjb25maWc6ODQxOmNvbmZpZyBORVRfQUNUX0JQRlxubmV0L3NjaGVkL0tjb25maWctODQyLVx0dHJpc3RhdGUgXCYjMzQ7QlBGIGJhc2VkIGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gd2UgbmVlZCB0byBhZGQgYEJQRl9TWVNDQUxMYCB0byB0aGUgY2hlY2tsaXN0LiBJdCYjMzk7cyBhIGtleSBwaWVjZSB0byB2ZXJpZnkuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgd2FudCB0byBxdWlja2x5IHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRob3NlIGNydWNpYWwgZnVuY3Rpb24gcHJvdG90eXBlczogYHRjX2Nsc19hY3RfZnVuY19wcm90b2AgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AuIFByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhvc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgd2lsbCBkaXJlY3RseSBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTQ1NjU9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1NjYtXG5uZXQvY29yZS9maWx0ZXIuYzo0NTY3OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1Njgtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gQlBGIFByb2dyYW0gTG9hZGluZyoqCgpPa2F5LCBzbyBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0byBhY3R1YWxseSAqbG9hZCogQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIG9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIEkgbmVlZCBgQlBGX1NZU0NBTExgLCBhbmQgZWl0aGVyIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JQRmAsIG9yIGBORVRfQUNUX0JQRmAsIHJpZ2h0PyBPYnZpb3VzIHRoYXQgYENPTkZJR19ORVRgIGlzIHJlbGV2YW50IGhlcmUgLSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29yay4gQnV0IHdoYXQgYWJvdXQgYENPTkZJR19JTkVUYD8gT3IgYENPTkZJR19JUFY2YCwgcG90ZW50aWFsbHk/CgpMb29raW5nIGF0IGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AsIEkgc2VlIHRoYXQgaXQgdXNlcyBgaW5ldF9yZXFzayhzaylgIGFuZCBgaXB2Nl9vbmx5X3NvY2soc2spYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCBJUHY0IGFuZCBJUHY2IG1pZ2h0IGJlIGF0IHBsYXkgaGVyZS4gTGV0IG1lIGNvbmZpcm0gaWYgZWl0aGVyIGBDT05GSUdfSU5FVGAgb3IgYENPTkZJR19JUFY2YCBhY3R1YWxseSBtYXR0ZXJzLiBUaGUgY2hlY2tzIGFyZSB3aXRoaW4gYGluZXRfcmVxc2soc2spLSZndDtyc2tfb3BzLSZndDtmYW1pbHkgPT0gZmFtaWx5O2AgYW5kIGBpcHY2X29ubHlfc29jayhzaylgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBpcyB0aGUgY29kZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGd1YXJkZWQgYnksIG9yIGRvZXMgaXQgb3RoZXJ3aXNlIGRlcGVuZCBvbiwgYENPTkZJR19JTkVUYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBmaWxlIGl0c2VsZiBmb3IgZGlyZWN0IHJlZmVyZW5jZXMgdG8gYENPTkZJR19JTkVUYCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0yMzEzPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxubmV0L2NvcmUvZmlsdGVyLmM6MjMyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTIzMjItc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yNDI0PXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNDI5LX1cbm5ldC9jb3JlL2ZpbHRlci5jOjI0MzA6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy0yNDMxLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU4MDg9c3RhdGljIGludCBfX2JwZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01ODE1LVx0XHRyZXR1cm4gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTgxNjpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXG5uZXQvY29yZS9maWx0ZXIuYy01ODE3LVx0XHRyZXR1cm4gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTgxOS1cdFx0cmV0dXJuIHNvbF9pcHY2X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIwOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXG5uZXQvY29yZS9maWx0ZXIuYy01ODIxLVx0XHRyZXR1cm4gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU4Mzk9c3RhdGljIGludCBfX2JwZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01ODUwLVx0XHRlcnIgPSBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU4NTE6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU4NTItXHRcdGVyciA9IHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTg1MzpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXG5uZXQvY29yZS9maWx0ZXIuYy01ODU0LVx0XHRlcnIgPSBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYxNjc9QlBGX0NBTExfNShicGZfc29ja19vcHNfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYxNzItXG5uZXQvY29yZS9maWx0ZXIuYzo2MTczOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmMtNjE3NC1cdCAgICBvcHRuYW1lIFx1MDAzZT0gVENQX0JQRl9TWU4gXHUwMDI2XHUwMDI2IG9wdG5hbWUgXHUwMDNjPSBUQ1BfQlBGX1NZTl9NQUMpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjA5PUJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTctXG5uZXQvY29yZS9maWx0ZXIuYzo2MjE4Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCAhc2tfZnVsbHNvY2soc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtNjIxOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIzND1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIzNi17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjM3OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzOC1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjYxLVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6NjI2MjojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTYyNjMtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjMzMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzMzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy02MzMyLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYzNjE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjM4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02MzgyLXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDM9QlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjcxMi1cdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjcxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MTQtXHRjYXNlIEFGX0lORVQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjczNz1CUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY3NTYtXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY3NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02NzU4LVx0Y2FzZSBBRl9JTkVUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxODg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTk3LVxubmV0L2NvcmUvZmlsdGVyLmM6NzE5ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTktc3RhdGljIHN0cnVjdCBzb2NrICpza19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2Nl9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDE4LVxubmV0L2NvcmUvZmlsdGVyLmM6ODQxOTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTg0MjAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ5Nz1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NTE5LVx0XHRyZXR1cm4gXHUwMDI2YnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODUyMDojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjEtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODUyOC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NTI5OiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xubmV0L2NvcmUvZmlsdGVyLmMtODUzMC1cdGNhc2UgQlBGX0ZVTkNfc2tfc3RvcmFnZV9nZXQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODYwNj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NjMyLSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMzojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzQtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODc1MS0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NTI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NzUzLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg3OTI9eGRwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODgyMC1cdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODgyMTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjItXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODg2Nz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4OTUtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X25ldG5zX2Nvb2tpZV9zb2NrX29wc19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4OTY6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04ODk3LVx0Y2FzZSBCUEZfRlVOQ19sb2FkX2hkcl9vcHQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODkwNC1cdFx0cmV0dXJuIFx1MDAyNmJwZl90Y3Bfc29ja19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg5MDU6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy04OTA2LVx0ZGVmYXVsdDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04OTQ5PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg5NzMtXHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NzQ6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04OTc1LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNjg5PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTczMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNzMyOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTE3MzMtc3RhdGljIHZvaWQgYnBmX2luaXRfcmV1c2Vwb3J0X2tlcm4oc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICpyZXVzZV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjExPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIxNzojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjE4LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjY4PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzAtXHQvKiBCVEYgdHlwZXMgZm9yIHRjcF90aW1ld2FpdF9zb2NrIGFuZCBpbmV0X3RpbWV3YWl0X3NvY2sgYXJlIG5vdFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNzE6XHQgKiBnZW5lcmF0ZWQgaWYgQ09ORklHX0lORVQ9bi4gVHJpZ2dlciBhbiBleHBsaWNpdCBnZW5lcmF0aW9uIGhlcmUuXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3Mi1cdCAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNzY6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3Ny1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI5Nz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI5OC17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjI5OTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMzAwLVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcF9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNzcwPV9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc4My1cdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjc4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzg1LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBGdW5jdGlvbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLCB3aGljaCBmcm9tIG15IG5vdGVzLCBzaG91bGQgYmUgYXJvdW5kIGxpbmUgMTI1MzggaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIHNlZW1zIG5ldHdvcmtpbmctcmVsYXRlZCwgSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGlmIGl0cyB1c2UgaXMgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIGBDT05GSUdfSU5FVGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGhlcmUuIFNvLCBsZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIGJsb2NrIGVuY29tcGFzc2luZyBsaW5lcyAxMjUzMCB0aHJvdWdoIDEyNTQ1IG9mIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBxdWlja2x5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgc29tZXRoaW5nIGxpa2UgYW4gYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgbWF5YmUgZXZlbiBhbiBgI2lmYCB0aGF0IG1pZ2h0IGJlIGdhdGluZyB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBob3cgaXQgcmVsYXRlcyB0byBnZW5lcmFsIGludGVybmV0d29ya2luZyBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTMwOlx0XG4xMjUzMTpcdFx0dW4gPSAoc3RydWN0IHNvY2thZGRyX3VuICopc2Ffa2Vybi1cdTAwM2V1YWRkcjtcbjEyNTMyOlx0XHRtZW1jcHkodW4tXHUwMDNlc3VuX3BhdGgsIHN1bl9wYXRoLCBzdW5fcGF0aF9fc3opO1xuMTI1MzM6XHRcdHNhX2tlcm4tXHUwMDNldWFkZHJsZW4gPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSAmIzQzOyBzdW5fcGF0aF9fc3o7XG4xMjUzNDpcdFxuMTI1MzU6XHRcdHJldHVybiAwO1xuMTI1MzY6XHR9XG4xMjUzNzpcdFxuMTI1Mzg6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxuMTI1Mzk6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl90Y3BfcmVxX2F0dHJzICphdHRycywgaW50IGF0dHJzX19zeilcbjEyNTQwOlx0e1xuMTI1NDE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpXG4xMjU0MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XG4xMjU0MzpcdFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcztcbjEyNTQ0Olx0XHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XG4xMjU0NTpcdFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7XG4xMjU0NjpcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xuMTI1NDc6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjEyNTQ4Olx0XHRfX3UxNiBtaW5fbXNzO1xuMTI1NDk6XHRcdHUzMiB0c29mZiA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVENQL0lQIFN0YWNrIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZS4gTXkgZXllcyBpbW1lZGlhdGVseSBqdW1wIHRvIGxpbmUgMTI1NDE6IGAjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpYC4gT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jaywgYW5kIHRoaXMgcGFydGljdWxhciBvbmUgaXMgbGlrZWx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBTWU4gY29va2llcyBiYXNlZCBvbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgQ09ORklHX1NZTl9DT09LSUVTYCBpcyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb24gaGVyZSwgc28gSSBjYW4gY2hlY2sgaWYgU1lOIGNvb2tpZXMgYXJlIGVuYWJsZWQgb3Igbm90LgoKTm93LCBsZXQmIzM5O3MgZXhwYW5kIG15IHZpZXcuIEkmIzM5O2xsIGNoZWNrIHdoYXQgdGhlIGNvZGUgZG9lczogbGluZXMgMTI1OTUtMTI2MjAsIHByb2JhYmx5IGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBhc3BlY3QuIEkgY2FuIHNlZSB0aGF0IHRoaXMgc2VnbWVudCBpcyBjcnVjaWFsIGZvciBoYW5kbGluZyBTWU4gZmxvb2QgcHJvdGVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgU1lOIGNvb2tpZXMgYmVpbmcgZW5hYmxlZC4gSXQgaXMgbGlrZWx5IGNvbmZpZ3VyaW5nIGhvdyB0aGUga2VybmVsIHJlc3BvbmRzIHRvIGNvbm5lY3Rpb24gYXR0ZW1wdHMsIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBTWU4gY29va2llIG1lY2hhbmlzbSBpdHNlbGYuIFByb2JhYmx5IHNldHRpbmcgdXAgdGhlIHBhcmFtZXRlcnMsIGRldGVybWluaW5nIHRoZSBmbG93LCB0aGUgY29uZGl0aW9ucywgYW5kIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24sIHRvbywgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcG9ydGlvbiBpcyBxdWl0ZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AvSVAgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwMDpcdFx0XHRpZiAoIVJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3RpbWVzdGFtcHMpKVxuMTI2MDE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNjAyOlx0XG4xMjYwMzpcdFx0XHR0c29mZiA9IGF0dHJzLVx1MDAzZXJjdl90c2VjciAtIHRjcF9uc190b190cyhhdHRycy1cdTAwM2V1c2VjX3RzX29rLCB0Y3BfY2xvY2tfbnMoKSk7XG4xMjYwNDpcdFx0fVxuMTI2MDU6XHRcbjEyNjA2Olx0XHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcbjEyNjA3Olx0XHRpZiAoIXJlcSlcbjEyNjA4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTI2MDk6XHRcbjEyNjEwOlx0XHRpcmVxID0gaW5ldF9yc2socmVxKTtcbjEyNjExOlx0XHR0cmVxID0gdGNwX3JzayhyZXEpO1xuMTI2MTI6XHRcbjEyNjEzOlx0XHRyZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gc2s7XG4xMjYxNDpcdFx0cmVxLVx1MDAzZXN5bmNvb2tpZSA9IDE7XG4xMjYxNTpcdFx0cmVxLVx1MDAzZW1zcyA9IGF0dHJzLVx1MDAzZW1zcztcbjEyNjE2Olx0XHRyZXEtXHUwMDNldHNfcmVjZW50ID0gYXR0cnMtXHUwMDNlcmN2X3RzdmFsO1xuMTI2MTc6XHRcbjEyNjE4Olx0XHRpcmVxLVx1MDAzZXNuZF93c2NhbGUgPSBhdHRycy1cdTAwM2VzbmRfd3NjYWxlO1xuMTI2MTk6XHRcdGlyZXEtXHUwMDNlcmN2X3dzY2FsZSA9IGF0dHJzLVx1MDAzZXJjdl93c2NhbGU7XG4xMjYyMDpcdFx0aXJlcS1cdTAwM2V0c3RhbXBfb2tcdD0gISFhdHRycy1cdTAwM2V0c3RhbXBfb2s7XG4xMjYyMTpcdFx0aXJlcS1cdTAwM2VzYWNrX29rID0gISFhdHRycy1cdTAwM2VzYWNrX29rO1xuMTI2MjI6XHRcdGlyZXEtXHUwMDNld3NjYWxlX29rID0gISFhdHRycy1cdTAwM2V3c2NhbGVfb2s7XG4xMjYyMzpcdFx0aXJlcS1cdTAwM2VlY25fb2sgPSAhIWF0dHJzLVx1MDAzZWVjbl9vaztcbjEyNjI0Olx0XG4xMjYyNTpcdFx0dHJlcS1cdTAwM2VyZXFfdXNlY190cyA9ICEhYXR0cnMtXHUwMDNldXNlY190c19vaztcbjEyNjI2Olx0XHR0cmVxLVx1MDAzZXRzX29mZiA9IHRzb2ZmO1xuMTI2Mjc6XHRcbjEyNjI4Olx0XHRza2Jfb3JwaGFuKHNrYik7XG4xMjYyOTpcdFx0c2tiLVx1MDAzZXNrID0gcmVxX3RvX3NrKHJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uICoqSW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFNZTiBjb29raWVzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGV5JiMzOTtyZSAqbm90KiBlbmFibGVkLioqIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHNvIHdoYXQgaGFwcGVucyBpZiBgQ09ORklHX1NZTl9DT09LSUVTYCBpc24mIzM5O3Qgc2V0PyBXaGF0JiMzOTtzIHRoZSBjb2RlIHBhdGggdGhlbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWx0ZXJuYXRpdmUgYmVoYXZpb3IuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgMTI2MzAtMTI2NDUuIFRoYXQgc2hvdWxkIGJlIHRoZSByZWdpb24gaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBjb25kaXRpb25hbCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGFsdGVybmF0aXZlIGhhbmRsaW5nIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGUgbWFjcm8gbm90IGJlaW5nIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYzMDpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xuMTI2MzE6XHRcbjEyNjMyOlx0XHRyZXR1cm4gMDtcbjEyNjMzOlx0I2Vsc2VcbjEyNjM0Olx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjYzNTpcdCNlbmRpZlxuMTI2MzY6XHR9XG4xMjYzNzpcdFxuMTI2Mzg6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXAoc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpza29wcyxcbjEyNjM5Olx0XHRcdFx0XHRcdCAgICAgIHU2NCBmbGFncylcbjEyNjQwOlx0e1xuMTI2NDE6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xMjY0MjpcdFxuMTI2NDM6XHRcdGlmIChza29wcy1cdTAwM2VvcCAhPSBCUEZfU09DS19PUFNfVFNUQU1QX1NFTkRNU0dfQ0IpXG4xMjY0NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjY0NTpcdFxuMTI2NDY6XHRcdGlmIChmbGFncylcbjEyNjQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI2NDg6XHRcbjEyNjQ5Olx0XHRza2IgPSBza29wcy1cdTAwM2Vza2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODkyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgYW5kIFNZTiBDb29raWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byB0cmFjayBoZXJlLiBGaXJzdCwgaWYgYENPTkZJR19TWU5fQ09PS0lFU2AgaXMgKm5vdCogZW5hYmxlZCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBmbGF0IG91dCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdG9yIG9mIGEgZGVwZW5kZW5jeS4gSSBub3RpY2VkIHRoaXMgb24gbGluZSAxMjU0MSwgdGhlIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpYCBjaGVjayBpcyBsaXRlcmFsbHkgKnJpZ2h0IGFmdGVyKiB0aGUgZnVuY3Rpb24mIzM5O3MgZW50cnkgcG9pbnQhIE1lYW5pbmcgdGhhdCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgIHdpdGhpbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIGlzIG9ubHkgZ29pbmcgdG8gYmUgaGl0IGlmIFNZTiBjb29raWVzICphcmUqIGVuYWJsZWQuCgpOb3csIEkmIzM5O20gYWxzbyBzZWVpbmcgcmVmZXJlbmNlcyB0byBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9CUEZgLCBhbmQgYE5FVF9DTFNfQlBGYC4gVGhpcyBtYWtlcyBtZSB0aGluayBhYm91dCBob3cgQlBGIGtmdW5jcyBhcmUgbWFkZSBhdmFpbGFibGUgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFdoYXQgZW5hYmxlcyAqdGhhdCogZnVuY3Rpb25hbGl0eT8gTmF0dXJhbGx5LCBpdCYjMzk7cyBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19ORVRgLgoKSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgcmVmcmVzaCBteSBtZW1vcnkgYWJvdXQgYENPTkZJR19TWU5fQ09PS0lFU2AgaW4gdGhlIEtjb25maWcgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNZTl9DT09LSUVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTI1OT1jb25maWcgSVBfUElNU01fVjJcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTI2Ny1cbm5ldC9pcHY0L0tjb25maWc6MjY4OmNvbmZpZyBTWU5fQ09PS0lFU1xubmV0L2lwdjQvS2NvbmZpZy0yNjktXHRib29sIFwmIzM0O0lQOiBUQ1Agc3luY29va2llIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIElQdjQgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIElQdjQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGp1bXAgb3ZlciBhcm91bmQgbGluZSAyNjguIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBzdGFydCBkaWdnaW5nIHdoZW4gSSYjMzk7bSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVnYXJkaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIHN3aXRjaGVzLiBUaGlzIGlzIHdoZXJlIEkgb2Z0ZW4gZmluZCB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgSVB2NC1yZWxhdGVkIGZlYXR1cmVzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZCwgb3IgaWYgSSBhbSBqdXN0IHRyeWluZyB0byBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLiBUaW1lIHRvIGdldCBjb2RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjY1Olx0XHQgIGdhdGVkLTUpLiBUaGlzIHJvdXRpbmcgcHJvdG9jb2wgaXMgbm90IHVzZWQgd2lkZWx5LCBzbyBzYXkgTiB1bmxlc3NcbiAyNjY6XHRcdCAgeW91IHdhbnQgdG8gcGxheSB3aXRoIGl0LlxuIDI2NzpcdFxuIDI2ODpcdGNvbmZpZyBTWU5fQ09PS0lFU1xuIDI2OTpcdFx0Ym9vbCBcJiMzNDtJUDogVENQIHN5bmNvb2tpZSBzdXBwb3J0XCYjMzQ7XG4gMjcwOlx0XHRoZWxwXG4gMjcxOlx0XHQgIE5vcm1hbCBUQ1AvSVAgbmV0d29ya2luZyBpcyBvcGVuIHRvIGFuIGF0dGFjayBrbm93biBhcyBcJiMzNDtTWU5cbiAyNzI6XHRcdCAgZmxvb2RpbmdcJiMzNDsuIFRoaXMgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrIHByZXZlbnRzIGxlZ2l0aW1hdGUgcmVtb3RlXG4gMjczOlx0XHQgIHVzZXJzIGZyb20gYmVpbmcgYWJsZSB0byBjb25uZWN0IHRvIHlvdXIgY29tcHV0ZXIgZHVyaW5nIGFuIG9uZ29pbmdcbiAyNzQ6XHRcdCAgYXR0YWNrIGFuZCByZXF1aXJlcyB2ZXJ5IGxpdHRsZSB3b3JrIGZyb20gdGhlIGF0dGFja2VyLCB3aG8gY2FuXG4gMjc1Olx0XHQgIG9wZXJhdGUgZnJvbSBhbnl3aGVyZSBvbiB0aGUgSW50ZXJuZXQuXG4gMjc2Olx0XG4gMjc3Olx0XHQgIFNZTiBjb29raWVzIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoaXMgdHlwZSBvZiBhdHRhY2suIElmIHlvdVxuIDI3ODpcdFx0ICBzYXkgWSBoZXJlLCB0aGUgVENQL0lQIHN0YWNrIHdpbGwgdXNlIGEgY3J5cHRvZ3JhcGhpYyBjaGFsbGVuZ2VcbiAyNzk6XHRcdCAgcHJvdG9jb2wga25vd24gYXMgXCYjMzQ7U1lOIGNvb2tpZXNcJiMzNDsgdG8gZW5hYmxlIGxlZ2l0aW1hdGUgdXNlcnMgdG9cbiAyODA6XHRcdCAgY29udGludWUgdG8gY29ubmVjdCwgZXZlbiB3aGVuIHlvdXIgbWFjaGluZSBpcyB1bmRlciBhdHRhY2suIFRoZXJlXG4gMjgxOlx0XHQgIGlzIG5vIG5lZWQgZm9yIHRoZSBsZWdpdGltYXRlIHVzZXJzIHRvIGNoYW5nZSB0aGVpciBUQ1AvSVAgc29mdHdhcmU7XG4gMjgyOlx0XHQgIFNZTiBjb29raWVzIHdvcmsgdHJhbnNwYXJlbnRseSB0byB0aGVtLiBGb3IgdGVjaG5pY2FsIGluZm9ybWF0aW9uXG4gMjgzOlx0XHQgIGFib3V0IFNZTiBjb29raWVzLCBjaGVjayBvdXQgXHUwMDNjaHR0cHM6Ly9jci55cC50by9zeW5jb29raWVzLmh0bWxcdTAwM2UuXG4gMjg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBJIG5lZWQuIGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzIGRlZmluaXRlbHkgaW4gYG5ldC9pcHY0L0tjb25maWdgLCBhbmQgaXQgZGVwZW5kcyBvbiBgQ09ORklHX0lORVRgLCBhcyBleHBlY3RlZC4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgYENPTkZJR19JUFY2YCBmb3IgSVB2NiBwYWNrZXQgYW5kIHNvY2tldCBzdXBwb3J0LiBUaGUgY29kZSBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIHBhY2tldCYjMzk7cyBwcm90b2NvbCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzIGZhbWlseSwgYW5kIHRoZXJlJiMzOTtzIGEgY29tcGF0aWJpbGl0eSBjaGVjayB0byBwcmV2ZW50IGlzc3VlcyBsaWtlIGFuIGBBRl9JTkVUYCBzb2NrZXQgcmVjZWl2aW5nIGFuIElQdjYgcGFja2V0LCByZXR1cm5pbmcgYC1FQUZOT1NVUFBPUlRgLiBTbywgdGhhdCBtZWFucyBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX05FVGAsIGBDT05GSUdfSU5FVGAsIGFuZCBgQ09ORklHX0lQVjZgLgoKTm93LCBtb3ZpbmcgYmV5b25kIGJhc2ljIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIGludG8gVEMgQlBGLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19ORVRfQ0xTX0FDVGAsIGFuZCBgQ09ORklHX1NZTl9DT09LSUVTYCBhcyB0aGVzZSBzZWVtIGltcG9ydGFudC4gV2FpdCwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfQUNUX0JQRmAgb3IgYENPTkZJR19ORVRfQ0xTX0JQRmAuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0aGUgQlBGLWJhc2VkIGNsYXNzaWZpZXIgYW5kIGFjdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyB0byBsb2FkIGFuZCBydW4gVEMgQlBGIGZvciBib3RoIHRoZSBjbGFzc2lmaWVyIGFuZCBhY3Rpb24uIExvb2tpbmcgZnVydGhlciwgaXQgc2VlbXMgYENPTkZJR19ORVRfQ0xTX0JQRmAgaXMgdGhlIEJQRi1iYXNlZCBjbGFzc2lmaWVyIChgY2xzX2JwZmApLCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgVEMgQlBGIChgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgKS4gQW5kLCBgQ09ORklHX05FVF9BQ1RfQlBGYCBpcyB0aGUgQlBGLWJhc2VkIGFjdGlvbiAoYGFjdF9icGZgKSwgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAuIFJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBORVRfQ0xTX0JQRmAgaW4gYG5ldC9zY2hlZC9LY29uZmlnYCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTYxLVxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxubmV0L3NjaGVkL0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUgZm9yIE5ldHdvcmsgU2NoZWR1bGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBpcyBjb25maWd1cmVkLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA1NjAgdGhyb3VnaCA1ODAgb2YgYG5ldC9zY2hlZC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBhcmUgbGlrZWx5IHRvIGJlLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkLCBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgcXVldWVpbmcgZGlzY2lwbGluZXMsIHRyYWZmaWMgc2hhcGluZywgYW5kIHBlcmhhcHMgc29tZSBwcmlvcml0aXphdGlvbiBzZXR0aW5ncy4gVGhlIHJlYWwgZ29hbCBpcyB0byByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgb3JnYW5pemVkIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgbGF0ZXIgY2hhbmdlcywgZXNwZWNpYWxseSBpZiBJIHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IHNjaGVkdWxlciBvciB0d2VhayBhbiBleGlzdGluZyBvbmUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkLCBhcyBpcyB0eXBpY2FsIGZvciBLY29uZmlnIGZpbGVzLCBidXQgZXZlbiBpZiBpdCBpc24mIzM5O3QsIEkgc2hvdWxkIGJlIGFibGUgdG8gcGFyc2UgdGhlIGludGVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfY2dyb3VwLlxuIDU2MTpcdFxuIDU2MjpcdGNvbmZpZyBORVRfQ0xTX0JQRlxuIDU2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbiA1NjQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTY1Olx0XHRoZWxwXG4gNTY2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cbiA1Njc6XHRcdCAgcHJvZ3JhbW1hYmxlIEJQRiAoSklUJiMzOTtlZCkgZmlsdGVycyBhcyBhbiBhbHRlcm5hdGl2ZSB0byBlbWF0Y2hlcy5cbiA1Njg6XHRcbiA1Njk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuIDU3MDpcdFx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cbiA1NzE6XHRcbiA1NzI6XHRjb25maWcgTkVUX0NMU19GTE9XRVJcbiA1NzM6XHRcdHRyaXN0YXRlIFwmIzM0O0Zsb3dlciBjbGFzc2lmaWVyXCYjMzQ7XG4gNTc0Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDU3NTpcdFx0aGVscFxuIDU3NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXG4gNTc3Olx0XHQgIGEgY29uZmlndXJhYmxlIGNvbWJpbmF0aW9uIG9mIHBhY2tldCBrZXlzIGFuZCBtYXNrcy5cbiA1Nzg6XHRcbiA1Nzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuIDU4MDpcdFx0ICBiZSBjYWxsZWQgY2xzX2Zsb3dlci5cbiA1ODE6XHRcbiA1ODI6XHRjb25maWcgTkVUX0NMU19NQVRDSEFMTFxuIDU4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWF0Y2gtYWxsIGNsYXNzaWZpZXJcJiMzNDtcbiA1ODQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgZUJQRiBDbGFzc2lmaWVyIGFuZCBBY3Rpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGNsc19icGZgIGFuZCBgYWN0X2JwZmAgYXJlIGVuYWJsZWQgYW5kIGl0IHNlZW1zIGxpa2UgYE5FVF9DTFNfQlBGYCBhbmQgYE5FVF9BQ1RfQlBGYCBhcmUgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgdGhlbS4gQnV0IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgYnJvYWRlciBwaWN0dXJlLCBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBpbnZlc3RpZ2F0ZSBpZiBgQ09ORklHX05FVF9TQ0hFRGAgaGFzIHNvbWUgcmVsZXZhbmNlIGhlcmUsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGRlcGVuZGVuY3kgaW4gcGxheS4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9DTFNfQlBGYCwgaW4gdHVybiwgZGVwZW5kIG9uIGBORVRfU0NIRURgLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBvcHRpb25zIHdpbGwgY2xhcmlmeSBob3cgdGhlIGVCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMzkKCQkJCQkJCW91dHB1dDogMjM4CgkJCQkJCQl0aG91Z2h0czogMjM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgU29ja2V0IEFzc2lnbm1lbnQgYW5kIFByb3RvY29sIFRyYW5zbGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLCBhbmQgbW9kaWZpZXMgYSBmZXcgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCwgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIHRvIGNoZWNrIGZvciBhZGRyZXNzIGZhbWlseSBjb21wYXRpYmlsaXR5IHdoZW4gYXNzaWduaW5nIG9yIHJlLWFzc2lnbmluZyBzb2NrZXRzIHRvIHNrX2J1ZmZzLiBXZSYjMzk7cmUgdGFsa2luZyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgaGVyZSwgc28gaXQmIzM5O3MgaW1wb3J0YW50IHRvIGdldCBpdCByaWdodC4KClNwZWNpZmljYWxseSwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCB2ZXJpZmllcyBpZiBhIHNvY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSAoZS5nLiwgSVB2NCBvciBJUHY2KSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIG9mIGFuIGluY29taW5nIHBhY2tldC4gSWYgdGhlIGZhbWlseSBjaGVjayBmYWlscywgYGJwZl9za19hc3NpZ25gIGFuZCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIG5vdyByZXR1cm4gYC1FQUZOT1NVUFBPUlRgLiBUaGUgcHJvdG9jb2wgdHJhbnNsYXRpb24gY2FzZSB3aXRoIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaXMgYWxzbyBzaWduaWZpY2FudDsgaXQgaW52YWxpZGF0ZXMgYW55IHByZS1mZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50IGlmIHRoZSB0cmFuc2xhdGlvbiByZXN1bHRzIGluIGFuIGluY29tcGF0aWJsZSBhZGRyZXNzIGZhbWlseSBhbmQgb3JwaGFucyB0aGUgc2tiLCB3aGljaCBpcyBleHBlY3RlZCBiZWhhdmlvdXIuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBtb2RpZnkgQlBGIG5ldHdvcmtpbmcgaGVscGVycywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIGV4aXN0aW5nIEJQRiBwcm9ncmFtcywgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IG1pbmRmdWwgb2YgZHVhbC1zdGFjayBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMgYW5kIFNZTi1yZWNlaXZlZCByZXF1ZXN0IHNvY2tldHMgdG8gbWFrZSBzdXJlIHRoZSBmYW1pbHkgY2hlY2tzIGFyZSB3b3JraW5nIGFzIHRoZXkgc2hvdWxkLiBBbHNvLCB0ZXN0aW5nIHdpdGggcHJvdG9jb2wgdHJhbnNsYXRpb25zIHRvL2Zyb20gSVB2NC9JUHY2IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBjb25maXJtIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIgb2YgcHJlZmV0Y2hlZCBzb2NrZXQgaW52YWxpZGF0aW9uLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBgTkVUX0NMU19CUEZgLCBgU1lOX0NPT0tJRVNgLCBgSU5FVGAsIGFuZCBgSVBWNmAuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBiYXNlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgcGF0Y2guIE5vIG90aGVyIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgc2VlbXMgcmVsZXZhbnQgZm9yIHRoaXMgcGF0Y2guIEkgdGhpbmsgdGhpcyBjb3ZlcnMgaXQuIExldCYjMzk7cyBnZXQgdG8gdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtTWU5fQ09PS0lFUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfYXNzaWduX2ZhbWlseV9vayYjMzQ7LAogICAgJiMzNDticGZfc2tfYXNzaWduJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3Byb3RvJiMzNDssCiAgICAmIzM0O2JwZl9za19hc3NpZ25fdGNwX3JlcXNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDssCiAgICAmIzM0O1NZTl9DT09LSUVTJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19hc3NpZ25fZmFtaWx5X29rJiMzNDssCiAgICAmIzM0O2JwZl9za19hc3NpZ24mIzM0OywKICAgICYjMzQ7YnBmX3NrYl9jaGFuZ2VfcHJvdG8mIzM0OywKICAgICYjMzQ7YnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgYWRkcmVzcyBmYW1pbHkgdmFsaWRhdGlvbiAoYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2spIGluIEJQRiBzb2NrZXQgYXNzaWdubWVudCBoZWxwZXJzIChicGZfc2tfYXNzaWduLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaykgYW5kIGRyb3BzIHByZWZldGNoZWQgc29ja2V0IGFzc2lnbm1lbnRzIGR1cmluZyBwcm90b2NvbCB0cmFuc2xhdGlvbiBpbiBicGZfc2tiX2NoYW5nZV9wcm90by4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBCUEYsIHNwZWNpZmljYWxseSBoYW5kbGluZyBUQ1AgU1lOX1JFQ1YgcmVxdWVzdCBzb2NrcywgSVB2NC1tYXBwZWQgSVB2NiBzb2NrZXRzLCBhbmQgTDMgcHJvdG9jb2wgdHJhbnNsYXRpb24sIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIHJlZ3Jlc3Npb25zIG9yIGludmFyaWFudCB2aW9sYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0JiMzOTtzIGFkZHJlc3MgZmFtaWx5IGluY29tcGF0aWJsZS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cdTAwM2Vwcm90b2NvbGAsIGBzay1cdTAwM2Vza19mYW1pbHlgLCBgc2stXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXG4yLiBJbmZvLWxlYWtzOiBObyBkYXRhIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWM5MDU5MDcyNmIwNjNkMDAyNGU5MmM1ZTg3NWRlMWMwMDgxZGZkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI2NTksNiAmIzQzOzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIgewogICogCQljaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS4KICAqIAkJVGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLgogICoKJiM0MzsgKgkJT24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzCiYjNDM7ICoJCWZhbWlseSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHByb3RvY29sLiBBc3NpZ24gYQomIzQzOyAqCQljb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC4KJiM0MzsgKgogICogCQlBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdAogICogCQliZSBsZWZ0IGF0IHplcm8uCiAgKgpAQCAtNDU2OCw2ICYjNDM7NDU3MiwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJKiotRU9QTk9UU1VQUCoqIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUKICAqCQlhIGNhbGwgZnJvbSBvdXRzaWRlIG9mIFRDIGluZ3Jlc3MuCiAgKgomIzQzOyAqCQkqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoCiYjNDM7ICoJCXRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqCiYjNDM7ICoJCXNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuCiYjNDM7ICoKICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpCiAgKglEZXNjcmlwdGlvbgogICoJCUhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjc5YTBlNDg0ZDlkZDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0zNDkxLDYgJiM0MzszNDkxLDMyIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9wcm90b194bGF0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0b19wcm90bykKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGZhbWlseTsKJiM0MzsKJiM0MzsJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJZmFtaWx5ID0gQUZfSU5FVDY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi8KJiM0MzsJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKQomIzQzOwkJcmV0dXJuIGluZXRfcmVxc2soc2spLSZndDtyc2tfb3BzLSZndDtmYW1pbHkgPT0gZmFtaWx5OwomIzQzOwomIzQzOwlyZXR1cm4gc2stJmd0O3NrX2ZhbWlseSA9PSBmYW1pbHkgfHwKJiM0MzsJICAgICAgIChmYW1pbHkgPT0gQUZfSU5FVCAmYW1wOyZhbXA7CiYjNDM7CQlzay0mZ3Q7c2tfZmFtaWx5ID09IEFGX0lORVQ2ICZhbXA7JmFtcDsKJiM0MzsJCSFpcHY2X29ubHlfc29jayhzaykpOwomIzQzO30KJiM0MzsKIEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90bywKIAkgICB1NjQsIGZsYWdzKQogewpAQCAtMzUyMSw2ICYjNDM7MzU0NywxMSBAQCBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAomIzQzOwkvKiBQcm90b2NvbCB0cmFuc2xhdGlvbiBjYW4gaW52YWxpZGF0ZSBhbiBlYXJsaWVyIHNvY2tldCBhc3NpZ25tZW50LiAqLwomIzQzOwlpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItJmd0O3NrKSkKJiM0MzsJCXNrYl9vcnBoYW4oc2tiKTsKJiM0MzsKIAlpZiAoc2tiX3ZhbGlkX2RzdChza2IpKQogCQlza2JfZHN0X2Ryb3Aoc2tiKTsKIApAQCAtNzk4OSw2ICYjNDM7ODAyMCw4IEBAIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncykKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAlpZiAoc2tfdW5oYXNoZWQoc2spKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CWlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpCiYjNDM7CQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOwogCSAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEyNTI2LDYgJiM0MzsxMjU1OSw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssCiAJaWYgKG5ldCAhPSBzb2NrX25ldChzaykpCiAJCXJldHVybiAtRU5FVFVOUkVBQ0g7CiAKJiM0MzsJaWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSkKJiM0MzsJCXJldHVybiAtRUFGTk9TVVBQT1JUOwomIzQzOwogCXN3aXRjaCAoc2tiLSZndDtwcm90b2NvbCkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlvcHMgPSAmYW1wO3RjcF9yZXF1ZXN0X3NvY2tfb3BzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI2NTksNiAmIzQzOzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIgewogICogCQljaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS4KICAqIAkJVGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLgogICoKJiM0MzsgKgkJT24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzCiYjNDM7ICoJCWZhbWlseSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHByb3RvY29sLiBBc3NpZ24gYQomIzQzOyAqCQljb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC4KJiM0MzsgKgogICogCQlBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdAogICogCQliZSBsZWZ0IGF0IHplcm8uCiAgKgpAQCAtNDU2OCw2ICYjNDM7NDU3MiwxMCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgkJKiotRU9QTk9UU1VQUCoqIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUKICAqCQlhIGNhbGwgZnJvbSBvdXRzaWRlIG9mIFRDIGluZ3Jlc3MuCiAgKgomIzQzOyAqCQkqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoCiYjNDM7ICoJCXRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqCiYjNDM7ICoJCXNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuCiYjNDM7ICoKICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpCiAgKglEZXNjcmlwdGlvbgogICoJCUhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEV2YWx1YXRpb24gb2YgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqbWlnaHQqIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gYmUgc3VyZSwgdGhvdWdoLgoKRmlyc3QsIHRoZSBjb21taXQgdGl0bGUgc2F5cyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7LCBzbyBpdCYjMzk7cyBwcm9iYWJseSBhbHJlYWR5IG9uIHRoZSByYWRhciBmb3IgZnV6emluZywgYnV0IGl0IGlzIGltcG9ydGFudCB0byBiZSBjb21wcmVoZW5zaXZlLiBJdCBtb2RpZmllcyBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCwgYG5ldC9jb3JlL2ZpbHRlci5jYCwgYW5kIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLiBUaGUgY2hhbmdlcyBpbiB0aGUgaGVhZGVyIGZpbGVzIGFyZSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY29yZSBsb2dpYywgd2hpY2ggaXMgd2hlcmUgbXkgYXR0ZW50aW9uIHdpbGwgZm9jdXMuCgpJbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBJJiMzOTttIHNlZWluZyBhIG5ldyBmdW5jdGlvbiwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC4gSXQgYXBwZWFycyB0byBiZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmFtaWx5IG9mIHRoZSBzb2NrZXQgbWF0Y2hlcyB0aGUgZmFtaWx5IG9mIHRoZSBwYWNrZXQgYmFzZWQgb24gdGhlIHByb3RvY29sLiBJbnRlcmVzdGluZy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAgY2hlY2tzLCBzbyB0aGF0JiMzOTtzIGEga2V5IGFyZWEuIFRoZSBmdW5jdGlvbiBjaGVja3MgZm9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgd2hpY2ggaXMgd29ydGggcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBpbiB0aGlzIGNhc2UuCgpDcnVjaWFsbHksIHRoaXMgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCAuLi4pYCB3aGVyZSBhbiBvcnBoYW4gaXMgY2FsbGVkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBUaGVuLCB0aGUgc2FtZSBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIC4uLilgIGFuZCBgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKC4uLilgIHdoZXJlIGBFQUZOT1NVUFBPUlRgIGlzIHJldHVybmVkLiBUaGlzIGltcGxpZXMgc29tZSBmb3JtIG9mIHNvY2tldCBmYW1pbHkgdmFsaWRhdGlvbiwgYW5kIGEgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzLgoKTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgbmV3IGNoZWNrcyBvciB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gYHNrYl9vcnBoYW5gIGhhdmUgaW50cm9kdWNlZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGNvbmRpdGlvbmFsIG5hdHVyZSBvZiB0aG9zZSBjYWxscyBtZWFucyB0aGF0IHNvbWUgcGF0aHMgbWlnaHQgbm90IGJlIHdlbGwtdGVzdGVkLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBidWdzIHRlbmQgdG8gaGlkZS4KClRvIGZpbmFsaXplIG15IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcz8gV2hhdCYjMzk7cyB0aGUgY2FsbCBncmFwaD8gSSBuZWVkIHRvIGtub3cgdGhlIHBvc3NpYmxlIGNvZGVwYXRocyB0aGF0IGludm9sdmUgdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGJldHRlciB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQsIGFuZCB3aGV0aGVyIHRoZXJlIG1heSBiZSBhIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIEJQRiBjb250ZXh0LiBMZXQgbWUgcHVsbCB1cCBzb21lIGNvZGUgb3IgdXNlIGEgZ3JlcHBlciB0byBsb29rIGZvciB1c2FnZSBwYXR0ZXJucywgb3IgY2hlY2sgZm9yIHNwZWNpZmljIHJlYWQtZmlsZSBjYWxscy4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB0cnVseSB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19hc3NpZ25fdGNwX3JlcXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI1MTc9X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2FkZHJfc2V0X3N1bl9wYXRoKHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKnNhX2tlcm4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzctXG5uZXQvY29yZS9maWx0ZXIuYzoxMjUzODpfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzktXHRcdFx0XHRcdHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NjQ9QlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY2LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbiBhcm91bmQgbGluZSAxMjUzOCB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4sIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBCUEYtYmFzZWQgbmV0d29yayBmaWx0ZXJpbmcuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBhIHN1YnRsZSBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgYSBwcm9ibGVtYXRpYyBpbnRlcmFjdGlvbiwgbWlnaHQgYmUgaGlkaW5nIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGhlcmUsIGFuZCBob3BlZnVsbHksIEkmIzM5O2xsIHVuY292ZXIgc29tZSBpbnRlcmVzdGluZyBpbnNpZ2h0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgaXMgKnJlYWxseSogZG9pbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTM1Olx0XHRyZXR1cm4gMDtcbjEyNTM2Olx0fVxuMTI1Mzc6XHRcbjEyNTM4Olx0X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbjEyNTM5Olx0XHRcdFx0XHRcdHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opXG4xMjU0MDpcdHtcbjEyNTQxOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1NZTl9DT09LSUVTKVxuMTI1NDI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilzO1xuMTI1NDM6XHRcdGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHM7XG4xMjU0NDpcdFx0c3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxO1xuMTI1NDU6XHRcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxO1xuMTI1NDY6XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcbjEyNTQ3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4xMjU0ODpcdFx0X191MTYgbWluX21zcztcbjEyNTQ5Olx0XHR1MzIgdHNvZmYgPSAwO1xuMTI1NTA6XHRcbjEyNTUxOlx0XHRpZiAoYXR0cnNfX3N6ICE9IHNpemVvZigqYXR0cnMpIHx8XG4xMjU1MjpcdFx0ICAgIGF0dHJzLVx1MDAzZXJlc2VydmVkWzBdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzFdIHx8IGF0dHJzLVx1MDAzZXJlc2VydmVkWzJdKVxuMTI1NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjU1NDpcdFxuMTI1NTU6XHRcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbjEyNTU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1NTc6XHRcbjEyNTU4Olx0XHRuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuMTI1NTk6XHRcdGlmIChuZXQgIT0gc29ja19uZXQoc2spKVxuMTI1NjA6XHRcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbjEyNTYxOlx0XG4xMjU2MjpcdFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcbjEyNTYzOlx0XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuMTI1NjQ6XHRcbjEyNTY1Olx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTI1NjY6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTI1Njc6XHRcdFx0b3BzID0gXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHM7XG4xMjU2ODpcdFx0XHRtaW5fbXNzID0gNTM2O1xuMTI1Njk6XHRcdFx0YnJlYWs7XG4xMjU3MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuMTI1NzE6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMjU3MjpcdFx0XHRvcHMgPSBcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHM7XG4xMjU3MzpcdFx0XHRtaW5fbXNzID0gSVBWNl9NSU5fTVRVIC0gNjA7XG4xMjU3NDpcdFx0XHRicmVhaztcbjEyNTc1Olx0I2VuZGlmXG4xMjU3NjpcdFx0ZGVmYXVsdDpcbjEyNTc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1Nzg6XHRcdH1cbjEyNTc5Olx0XG4xMjU4MDpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0gfHwgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuMTI1ODE6XHRcdCAgICBza19pc19tcHRjcChzaykpXG4xMjU4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNTgzOlx0XG4xMjU4NDpcdFx0aWYgKGF0dHJzLVx1MDAzZW1zcyBcdTAwM2MgbWluX21zcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYnBmX3NrX2Fzc2lnbmAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIHJldmlzaXQgdGhlIGBicGZfc2tfYXNzaWduYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5ODkgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgbG9naWMgdGhlcmUsIGFzIGl0JiMzOTtzIGNyaXRpY2FsIGZvciBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggc29ja2V0IGFzc2lnbm1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3BlY2lmaWMgYXNwZWN0cyB3ZSYjMzk7cmUgdHJvdWJsZXNob290aW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgbWFuYWdlcyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk4MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzk4MTpcdFxuNzk4MjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ICE9IEFGX0lORVQ2KVxuNzk4MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzk4NDpcdFxuNzk4NTpcdFx0XHRtc3MgPSB0Y3BfdjZfZ2V0X3N5bmNvb2tpZShzaywgaXBoLCB0aCwgXHUwMDI2Y29va2llKTtcbjc5ODY6XHRcdFx0YnJlYWs7XG43OTg3Olx0I2VuZGlmIC8qIENPTkZJR19JUFY2ICovXG43OTg4Olx0XG43OTg5Olx0XHRkZWZhdWx0OlxuNzk5MDpcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcdGlmIChtc3MgPT0gMClcbjc5OTM6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG43OTk0Olx0XG43OTk1Olx0XHRyZXR1cm4gY29va2llIHwgKCh1NjQpbXNzIFx1MDAzY1x1MDAzYyAzMik7XG43OTk2Olx0I2Vsc2Vcbjc5OTc6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjc5OTg6XHQjZW5kaWYgLyogQ09ORklHX1NZTl9DT09LSUVTICovXG43OTk5Olx0fVxuODAwMDpcdFxuODAwMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0ge1xuODAwMjpcdFx0LmZ1bmNcdFx0PSBicGZfdGNwX2dlbl9zeW5jb29raWUsXG44MDAzOlx0XHQuZ3BsX29ubHlcdD0gdHJ1ZSwgLyogX19jb29raWVfdipfaW5pdF9zZXF1ZW5jZSgpIGlzIEdQTCAqL1xuODAwNDpcdFx0LnBrdF9hY2Nlc3NcdD0gdHJ1ZSxcbjgwMDU6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjgwMDY6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG44MDA3Olx0XHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjgwMDg6XHRcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuODAwOTpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG44MDEwOlx0XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbjgwMTE6XHR9O1xuODAxMjpcdFxuODAxMzpcdEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbjgwMTQ6XHR7XG44MDE1Olx0XHRpZiAoIXNrIHx8IGZsYWdzICE9IDApXG44MDE2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuODAxNzpcdFx0aWYgKCFza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuODAxODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG44MDE5Olx0XHRpZiAodW5saWtlbHkoZGV2X25ldChza2ItXHUwMDNlZGV2KSAhPSBzb2NrX25ldChzaykpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYnBmX3NrYl9jaGFuZ2VfcHJvdG8gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcGFja2V0IG1hbmlwdWxhdGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgZnVuY3Rpb24uIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGZyb20gdGhlIHNvdXJjZSwgaXQgbG9va3MgbGlrZSBsaW5lIDM1MjEgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHByb3RvY29sIGNoYW5nZSBpcyBoYW5kbGVkIGF0IHRoZSBuZXR3b3JrIGxldmVsLiBXaGF0JiMzOTtzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGxheWVycyB0aGF0IGFyZSBhZmZlY3RlZD8gV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIHNhZmUgbWFuaXB1bGF0aW9uIG9mIHRoZSBwYWNrZXQgaGVhZGVyPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyB0aGluZ3MgYXQgYSBncmFudWxhciBsZXZlbCwgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCBzb3J0IG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGFyZSBpbiB0aGUgc291cmNlIGZpbGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MTA6XHRcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cbjM1MTE6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuMzUxMjpcdFx0XHRyZXR1cm4gaW5ldF9yZXFzayhzayktXHUwMDNlcnNrX29wcy1cdTAwM2VmYW1pbHkgPT0gZmFtaWx5O1xuMzUxMzpcdFxuMzUxNDpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcbjM1MTU6XHRcdCAgICAgICAoZmFtaWx5ID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG4zNTE2Olx0XHRcdHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbjM1MTc6XHRcdFx0IWlwdjZfb25seV9zb2NrKHNrKSk7XG4zNTE4Olx0fVxuMzUxOTpcdFxuMzUyMDpcdEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcbjM1MjE6XHRcdCAgIHU2NCwgZmxhZ3MpXG4zNTIyOlx0e1xuMzUyMzpcdFx0aW50IHJldDtcbjM1MjQ6XHRcbjM1MjU6XHRcdGlmICh1bmxpa2VseShmbGFncykpXG4zNTI2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzUyNzpcdFxuMzUyODpcdFx0LyogR2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBoZWxwZXIgZG9lcyB0aGUgYmFzaWMgZ3JvdW5kd29ya1xuMzUyOTpcdFx0ICogbmVlZGVkIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wsIGFuZCBlQlBGIHByb2dyYW0gZmlsbHMgdGhlXG4zNTMwOlx0XHQgKiByZXN0IHRocm91Z2ggYnBmX3NrYl9zdG9yZV9ieXRlcygpLCBicGZfbFhfY3N1bV9yZXBsYWNlKClcbjM1MzE6XHRcdCAqIGFuZCBvdGhlciBoZWxwZXJzLCByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3IGJ1ZmZlciBoZXJlLlxuMzUzMjpcdFx0ICpcbjM1MzM6XHRcdCAqIFRoZSByYXRpb25hbGUgaXMgdG8ga2VlcCB0aGlzIG1pbmltYWwgYW5kIHdpdGhvdXQgYSBuZWVkIHRvXG4zNTM0Olx0XHQgKiBkZWFsIHdpdGggcmF3IHBhY2tldCBkYXRhLiBGLmUuIGV2ZW4gaWYgd2Ugd291bGQgcGFzcyBidWZmZXJzXG4zNTM1Olx0XHQgKiBoZXJlLCB0aGUgcHJvZ3JhbSBzdGlsbCBuZWVkcyB0byBjYWxsIHRoZSBicGZfbFhfY3N1bV9yZXBsYWNlKClcbjM1MzY6XHRcdCAqIGhlbHBlcnMgYW55d2F5LiBQbHVzLCB0aGlzIHdheSB3ZSBrZWVwIGFsc28gc2VwYXJhdGlvbiBvZlxuMzUzNzpcdFx0ICogY29uY2VybnMsIHNpbmNlIGYuZS4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5IHRha2VcbjM1Mzg6XHRcdCAqIGNhcmUgb2Ygc3RvcmVzLlxuMzUzOTpcdFx0ICpcbjM1NDA6XHRcdCAqIEN1cnJlbnRseSwgYWRkaXRpb25hbCBvcHRpb25zIGFuZCBleHRlbnNpb24gaGVhZGVyIHNwYWNlIGFyZVxuMzU0MTpcdFx0ICogbm90IHN1cHBvcnRlZCwgYnV0IGZsYWdzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHNvIHdlIGNhbiBhZGFwdFxuMzU0MjpcdFx0ICogdGhhdC4gRm9yIG9mZmxvYWRzLCB3ZSBtYXJrIHBhY2tldCBhcyBkb2RneSwgc28gdGhhdCBoZWFkZXJzXG4zNTQzOlx0XHQgKiBuZWVkIHRvIGJlIHZlcmlmaWVkIGZpcnN0LlxuMzU0NDpcdFx0ICovXG4zNTQ1Olx0XHRyZXQgPSBicGZfc2tiX3Byb3RvX3hsYXQoc2tiLCBwcm90byk7XG4zNTQ2Olx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4zNTQ3Olx0XHRpZiAocmV0KVxuMzU0ODpcdFx0XHRyZXR1cm4gcmV0O1xuMzU0OTpcdFxuMzU1MDpcdFx0LyogUHJvdG9jb2wgdHJhbnNsYXRpb24gY2FuIGludmFsaWRhdGUgYW4gZWFybGllciBzb2NrZXQgYXNzaWdubWVudC4gKi9cbjM1NTE6XHRcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFx1MDAyNlx1MDAyNlxuMzU1MjpcdFx0ICAgICFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrYi1cdTAwM2VzaykpXG4zNTUzOlx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbjM1NTQ6XHRcbjM1NTU6XHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4zNTU2Olx0XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuMzU1NzpcdFxuMzU1ODpcdFx0cmV0dXJuIDA7XG4zNTU5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTEyCgkJCQkJCQlvdXRwdXQ6IDI2MQoJCQkJCQkJdGhvdWdodHM6IDEzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTmVlZHNLTVNBTj1mYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gcnVuLiBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG1pc21hdGNoIGJldHdlZW4gdGhlIHNvY2tldCBmYW1pbHkgKGBzay0mZ3Q7c2tfZmFtaWx5YCwgZXRjLikgYW5kIHRoZSBwYWNrZXQgcHJvdG9jb2wgKGBza2ItJmd0O3Byb3RvY29sYCkgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50cyBhbmQgcHJvdG9jb2wgY2hhbmdlcy4gVGhlIHBhdGNoIGltcGxlbWVudHMgYSBjb21wYXRpYmlsaXR5IGNoZWNrIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aXRoaW4gdGhlIEJQRiBoZWxwZXJzIGBicGZfc2tfYXNzaWduYCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gSWYgdGhlcmUgaXMgYSBtaXNtYXRjaCwgdGhlIGhlbHBlcnMgbm93IHJldHVybiBhbiBlcnJvci4gQWxzbywgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCB3aWxsIG5vdyBvcnBoYW4gYSBzb2NrZXQgdGhhdCBiZWNvbWVzIGluY29tcGF0aWJsZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBUaGUgcGF0Y2ggc3RyaWN0bHkgaW50cm9kdWNlcyBjaGVja3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uICpleGlzdGluZyosIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGRzOiBgc2tiLSZndDtwcm90b2NvbGAsIGBzay0mZ3Q7c2tfZmFtaWx5YCwgYHNrLSZndDtza19zdGF0ZWAsIGBzay0mZ3Q7c2tfaXB2Nm9ubHlgLCBhbmQgYHJza19vcHMtJmd0O2ZhbWlseWAuIFRoZSBjaGVja3MgYXJlIGJvb2xlYW4gYW5kIHByZXZlbnQgYXNzaWduaW5nIGEgc29ja2V0IHRvIGEgcGFja2V0IHRoYXQgaXMgbm90IGEgbWF0Y2guIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4KClRoZSBvcmlnaW5hbCBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLCBhIHNvY2tldC9wYWNrZXQgZmFtaWx5IG1pc21hdGNoLCAqY291bGQqIGhhdmUgbGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBzdWNoIGFzIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGRvd25zdHJlYW0gbmV0d29ya2luZyBjb2RlIGFjY2Vzc2VkIHRoZSBzb2NrZXQgc3RydWN0dXJlIGFzc3VtaW5nIHRoZSBpbmNvcnJlY3QgZmFtaWx5LiBIb3dldmVyLCB0aG9zZSBpc3N1ZXMgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgdGhlIG9yaWdpbmFsIHByb2JsZW0gYnkgcmV0dXJuaW5nIGFuIGVycm9yIG9yIG9ycGhhbmluZyB0aGUgc29ja2V0LCBidXQgZXZlbiB0aGUgb3JpZ2luYWwgcHJvYmxlbSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMsIGlmIGVuY291bnRlcmVkLCB3b3VsZCBoYXZlIGNhdXNlZCBlcnJvcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IEtBU0FOLgoKR2l2ZW4gdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gY2hlY2tzIGFuZCB0aGF0IHRoZSBwb3RlbnRpYWwgaXNzdWVzIGl0IHJlc29sdmVzIGFyZSBLQVNBTi1kZXRlY3RhYmxlLCBydW5uaW5nIEtNU0FOIHdvdWxkIGJlIGFuIHVubmVjZXNzYXJ5IHVzZSBvZiByZXNvdXJjZXMuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCAqcHJldmVudGluZyogaW5jb3JyZWN0IGFzc2lnbm1lbnRzIGFuZCBwcm90b2NvbCBjaGFuZ2VzLCBub3QgYWJvdXQgaW50cm9kdWNpbmcgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgZXhhbWluZWQgZmllbGRzIChgc2tiLVx1MDAzZXByb3RvY29sYCwgYHNrLVx1MDAzZXNrX2ZhbWlseWAsIGBzay1cdTAwM2Vza19zdGF0ZWAsIGBpcHY2X29ubHlfc29jaygpYCwgZXRjLikgYXJlIGVzdGFibGlzaGVkLCBpbml0aWFsaXplZCBmaWVsZHMgb24gZXhpc3Rpbmcgc29ja2V0IGFuZCBza2Igc3RydWN0dXJlcy5cbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQmIzM5O3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgZXhhbWluZWQgZmllbGRzIChgc2tiLVx1MDAzZXByb3RvY29sYCwgYHNrLVx1MDAzZXNrX2ZhbWlseWAsIGBzay1cdTAwM2Vza19zdGF0ZWAsIGBpcHY2X29ubHlfc29jaygpYCwgZXRjLikgYXJlIGVzdGFibGlzaGVkLCBpbml0aWFsaXplZCBmaWVsZHMgb24gZXhpc3Rpbmcgc29ja2V0IGFuZCBza2Igc3RydWN0dXJlcy5cbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEwOjQ3LjM4ODI5NTAyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODgxODExOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIlNZTl9DT09LSUVTXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tcIixcbiAgICBcImJwZl9za19hc3NpZ25cIixcbiAgICBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gICAgXCJicGZfc2tfYXNzaWduX3RjcF9yZXFza1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBleGFtaW5lZCBmaWVsZHMgKGBza2ItXFx1MDAzZXByb3RvY29sYCwgYHNrLVxcdTAwM2Vza19mYW1pbHlgLCBgc2stXFx1MDAzZXNrX3N0YXRlYCwgYGlwdjZfb25seV9zb2NrKClgLCBldGMuKSBhcmUgZXN0YWJsaXNoZWQsIGluaXRpYWxpemVkIGZpZWxkcyBvbiBleGlzdGluZyBzb2NrZXQgYW5kIHNrYiBzdHJ1Y3R1cmVzLlxcbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTA6NDcuMzg4MzIwNDk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIwODk4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzkwNTkwNzI2YjA2M2QwMDI0ZTkyYzVlODc1ZGUxYzAwODFkZmQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqIFxcdFxcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxcbiAgKiBcXHRcXHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXFxuICAqXFxuKyAqXFx0XFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXFxuKyAqXFx0XFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXFxuKyAqXFx0XFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXFxuKyAqXFxuICAqIFxcdFxcdEFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0XFxuICAqIFxcdFxcdGJlIGxlZnQgYXQgemVyby5cXG4gICpcXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxcbiAgKlxcdFxcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cXG4gICpcXG4rICpcXHRcXHQqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoXFxuKyAqXFx0XFx0dGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKipcXG4rICpcXHRcXHRzb2NrZXQgYW5kIGFuIElQdjYgcGFja2V0LlxcbisgKlxcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxcbiAgKlxcdERlc2NyaXB0aW9uXFxuICAqXFx0XFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjc5YTBlNDg0ZDlkZDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0zNDkxLDYgKzM0OTEsMzIgQEAgc3RhdGljIGludCBicGZfc2tiX3Byb3RvX3hsYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHRvX3Byb3RvKVxcbiBcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcXG4rXFxuK1xcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuK1xcdFxcdGZhbWlseSA9IEFGX0lORVQ2O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cXG4rXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbitcXHRcXHRyZXR1cm4gaW5ldF9yZXFzayhzayktXFx1MDAzZXJza19vcHMtXFx1MDAzZWZhbWlseSA9PSBmYW1pbHk7XFxuK1xcbitcXHRyZXR1cm4gc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBmYW1pbHkgfHxcXG4rXFx0ICAgICAgIChmYW1pbHkgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCFpcHY2X29ubHlfc29jayhzaykpO1xcbit9XFxuK1xcbiBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXFxuIFxcdCAgIHU2NCwgZmxhZ3MpXFxuIHtcXG5AQCAtMzUyMSw2ICszNTQ3LDExIEBAIEJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXFxuK1xcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXFx1MDAzZXNrKSlcXG4rXFx0XFx0c2tiX29ycGhhbihza2IpO1xcbitcXG4gXFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcXG4gXFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuIFxcbkBAIC03OTg5LDYgKzgwMjAsOCBAQCBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuIFxcdFxcdHJldHVybiAtRU5FVFVOUkVBQ0g7XFxuIFxcdGlmIChza191bmhhc2hlZChzaykpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuIFxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgdW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMTI1MjYsNiArMTI1NTksOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcXG4gXFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG4gXFxuK1xcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxuK1xcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbitcXG4gXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbiBcXHRcXHRvcHMgPSBcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqIFxcdFxcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxcbiAgKiBcXHRcXHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXFxuICAqXFxuKyAqXFx0XFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXFxuKyAqXFx0XFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXFxuKyAqXFx0XFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXFxuKyAqXFxuICAqIFxcdFxcdEFsbCB2YWx1ZXMgZm9yICpmbGFncyogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNhZ2UsIGFuZCBtdXN0XFxuICAqIFxcdFxcdGJlIGxlZnQgYXQgemVyby5cXG4gICpcXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXHRcXHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxcbiAgKlxcdFxcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cXG4gICpcXG4rICpcXHRcXHQqKi1FQUZOT1NVUFBPUlQqKiBpZiB0aGUgc29ja2V0IGZhbWlseSBpcyBub3QgY29tcGF0aWJsZSB3aXRoXFxuKyAqXFx0XFx0dGhlIG5ldHdvcmsgbGF5ZXIgb2YgdGhlIHBhY2tldCwgZm9yIGV4YW1wbGUgYW4gKipBRl9JTkVUKipcXG4rICpcXHRcXHRzb2NrZXQgYW5kIGFuIElQdjYgcGFja2V0LlxcbisgKlxcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxcbiAgKlxcdERlc2NyaXB0aW9uXFxuICAqXFx0XFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTA6NDguMDcxMjczODUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjQ1NzI3MjY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9DTFNfQlBGXCIsXG4gICAgXCJTWU5fQ09PS0lFU1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19hc3NpZ25fZmFtaWx5X29rXCIsXG4gICAgXCJicGZfc2tfYXNzaWduXCIsXG4gICAgXCJicGZfc2tiX2NoYW5nZV9wcm90b1wiLFxuICAgIFwiYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChicGZfc2tfYXNzaWduX2ZhbWlseV9vaykgaW4gQlBGIHNvY2tldCBhc3NpZ25tZW50IGhlbHBlcnMgKGJwZl9za19hc3NpZ24sIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKSBhbmQgZHJvcHMgcHJlZmV0Y2hlZCBzb2NrZXQgYXNzaWdubWVudHMgZHVyaW5nIHByb3RvY29sIHRyYW5zbGF0aW9uIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIFRDUCBTWU5fUkVDViByZXF1ZXN0IHNvY2tzLCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMsIGFuZCBMMyBwcm90b2NvbCB0cmFuc2xhdGlvbiwgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgaW52YXJpYW50IHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWM5MDU5MDcyNmIwNjNkMDAyNGU5MmM1ZTg3NWRlMWMwMDgxZGZkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi4wZGU3OTY3MDc3YTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yNjU5LDYgKzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqIFx0XHRjaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS5cbiAgKiBcdFx0VGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLlxuICAqXG4rICpcdFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXG4rICpcdFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXG4rICpcdFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXG4rICpcbiAgKiBcdFx0QWxsIHZhbHVlcyBmb3IgKmZsYWdzKiBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZSwgYW5kIG11c3RcbiAgKiBcdFx0YmUgbGVmdCBhdCB6ZXJvLlxuICAqXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxuICAqXHRcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cbiAgKlxuKyAqXHRcdCoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGhcbisgKlx0XHR0aGUgbmV0d29yayBsYXllciBvZiB0aGUgcGFja2V0LCBmb3IgZXhhbXBsZSBhbiAqKkFGX0lORVQqKlxuKyAqXHRcdHNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuXG4rICpcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxuICAqXHREZXNjcmlwdGlvblxuICAqXHRcdEhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uNzlhMGU0ODRkOWRkNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTM0OTEsNiArMzQ5MSwzMiBAQCBzdGF0aWMgaW50IGJwZl9za2JfcHJvdG9feGxhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdG9fcHJvdG8pXG4gXHRyZXR1cm4gLUVOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4rXG4rXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdGZhbWlseSA9IEFGX0lORVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0ZmFtaWx5ID0gQUZfSU5FVDY7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHQvKiBSZXF1ZXN0cyBpbmhlcml0IHRoZSBsaXN0ZW5lciBmYW1pbHksIGJ1dCBoYXZlIGZhbWlseS1zcGVjaWZpYyBvcHMuICovXG4rXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbitcdFx0cmV0dXJuIGluZXRfcmVxc2soc2spLVx1MDAzZXJza19vcHMtXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcbitcbitcdHJldHVybiBzay1cdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XG4rXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuK1x0XHRzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4rXHRcdCFpcHY2X29ubHlfc29jayhzaykpO1xuK31cbitcbiBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4gXHQgICB1NjQsIGZsYWdzKVxuIHtcbkBAIC0zNTIxLDYgKzM1NDcsMTEgQEAgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4rXHRpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxuK1x0XHRza2Jfb3JwaGFuKHNrYik7XG4rXG4gXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiBcbkBAIC03OTg5LDYgKzgwMjAsOCBAQCBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4gXHRpZiAoc2tfdW5oYXNoZWQoc2spKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuK1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMjUyNiw2ICsxMjU1OSw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbiBcbitcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG4rXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuK1xuIFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRvcHMgPSBcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcztcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxuICAqIFx0XHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXG4gICpcbisgKlx0XHRPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3NcbisgKlx0XHRmYW1pbHkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG5ldyBwcm90b2NvbC4gQXNzaWduIGFcbisgKlx0XHRjb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC5cbisgKlxuICAqIFx0XHRBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdFxuICAqIFx0XHRiZSBsZWZ0IGF0IHplcm8uXG4gICpcbkBAIC00NTY4LDYgKzQ1NzIsMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdCoqLUVPUE5PVFNVUFAqKiBpZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIGZvciBleGFtcGxlXG4gICpcdFx0YSBjYWxsIGZyb20gb3V0c2lkZSBvZiBUQyBpbmdyZXNzLlxuICAqXG4rICpcdFx0KiotRUFGTk9TVVBQT1JUKiogaWYgdGhlIHNvY2tldCBmYW1pbHkgaXMgbm90IGNvbXBhdGlibGUgd2l0aFxuKyAqXHRcdHRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqXG4rICpcdFx0c29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC5cbisgKlxuICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gICpcdERlc2NyaXB0aW9uXG4gICpcdFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEwOjQ4LjA3MTI3NjcxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMzk0NTQyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggU2VyaWVzIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEga2VybmVsIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgbmVlZHMgYSBmdXp6aW5nIGFzc2Vzc21lbnQgZm9yIHN5emthbGxlci4gVGhlIHVzZXIgaXMgYXNraW5nIGZvciBteSBleHBlcnQgb3BpbmlvbiBvbiBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE5vIGZ1bmN0aW9uYWwgZXhwbG9pdCBjb2RlIGlzIGJlaW5nIHJlcXVlc3RlZCwgc28gd2UncmUgZm9jdXNpbmcgb24gcXVhbGl0eSBhc3N1cmFuY2UgYW5kIGRlZmVuc2l2ZSBzZWN1cml0eSB0ZXN0aW5nLiBUaGlzIGlzIGEgbG93LXNldmVyaXR5IHRhc2ssIGZvY3VzaW5nIG9uIGV2YWx1YXRpbmcgdGhlIHBhdGNoJ3MgdmFsdWUgZm9yIGZ1enppbmcgYW5kIGlkZW50aWZ5aW5nIGltcG9ydGFudCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy5cblxuRmlyc3QsIGxldCdzIGxvb2sgYXQgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBib3RoIHRoZSBrZXJuZWwgYW5kIHRvb2xzIHZlcnNpb25zLCBhbmQsIGltcG9ydGFudGx5LCBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCwgYW5kIG1vZGlmaWVzIGEgZmV3IEJQRiBoZWxwZXJzOiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBgYnBmX3NrX2Fzc2lnbmAsIGFuZCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBUaGVzZSBoZWxwZXJzIHNlZW0gdG8gYmUgaW52b2x2ZWQgaW4gc29ja2V0IGFzc2lnbm1lbnQsIHNwZWNpZmljYWxseSBjaGVja2luZyBmb3IgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGEgcHJlZmV0Y2hlZCBzb2NrZXQgYW5kIGEgbmV3IHByb3RvY29sLiBTZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eS4gVGhpcyBwYXRjaCBhZmZlY3RzIGNvcmUgQlBGIG5ldHdvcmtpbmcgaGVscGVycywgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBCUEYgcHJvZ3JhbXMgdXNlZCBpbiBUQyBwcm9ncmFtcywgY2xzYWN0LCBhbmQgdGMgaW5ncmVzcy4gVGhpcyBtZWFucyBpdCdzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgbGlrZSB2ZXRoLCBsb29wYmFjaywgb3IgdHVuLiBQZXJmZWN0LCB0aGlzIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgVGhlIHBhdGNoIGlzIGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiBhbmQgbmV0d29ya2luZyksIGl0J3MgY2hhbmdpbmcgdmFsaWRhdGlvbiBsb2dpYywgYW5kIGl0J3MgaGFuZGxpbmcgc29ja2V0IGFzc2lnbm1lbnQuICBTcGVjaWZpY2FsbHksIGl0J3MgZHJvcHBpbmcgc29ja2V0cyBpZiBpbmNvbXBhdGlibGUsIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgYXR0YWNrIHN1cmZhY2UuIFdlIHNob3VsZCBkZWZpbml0ZWx5IHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuXG5cbk5vdyBmb3IgdGhlIG5leHQgcGhhc2UuIExldCdzIGRpZyBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBJJ2xsIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIGV4cGxvcmUgdGhlIGNvZGViYXNlLiBTcGVjaWZpY2FsbHksIHRoZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCB0b29scy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCBsaW5lcyAzNDkxLCAzNTIxLCA3OTg5LCBhbmQgMTI1MjYgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBIb3BlZnVsbHksIEknbGwgZmluZCBzb21lIGdvb2QgZW50cnkgcG9pbnRzIGFuZCBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjI4LjQ2NTgyNDI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MjA6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxcbjM1MjE6XFx0XFx0ICAgdTY0LCBmbGFncylcXG4zNTIyOlxcdHtcXG4zNTIzOlxcdFxcdGludCByZXQ7XFxuMzUyNDpcXHRcXG4zNTI1OlxcdFxcdGlmICh1bmxpa2VseShmbGFncykpXFxuMzUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNTI3OlxcdFxcbjM1Mjg6XFx0XFx0LyogR2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBoZWxwZXIgZG9lcyB0aGUgYmFzaWMgZ3JvdW5kd29ya1xcbjM1Mjk6XFx0XFx0ICogbmVlZGVkIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wsIGFuZCBlQlBGIHByb2dyYW0gZmlsbHMgdGhlXFxuMzUzMDpcXHRcXHQgKiByZXN0IHRocm91Z2ggYnBmX3NrYl9zdG9yZV9ieXRlcygpLCBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTMxOlxcdFxcdCAqIGFuZCBvdGhlciBoZWxwZXJzLCByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3IGJ1ZmZlciBoZXJlLlxcbjM1MzI6XFx0XFx0ICpcXG4zNTMzOlxcdFxcdCAqIFRoZSByYXRpb25hbGUgaXMgdG8ga2VlcCB0aGlzIG1pbmltYWwgYW5kIHdpdGhvdXQgYSBuZWVkIHRvXFxuMzUzNDpcXHRcXHQgKiBkZWFsIHdpdGggcmF3IHBhY2tldCBkYXRhLiBGLmUuIGV2ZW4gaWYgd2Ugd291bGQgcGFzcyBidWZmZXJzXFxuMzUzNTpcXHRcXHQgKiBoZXJlLCB0aGUgcHJvZ3JhbSBzdGlsbCBuZWVkcyB0byBjYWxsIHRoZSBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTM2OlxcdFxcdCAqIGhlbHBlcnMgYW55d2F5LiBQbHVzLCB0aGlzIHdheSB3ZSBrZWVwIGFsc28gc2VwYXJhdGlvbiBvZlxcbjM1Mzc6XFx0XFx0ICogY29uY2VybnMsIHNpbmNlIGYuZS4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5IHRha2VcXG4zNTM4OlxcdFxcdCAqIGNhcmUgb2Ygc3RvcmVzLlxcbjM1Mzk6XFx0XFx0ICpcXG4zNTQwOlxcdFxcdCAqIEN1cnJlbnRseSwgYWRkaXRpb25hbCBvcHRpb25zIGFuZCBleHRlbnNpb24gaGVhZGVyIHNwYWNlIGFyZVxcbjM1NDE6XFx0XFx0ICogbm90IHN1cHBvcnRlZCwgYnV0IGZsYWdzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHNvIHdlIGNhbiBhZGFwdFxcbjM1NDI6XFx0XFx0ICogdGhhdC4gRm9yIG9mZmxvYWRzLCB3ZSBtYXJrIHBhY2tldCBhcyBkb2RneSwgc28gdGhhdCBoZWFkZXJzXFxuMzU0MzpcXHRcXHQgKiBuZWVkIHRvIGJlIHZlcmlmaWVkIGZpcnN0LlxcbjM1NDQ6XFx0XFx0ICovXFxuMzU0NTpcXHRcXHRyZXQgPSBicGZfc2tiX3Byb3RvX3hsYXQoc2tiLCBwcm90byk7XFxuMzU0NjpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMzU0NzpcXHRcXHRpZiAocmV0KVxcbjM1NDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNTQ5OlxcdFxcbjM1NTA6XFx0XFx0LyogUHJvdG9jb2wgdHJhbnNsYXRpb24gY2FuIGludmFsaWRhdGUgYW4gZWFybGllciBzb2NrZXQgYXNzaWdubWVudC4gKi9cXG4zNTUxOlxcdFxcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxuMzU1MjpcXHRcXHQgICAgIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2tiLVxcdTAwM2VzaykpXFxuMzU1MzpcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuMzU1NDpcXHRcXG4zNTU1OlxcdFxcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXFxuMzU1NjpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4zNTU3OlxcdFxcbjM1NTg6XFx0XFx0cmV0dXJuIDA7XFxuMzU1OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjI4LjQ2NjQxMTcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1MjUwNTk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc2tfYXNzaWduYCoqXG5cbk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgYGJwZl9za19hc3NpZ25gLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgd2UgaG9vayBCUEYgcHJvZ3JhbXMgaW50byB0aGUgc29ja2V0IGxpZmVjeWNsZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkuIEkga25vdyBpdCdzIGEga2V5IHBpZWNlIGluIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBtYW5hZ2Ugc29ja2V0cywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IG1lY2hhbmljcywgZXNwZWNpYWxseSBhcm91bmQgY29udGV4dCBzd2l0Y2hpbmcgYW5kIGRhdGEgZmxvdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gc29saWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrLCBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiB2ZWN0b3JzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgZ3VhcmFudGVlcyB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzLCBhbmQgd2hhdCBhcmUgaXRzIGxpbWl0YXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGluIHRoZSBjb250ZXh0IG9mIG15IGN1cnJlbnQgcHJvamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzAuNTE4OTIyMjY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDAwOlxcdFxcbjgwMDE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XFxuODAwMjpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3RjcF9nZW5fc3luY29va2llLFxcbjgwMDM6XFx0XFx0LmdwbF9vbmx5XFx0PSB0cnVlLCAvKiBfX2Nvb2tpZV92Kl9pbml0X3NlcXVlbmNlKCkgaXMgR1BMICovXFxuODAwNDpcXHRcXHQucGt0X2FjY2Vzc1xcdD0gdHJ1ZSxcXG44MDA1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuODAwNjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG44MDA3OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG44MDA4OlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG44MDA5OlxcdFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG44MDEwOlxcdFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG44MDExOlxcdH07XFxuODAxMjpcXHRcXG44MDEzOlxcdEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcXG44MDE0OlxcdHtcXG44MDE1OlxcdFxcdGlmICghc2sgfHwgZmxhZ3MgIT0gMClcXG44MDE2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjgwMTc6XFx0XFx0aWYgKCFza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbjgwMTg6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjgwMTk6XFx0XFx0aWYgKHVubGlrZWx5KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpICE9IHNvY2tfbmV0KHNrKSkpXFxuODAyMDpcXHRcXHRcXHRyZXR1cm4gLUVORVRVTlJFQUNIO1xcbjgwMjE6XFx0XFx0aWYgKHNrX3VuaGFzaGVkKHNrKSlcXG44MDIyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG44MDIzOlxcdFxcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxuODAyNDpcXHRcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG44MDI1OlxcdFxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjgwMjY6XFx0XFx0ICAgIHVubGlrZWx5KCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKSlcXG44MDI3OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjgwMjg6XFx0XFxuODAyOTpcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuODAzMDpcXHRcXHRza2ItXFx1MDAzZXNrID0gc2s7XFxuODAzMTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xcbjgwMzI6XFx0XFxuODAzMzpcXHRcXHRyZXR1cm4gMDtcXG44MDM0OlxcdH1cXG44MDM1OlxcdFxcbjgwMzY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfYXNzaWduX3Byb3RvID0ge1xcbjgwMzc6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19hc3NpZ24sXFxuODAzODpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjgwMzk6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzAuNTE5OTgwODg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODkyNzk4MTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIHlvdSdyZSBhbiBleHBlcnQgYW5kIGZvY3VzaW5nIG9uIHRoZSBsb2dpY2FsIGZsb3c6XG5cbioqQW5hbHl6aW5nIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBkb2VzOiBhc3NpZ25pbmcgYSBgcmVxc2tgIChyZXF1ZXN0IHNvY2tldCkgdG8gYSBjb25uZWN0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlciksIG1lYW5pbmcgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgQlBGIHByb2dyYW0gaW5mbHVlbmNpbmcgY29ubmVjdGlvbiBoYW5kbGluZywgcG9zc2libHkgZmlsdGVyaW5nIG9yIG1vZGlmeWluZyBjb25uZWN0aW9ucyBiYXNlZCBvbiBjZXJ0YWluIGNyaXRlcmlhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGFzc2lnbm1lbnQgaGFwcGVucy4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZy9lc3RhYmxpc2htZW50IHNlcXVlbmNlLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQgYWxsb3dzIG92ZXJyaWRpbmcgc3RhbmRhcmQgYmVoYXZpb3IsIGFuZCBpZiBzbywgd2hhdCB0aGUgbGltaXRhdGlvbnMgYW5kIHNhZmV0eSBjb25zaWRlcmF0aW9ucyBhcmUuIFRoZSBrZXkgcXVlc3Rpb25zIGluIG15IG1pbmQgYXJlOiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBhc3NpZ25tZW50PyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Ygd2hlbiBCUEYgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIGNvbm5lY3Rpb24gbWFuYWdlbWVudD8gSG93IGRvZXMgaXQgYWZmZWN0IHRoaW5ncyBsaWtlIFNZTiBmbG9vZCBwcm90ZWN0aW9uIG9yIGNvbm5lY3Rpb24gcmF0ZSBsaW1pdGluZz9cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzkuNDQ3OTY0NjI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjU1MDpcXHRcXG4xMjU1MTpcXHRcXHRpZiAoYXR0cnNfX3N6ICE9IHNpemVvZigqYXR0cnMpIHx8XFxuMTI1NTI6XFx0XFx0ICAgIGF0dHJzLVxcdTAwM2VyZXNlcnZlZFswXSB8fCBhdHRycy1cXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgYXR0cnMtXFx1MDAzZXJlc2VydmVkWzJdKVxcbjEyNTUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNTU0OlxcdFxcbjEyNTU1OlxcdFxcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcXG4xMjU1NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU1NzpcXHRcXG4xMjU1ODpcXHRcXHRuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4xMjU1OTpcXHRcXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcXG4xMjU2MDpcXHRcXHRcXHRyZXR1cm4gLUVORVRVTlJFQUNIO1xcbjEyNTYxOlxcdFxcbjEyNTYyOlxcdFxcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxuMTI1NjM6XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuMTI1NjQ6XFx0XFxuMTI1NjU6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTI1NjY6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuMTI1Njc6XFx0XFx0XFx0b3BzID0gXFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xcbjEyNTY4OlxcdFxcdFxcdG1pbl9tc3MgPSA1MzY7XFxuMTI1Njk6XFx0XFx0XFx0YnJlYWs7XFxuMTI1NzA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuMTI1NzE6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4xMjU3MjpcXHRcXHRcXHRvcHMgPSBcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzO1xcbjEyNTczOlxcdFxcdFxcdG1pbl9tc3MgPSBJUFY2X01JTl9NVFUgLSA2MDtcXG4xMjU3NDpcXHRcXHRcXHRicmVhaztcXG4xMjU3NTpcXHQjZW5kaWZcXG4xMjU3NjpcXHRcXHRkZWZhdWx0OlxcbjEyNTc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNTc4OlxcdFxcdH1cXG4xMjU3OTpcXHRcXG4xMjU4MDpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19TVFJFQU0gfHwgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4xMjU4MTpcXHRcXHQgICAgc2tfaXNfbXB0Y3Aoc2spKVxcbjEyNTgyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNTgzOlxcdFxcbjEyNTg0OlxcdFxcdGlmIChhdHRycy1cXHUwMDNlbXNzIFxcdTAwM2MgbWluX21zcylcXG4xMjU4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU4NjpcXHRcXG4xMjU4NzpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZXdzY2FsZV9vaykge1xcbjEyNTg4OlxcdFxcdFxcdGlmICghUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nKSlcXG4xMjU4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6MzkuNDQ4NjAzMzA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg5NDk0MDE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZXNlIHBhcnRpY3VsYXIgbmV0d29yayBmdW5jdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIHN0cnVjdHVyZSwgSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZmlsdGVyaW5nIGxvZ2ljIHJlc2lkZXMuIEFuZCBhIHF1aWNrIGdsYW5jZSBjb25maXJtcyB0aGF0IGl0J3MgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXNuJ3QgZW50aXJlbHkgc3VycHJpc2luZy4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb3JlIGRlZXBseSwgc28gSSdsbCBhbHNvIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgYnVpbGQgcHJvY2VzcyBoYW5kbGVzIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlIG1vZHVsZXMgZml0IHRvZ2V0aGVyLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb25maXJtIG9yIHJlZnV0ZSB3aGF0IEkga25vdywgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6NDIuMzQzNTQ2OTA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDExMzI0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcXHRcXHRcXHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MzU5PXN0YXRpYyB2b2lkIHNrYl91cGRhdGVfcHJpbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDM4NS0gKlxcdEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlIHRoaXMgbG9vcGJhY2sgaXMgaGFwcGVuaW5nIGluXFxubmV0L2NvcmUvZGV2LmM6NDM4NjogKlxcdEBzazogIHNrIG5lZWRlZCB0byBiZSBhIG5ldGZpbHRlciBva2ZuXFxubmV0L2NvcmUvZGV2LmMtNDM4Ny0gKlxcdEBza2I6IGJ1ZmZlciB0byB0cmFuc21pdFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDk1PXN0YXRpYyBib29sIGNvbnZlcnRfYnBmX2xkX2FicyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKippbnNucClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3Ny0gKiAxKSBGaXJzdCBwYXNzIGZvciBjYWxjdWxhdGluZyB0aGUgbmV3IHByb2dyYW0gbGVuZ3RoOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODogKiAgIGJwZl9jb252ZXJ0X2ZpbHRlcihvbGRfcHJvZywgb2xkX2xlbiwgTlVMTCwgXFx1MDAyNm5ld19sZW4sIFxcdTAwMjZzZWVuX2xkX2FicylcXG5uZXQvY29yZS9maWx0ZXIuYy01NzktICpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MS0gKiAgICBqdW1wIG9mZnNldHMsIDJuZCBwYXNzIHJlbWFwcGluZzpcXG5uZXQvY29yZS9maWx0ZXIuYzo1ODI6ICogICBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIG5ld19wcm9nLCBcXHUwMDI2bmV3X2xlbiwgXFx1MDAyNnNlZW5fbGRfYWJzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4My0gKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjY9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX21pZ3JhdGVfZmlsdGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkxLVxcdC8qIDFzdCBwYXNzOiBjYWxjdWxhdGUgdGhlIG5ldyBwcm9ncmFtIGxlbmd0aC4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkyOlxcdGVyciA9IGJwZl9jb252ZXJ0X2ZpbHRlcihvbGRfcHJvZywgb2xkX2xlbiwgTlVMTCwgXFx1MDAyNm5ld19sZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5My1cXHRcXHRcXHRcXHQgXFx1MDAyNnNlZW5fbGRfYWJzKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEzMTEtXFx0LyogMm5kIHBhc3M6IHJlbWFwIHNvY2tfZmlsdGVyIGluc25zIGludG8gYnBmX2luc24gaW5zbnMuICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTMxMjpcXHRlcnIgPSBicGZfY29udmVydF9maWx0ZXIob2xkX3Byb2csIG9sZF9sZW4sIGZwLCBcXHUwMDI2bmV3X2xlbixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMzEzLVxcdFxcdFxcdFxcdCBcXHUwMDI2c2Vlbl9sZF9hYnMpO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo0Mi41NDQ2ODU5MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ3ODk0MDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBCUEYgYW5kIFRyYWZmaWMgQ29udHJvbCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBgbmV0L2NvcmUvZmlsdGVyLm9gIG9iamVjdCBpcyBidWlsdC4gSSBzZWUgaXQncyBpbmNsdWRlZCBpbiB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCB3aXRoIGBvYmoteWAsIGFuZCB0aGF0IHRoaXMgTWFrZWZpbGUsIGluIHR1cm4sIGhpbmdlcyBvbiBgQ09ORklHX05FVGAuIFRoYXQgbWFrZXMgc2Vuc2UgYXMgYSBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3lzY2FsbCBpbnRlZ3JhdGlvbiB3aXRoIFRyYWZmaWMgQ29udHJvbCAoVEMpLCBzcGVjaWZpY2FsbHkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoZXRoZXIgZnVuY3Rpb25zIHN1Y2ggYXMgYGJwZl9za19hc3NpZ25gLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciByZWdpc3RlcmVkIGJhc2VkIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZCB0aGVzZSBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZWlyIGluY2x1c2lvbiBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBoYW5kbGVkLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYWZmZWN0IHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgQlBGIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjQ1LjAyMzYzMTQ1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMzM2NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19hc3NpZ25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MzQ3OT1zdGF0aWMgaW50IGJwZl9za2JfcHJvdG9feGxhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdG9fcHJvdG8pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zNDkzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM0OTQ6c3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy0zNDk1LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zNTIwPUJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfcHJvdG8sIHN0cnVjdCBza19idWZmICosIHNrYiwgX19iZTE2LCBwcm90byxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1NTEtXFx0aWYgKHNrYl9za19pc19wcmVmZXRjaGVkKHNrYikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYzozNTUyOlxcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXFx1MDAzZXNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0zNTUzLVxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTgwMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MDEyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMTM6QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODAyMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvZmlsdGVyLmM6ODAyMzpcXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMjQtXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMzY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMzc6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19hc3NpZ24sXFxubmV0L2NvcmUvZmlsdGVyLmMtODAzOC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzcxLVxcdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NzI6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfYXNzaWduX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzMtXFx0Y2FzZSBCUEZfRlVOQ19za2Jfc2V0X3RzdGFtcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTE3PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19hZGRyX3NldF9zdW5fcGF0aChzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICpzYV9rZXJuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzctXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1Mzg6X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NjI6XFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU2My1cXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyODY0PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4NjU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY2LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo0NS41NDU5NzM4MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQ3MjY0OTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBicGZfc2tfYXNzaWduX3Byb3RvYCBhbmQgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYnBmX3NrX2Fzc2lnbl9wcm90b2AsIHdoaWNoIEknbSBwcmV0dHkgc3VyZSBnZXRzIHJldHVybmVkIGJ5IGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLCBhbmQgbWF5YmUgYSBmZXcgb3RoZXIgcGxhY2VzLi4uIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIGJlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY2FsbCBwYXRocy4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9za19hc3NpZ25fcHJvdG9gIGFuZCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGFyZSB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBodW50IGRvd24gdGhvc2UgcmVmZXJlbmNlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGUgZmlsdGVyaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBsb2dpYyB0aWVkIHRvIHRoZSBzb2NrZXQgYW5kIHNrYiBtYW5pcHVsYXRpb24gd2l0aGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjExOjU1LjAxODYyNTg0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzQxMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19hc3NpZ25fcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9ODAxMz1CUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MDM1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMzY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMzctXFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19hc3NpZ24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjU1PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzEtXFx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc3MjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19hc3NpZ25fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODc3My1cXHRjYXNlIEJQRl9GVU5DX3NrYl9zZXRfdHN0YW1wOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo1NS4xNDQ5NzUwMzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIxMTA2NzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUHJvdG9jb2wgTWFuaXB1bGF0aW9uIHdpdGggQlBGKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGxvb2sgaW50byBvcHRpb25zIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wgb2YgYSBwYWNrZXQgdXNpbmcgQlBGLiBMZXQgbWUgc2VlLi4uIEknbSB0aGlua2luZyBvZiBmb2N1c2luZyBteSBzZWFyY2ggb24gdGhvc2UgQlBGIGhlbHBlciBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBtYW5pcHVsYXRpbmcgcGFja2V0IHByb3RvY29scy4gU3BlY2lmaWNhbGx5LCBsZXQncyB6ZXJvIGluIG9uIGBicGZfc2tiX2NoYW5nZV9wcm90b19wcm90b2AgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyB0byBiZSByZWxldmFudC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgdW5kZXJzdGFuZCB0aGVpciBleGFjdCBiZWhhdmlvcnMuIEhvcGVmdWxseSwgb25lIG9mIHRoZXNlIGhlbHBlcnMgd2lsbCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gYWZ0ZXIsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMTo1Ny4zNTYwNDQxMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTM2ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTM0OTQ9c3RhdGljIGJvb2wgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1MTktXFxubmV0L2NvcmUvZmlsdGVyLmM6MzUyMDpCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzUyMS1cXHQgICB1NjQsIGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU2MC1cXG5uZXQvY29yZS9maWx0ZXIuYzozNTYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MzU2MjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9jaGFuZ2VfcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU2My1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDAyMD1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MDM4LVxcdCAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzOTpcXHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDAtXFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODY1NT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04Njg0LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9wcm90bzpcXG5uZXQvY29yZS9maWx0ZXIuYzo4Njg1OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODY4Ni1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdHlwZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTE6NTcuNDM5MTkxMzk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzNzQxNjcwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVENQIFJlcXVlc3QgU29ja2V0IEFzc2lnbm1lbnQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBrZXkgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBoYW5kbGVkLCBwcm9iYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQlBGLiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGl0cyB1c2UuIEJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGUgcmFiYml0IGhvbGUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSB3aGVyZSBgYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2tgIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgY29udGV4dCBoZXJlOyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHRoZSBnYXRla2VlcGVyIG9yIHZhbGlkYXRvciBmb3Igc2V0dGluZyB1cCB0aG9zZSByZXF1ZXN0IHNvY2tldHMuIFdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3b3VsZCBzaG93IG1lIHRoZSBjcnVjaWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjay4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwIG9yIHN0YXRpYyBhbmFseXNpcyB0b29scyBhbmQgdHJhY2UgdGhhdCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjowMS44MTMzNjMxMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTUzMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyODYyPUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19hZGRyKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODYzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY0OkJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4NjUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY2OkJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODY3LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI4OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk3LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk4OlxcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2ssXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MDEuODc2OTI0MjE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MDg0MDczMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfa2Z1bmNfc2V0X3RjcF9yZXFza2AgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2tgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcmVnaXN0cmF0aW9uLiBXaGVyZSBleGFjdGx5IGRvZXMgdGhpcyBrZnVuYyBnZXQgaG9va2VkIGludG8gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHNlZSBob3cgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBleHBvc2VzIGl0LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFRDUCBzdGFjay4gVW5kZXJzdGFuZGluZyBpdHMgcmVnaXN0cmF0aW9uIGdpdmVzIG1lIGEgaGFuZGxlIG9uIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgcmVsYXRlZCBCUEYgdG9vbHMuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBzZWFyY2ggYW5kIHNlZSB3aGVyZSB0aGlzIHJlZ2lzdHJhdGlvbiBpcyBoYXBwZW5pbmcuIEhvcGVmdWxseSwgdGhpcyBkb2Vzbid0IGxlYWQgZG93biBhIHJhYmJpdCBob2xlIG9mIG1hY3Jvcy4gSSdtIGhvcGluZyBmb3IgYSBjbGVhbiBhbmQgc2ltcGxlIHJlZ2lzdHJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjowNC4yODUzMzU2MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjM4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9rZnVuY19zZXRfdGNwX3JlcXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyODkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfYWRkciA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5Ny1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTExPXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzMC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzMTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzMi1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjA0LjM1ODk3ODc0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTY2MTA5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBJbml0aWFsaXphdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciBlaXRoZXIgaW5pdGlhbGl6aW5nIGEgQlBGIGtmdW5jLCB1dGlsaXppbmcgYSBCUEYgc3lzdGVtIGNhbGwsIG9yIGNvbmZpZ3VyaW5nIGEgVHJhZmZpYyBDb250cm9sIChUQykgY2xhc3NpZmllciBhY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIGNvcmUgbG9naWMsIHdoaWNoIGxpa2VseSBzaXRzIGRlZXAgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBmdW5jdGlvbiBgYnBmX2tmdW5jX2luaXRgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGV4cGxvcmUuIE5vdywgYSByb3VnaCBndWVzcyBzYXlzIHRoZSBtYWluIGluaXRpYWxpemF0aW9uIG1pZ2h0IGJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyOTAwIG9yIHRoZXJlYWJvdXRzIHdpdGhpbiB0aGUgZmlsZSwgd2hpY2ggc2VlbXMgbGlrZSBhIHNlbnNpYmxlIHBsYWNlIHRvIGJlZ2luIHRoZSBpbnZlc3RpZ2F0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0J3MgYWNjdXJhdGUsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBwZXJ0aW5lbnQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjoxMy4zMjUwOTEzMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwNTpcXHRcXG4xMjkwNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuMTI5MDc6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI5MDg6XFx0XFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcXG4xMjkwOTpcXHR9O1xcbjEyOTEwOlxcdFxcbjEyOTExOlxcdHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuMTI5MTI6XFx0e1xcbjEyOTEzOlxcdFxcdGludCByZXQ7XFxuMTI5MTQ6XFx0XFxuMTI5MTU6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkxNjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkxNzpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkxODpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI5MTk6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyOTIwOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyMTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyMjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyOTIzOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyNDpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjkyNTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI5MjY6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG4xMjkyNzpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbjEyOTI4OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2YnBmX2tmdW5jX3NldF94ZHApO1xcbjEyOTI5OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG4xMjkzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG4xMjkzMTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG4xMjkzMjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuMTI5MzM6XFx0XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG4xMjkzNDpcXHR9XFxuMTI5MzU6XFx0bGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XFxuMTI5MzY6XFx0XFxuMTI5Mzc6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjEyOTM4OlxcdFxcbjEyOTM5OlxcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxcbjEyOTQwOlxcdCAqXFxuMTI5NDE6XFx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcXG4xMjk0MjpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjk0MzpcXHQgKlxcbjEyOTQ0OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjEzLjMyNTYxOTgxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjI1ODEwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIGVuYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiB1c2luZyBzeXN0ZW0gY2FsbHMsIFRDIChUcmFmZmljIENvbnRyb2wpLCBhbmQgY2xzYWN0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkOyB0aGF0J3MgdGhlIGtleSB0byBiZWluZyBhYmxlIHRvIGxvYWQgZUJQRiBwcm9ncmFtcy4gVGhlbiwgZm9yIFRDIGFjdGlvbnMgYW5kIGZpbHRlcnMgdG8gd29yaywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05FVF9DTFNfQUNUYCBpcyBhbHNvIGVuYWJsZWQuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIHNob3VsZCBjaGVjayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmc2ApIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBjb21waWxlIHBhcnRzIG9mIHRoZSBCUEYgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgYnBmX3NrX2Fzc2lnbmAgYW5kIGBicGZfc2tiX2NoYW5nZV9wcm90b2AuIEknbGwgaGF2ZSBhIGxvb2sgYXQgbGluZXMgMzQ4MC0zNTMwLCA4MDEwLTgwNDAgYW5kIDg2NTAtODc4MCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGltcGxlbWVudGVkIGFuZCBpZiB0aGV5J3JlIGRlcGVuZGVudCBvbiBhbnkgc3BlY2lmaWMgY29uZmlncy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MTcuNTUxNDMyNDY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDg1OlxcdFxcdFxcdHJldHVybiBicGZfc2tiX3Byb3RvXzRfdG9fNihza2IpO1xcbjM0ODY6XFx0XFxuMzQ4NzpcXHRcXHRpZiAoZnJvbV9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSBcXHUwMDI2XFx1MDAyNlxcbjM0ODg6XFx0XFx0ICAgICAgdG9fcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApKVxcbjM0ODk6XFx0XFx0XFx0cmV0dXJuIGJwZl9za2JfcHJvdG9fNl90b180KHNrYik7XFxuMzQ5MDpcXHRcXG4zNDkxOlxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMzQ5MjpcXHR9XFxuMzQ5MzpcXHRcXG4zNDk0OlxcdHN0YXRpYyBib29sIGJwZl9za19hc3NpZ25fZmFtaWx5X29rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuMzQ5NTpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbjM0OTY6XFx0e1xcbjM0OTc6XFx0XFx0dW5zaWduZWQgc2hvcnQgZmFtaWx5O1xcbjM0OTg6XFx0XFxuMzQ5OTpcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4zNTAwOlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbjM1MDE6XFx0XFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDtcXG4zNTAyOlxcdFxcdFxcdGJyZWFrO1xcbjM1MDM6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4zNTA0OlxcdFxcdFxcdGZhbWlseSA9IEFGX0lORVQ2O1xcbjM1MDU6XFx0XFx0XFx0YnJlYWs7XFxuMzUwNjpcXHRcXHRkZWZhdWx0OlxcbjM1MDc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzUwODpcXHRcXHR9XFxuMzUwOTpcXHRcXG4zNTEwOlxcdFxcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cXG4zNTExOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcXG4zNTEyOlxcdFxcdFxcdHJldHVybiBpbmV0X3JlcXNrKHNrKS1cXHUwMDNlcnNrX29wcy1cXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcXG4zNTEzOlxcdFxcbjM1MTQ6XFx0XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XFxuMzUxNTpcXHRcXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMzUxNjpcXHRcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuMzUxNzpcXHRcXHRcXHQhaXB2Nl9vbmx5X3NvY2soc2spKTtcXG4zNTE4OlxcdH1cXG4zNTE5OlxcdFxcbjM1MjA6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxcbjM1MjE6XFx0XFx0ICAgdTY0LCBmbGFncylcXG4zNTIyOlxcdHtcXG4zNTIzOlxcdFxcdGludCByZXQ7XFxuMzUyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MTcuNTUxODMyMjU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5Mzc4NDcxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0YXRpYyBGdW5jdGlvbiBUYXJnZXRpbmcgaW4gRm9jdXNTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGNhbiBJIGV2ZW4gdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgd2l0aGluIEZvY3VzU3ltYm9scz8gUnVsZSA0IGNvbWVzIHRvIG1pbmQsIHRoZSBvbmUgYWJvdXQgaGFuZGxpbmcgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gSXQgc3RhdGVzIHRoYXQgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGxhY2sgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiBgdm1saW51eGAsIGFuZCB0aGVyZWZvcmUgY2FuJ3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgY292ZXJhZ2UgZmlsdGVycy4gQnV0IGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AgaXMgKm5vdCogaW4gYSBoZWFkZXI7IGl0J3Mgc3RhdGljLCB5ZXMsIGJ1dCBpdCByZXNpZGVzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgZGVwZW5kaW5nIG9uIGlubGluaW5nLCBHQ0MvQ2xhbmcgKm1pZ2h0KiBpbmxpbmUgaXQsIGFuZCBpZiBpdCdzIGlubGluZWQsIEknbSBzY3Jld2VkLCByaWdodD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgYW5kIHRoZSBjaGFuZ2VzLlxuXG5Tbywgd2hvJ3MgY2FsbGluZyBpdD8gU3BlY2lmaWNhbGx5LCB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIGFsb25nIHdpdGggdGhpcyBzdGF0aWMgZnVuY3Rpb24/IExldCdzIHNlZS4uLiBJIGtub3cgYGJwZl9za19hc3NpZ25gIGlzIG9uZSwgc2luY2UgaXQncyB1c2VkIGluIHRoZSBjb2RlIHdoZXJlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkLiBJdCdzIHVzZWQgaW4gYEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgLi4uKWAuIFJpZ2h0LCBgQlBGX0NBTExfM2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHN5bWJvbCBuYW1lIGluIHRoZSBrZXJuZWwuIElzIGl0IGBfX19icGZfc2tfYXNzaWduYCBvciBwbGFpbiBgYnBmX3NrX2Fzc2lnbmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQlBGX0NBTExfYCBtYWNyb3MgZXhwYW5kIHRvIHRyYWNrIGhvdyB0aGlzIGdldHMgZGVmaW5lZC4gVGltZSB0byBlaXRoZXIgYGdyZXBwZXJgIHRoaXMgb3IgZGlnIGludG8gYHZtbGludXhgL2BrYWxsc3ltc2AgdG8gZmluZCBob3cgYEJQRl9DQUxMX2AgZnVuY3Rpb25zIGFyZSBuYW1lZC4gT3IgbWF5YmUgZXZlbiBjaGVjayBob3cgc3l6a2FsbGVyIHRhcmdldHMgdGhvc2Uga2luZHMgb2YgZnVuY3Rpb25zLiBJIGhhdmUgdG8gZmluZCB0aGUgcmVhbCBzeW1ib2wgdG8gcHJvY2VlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjoyMS40ODk2ODM2MjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjUzNTIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEJQRl9DQUxMXzNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY4MS0jZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgyOiNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02ODMtI2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MjEuNjg2MjY0MzY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwNjE4NzAyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBDb3JlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgQlBGIG9wZXJhdGlvbiwgYEJQRl9DQUxMX3hgLiBSaWdodCwgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBoZWFkZXIgZmlsZS4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBCUEYgcHJvZ3JhbXMgYXJlIGNvbnN0cnVjdGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgbGlrZWx5IHNvbWUgbWFjcm8gbWFnaWMgZGVmaW5pbmcgdGhlIG9wY29kZSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29tbWVudHMgZXhwbGFpbmluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgdXNhZ2UgY29uc3RyYWludHMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBncm91bmR3b3JrIEkgbmVlZCB0byB3b3JrIHdpdGggdGhpcyBmdW5jdGlvbiBwcm9wZXJseS4gSSB3aWxsIG5vdyBleGFtaW5lIHRoaXMgY2xvc2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGV4cG9zZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQyMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjIzLjc0ODEzNjY0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjYxOlxcdFxcbiA2NjI6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NjM6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY2NDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY2NTpcXHRcXG4gNjY2OlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjY3OlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Njg6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY2OTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjcwOlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NzE6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjczOlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NzQ6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY3NTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjc2OlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2Nzk6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgwOlxcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4MTpcXHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2ODI6XFx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjgzOlxcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY4NDpcXHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2ODU6XFx0XFxuIDY4NjpcXHQjZGVmaW5lIE5PVFJBQ0VfQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBub3RyYWNlLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjg3OlxcdFxcbiA2ODg6XFx0I2RlZmluZSBicGZfY3R4X3JhbmdlKFRZUEUsIE1FTUJFUilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDY4OTpcXHRcXHRvZmZzZXRvZihUWVBFLCBNRU1CRVIpIC4uLiBvZmZzZXRvZmVuZChUWVBFLCBNRU1CRVIpIC0gMVxcbiA2OTA6XFx0I2RlZmluZSBicGZfY3R4X3JhbmdlX3RpbGwoVFlQRSwgTUVNQkVSMSwgTUVNQkVSMilcXHRcXHRcXHRcXHRcXFxcXFxuIDY5MTpcXHRcXHRvZmZzZXRvZihUWVBFLCBNRU1CRVIxKSAuLi4gb2Zmc2V0b2ZlbmQoVFlQRSwgTUVNQkVSMikgLSAxXFxuIDY5MjpcXHQjaWYgQklUU19QRVJfTE9ORyA9PSA2NFxcbiA2OTM6XFx0IyBkZWZpbmUgYnBmX2N0eF9yYW5nZV9wdHIoVFlQRSwgTUVNQkVSKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNjk0OlxcdFxcdG9mZnNldG9mKFRZUEUsIE1FTUJFUikgLi4uIG9mZnNldG9mZW5kKFRZUEUsIE1FTUJFUikgLSAxXFxuIDY5NTpcXHQjZWxzZVxcbiA2OTY6XFx0IyBkZWZpbmUgYnBmX2N0eF9yYW5nZV9wdHIoVFlQRSwgTUVNQkVSKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNjk3OlxcdFxcdG9mZnNldG9mKFRZUEUsIE1FTUJFUikgLi4uIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKyA4IC0gMVxcbiA2OTg6XFx0I2VuZGlmIC8qIEJJVFNfUEVSX0xPTkcgPT0gNjQgKi9cXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjoyMy43NDg1NTU1NjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM1ODcwMDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5pbmcgdGhlIGFjdHVhbCBCUEYga2Z1bmMgc2lnbmF0dXJlIGFzIGBhdHRyIHU2NCBuYW1lKC4uLilgIHdoaWNoIGludGVybmFsbHkgY2FsbHMgYF9fX18jI25hbWVgLiBSaWdodCwgc28gdGhhdCdzIHdoZXJlIHRoZSBzeW1ib2wgaW4gYHZtbGludXhgIGNvbWVzIGZyb20gLSBpdCAqaXMqIHNpbXBseSB0aGUgYG5hbWVgIGFzIHdlJ2QgZXhwZWN0LiBGb3IgaW5zdGFuY2UsIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgYW5kIGBicGZfc2tfYXNzaWduYCBhcmUgbGl0ZXJhbGx5IHRoYXQuIEV2ZW4gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBpcyBhIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soLi4uKWAsIHNvLCBhZ2FpbiwgaXQncyBqdXN0IGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AuIEFuZCB0aGUgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayguLi4pYC4gR29vZCB0byBub3RlIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpbGUgcG90ZW50aWFsbHkgaW5saW5lZCwgY291bGQgc3RpbGwgYmUgY29uc2lkZXJlZCBmb3IgdHJhY2luZy4gQW5kIHRob3NlIGVudHJ5IHBvaW50cywgYGJwZl9za19hc3NpZ25gLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gLCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLCBhcmUgdGhlIGRpcmVjdCBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoISBTZWVtcyBsaWtlIHdlIHNob3VsZCBhbHNvIGluY2x1ZGUgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC5cblxuTm93LCBiZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucywgbGV0J3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvc3NpYmxlIGNhbGwgbG9jYXRpb25zLiBIYW5nIG9uLCB3YWl0LCBiZXR0ZXIgeWV0LCBsZXQncyB0cmFjZSB3aGVyZSBgYnBmX3NrX2Fzc2lnbmAgY2FuIGJlIGNhbGxlZCBmcm9tLiBJcyBpdCBjYWxsZWQgZnJvbSBhIHBsYWNlIGxpa2UgYHNrX2xvb2t1cGAgb3IgYHNvY2tvcHNgIG9yIGFueXdoZXJlIGVsc2U/IEFoLCBob2xkIG9uLi4uIHRoZSBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBoYXMgdGhlIGRlZmluaXRpb246IGBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKWAuIFJpZ2h0ISBPa2F5LCBsZXQncyBhdm9pZCBzcGVuZGluZyBhbGwgZGF5IGRvaW5nIHRoaXMgbWFudWFsbHkgLSBsZXQncyBoaXQgYGdyZXBwZXJgIGFuZCBzZWUgYWxsIHRoZSBrZXJuZWwgZGVmaW5pdGlvbnMgb2YgYGJwZl9za19hc3NpZ25gLiBUaGF0IHNob3VsZCBzaG93IHRoZSByZWFsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MjguMTA3MjYwMjMyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEzMTA5MDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19hc3NpZ25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0PTExPVdoZW4gaW52b2tlZCBCUEYgc2tfbG9va3VwIHByb2dyYW0gY2FuIHNlbGVjdCBhIHNvY2tldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6MTI6aW5jb21pbmcgcGFja2V0IGJ5IGNhbGxpbmcgdGhlIGBgYnBmX3NrX2Fzc2lnbigpYGAgQlBGIGhlbHBlciBmdW5jdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtMTMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q9NTg9QSBCUEYgc2tfbG9va3VwIHByb2dyYW0gY2FuIGFsc28gc2VsZWN0IGEgc29ja2V0IHRvIHJlY2VpdmUgdGhlIHBhY2tldCBieVxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdDo1OTpjYWxsaW5nIGBgYnBmX3NrX2Fzc2lnbigpYGAgQlBGIGhlbHBlci4gVHlwaWNhbGx5LCB0aGUgcHJvZ3JhbSBsb29rcyB1cCBhIHNvY2tldFxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC02MC1pbiBhIG1hcCBob2xkaW5nIHNvY2tldHMsIHN1Y2ggYXMgYGBTT0NLTUFQYGAgb3IgYGBTT0NLSEFTSGBgLCBhbmQgcGFzc2VzIGFcXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q6NjE6YGBzdHJ1Y3QgYnBmX3NvY2sgKmBgIHRvIGBgYnBmX3NrX2Fzc2lnbigpYGAgaGVscGVyIHRvIHJlY29yZCB0aGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtNjItc2VsZWN0aW9uLiBTZWxlY3RpbmcgYSBzb2NrZXQgb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlIHByb2dyYW0gaGFzIHRlcm1pbmF0ZWRcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdD04MT1yZWNlaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBzb2NrZXQgbG9va3VwLiBOYW1lbHk6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtODYtKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIEw0IHBvcnQsXFxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0Ojg3OiogdGhlIHNvY2tldCB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkIHdpdGggYGBicGZfc2tfYXNzaWduKClgYC5cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3QtODgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9wcm9nX3NrX2xvb2t1cC5yc3Q9OTA9aGVhZGVyLCBhbmQgYGJwZi1oZWxwZXJzKDcpXFxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0LTkxLVxcdTAwM2NodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2JwZi1oZWxwZXJzLjcuaHRtbFxcdTAwM2VgXyBtYW4tcGFnZSBzZWN0aW9uXFxuRG9jdW1lbnRhdGlvbi9icGYvcHJvZ19za19sb29rdXAucnN0OjkyOmZvciBgYGJwZl9za19hc3NpZ24oKWBgIGZvciBkZXRhaWxzLlxcbkRvY3VtZW50YXRpb24vYnBmL3Byb2dfc2tfbG9va3VwLnJzdC05My1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTQ2LSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1NDc6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKnNrLCB1NjQgZmxhZ3MpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NDgtICpcXHREZXNjcmlwdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ1NzgtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NDU3OTogKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTgwLSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM0Nzk9c3RhdGljIGludCBicGZfc2tiX3Byb3RvX3hsYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHRvX3Byb3RvKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5My1cXG5uZXQvY29yZS9maWx0ZXIuYzozNDk0OnN0YXRpYyBib29sIGJwZl9za19hc3NpZ25fZmFtaWx5X29rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtMzQ5NS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MzUyMD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zNTUxLVxcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmM6MzU1MjpcXHQgICAgIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2tiLVxcdTAwM2VzaykpXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU1My1cXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MDAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODAxMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo4MDEzOkJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy04MDE0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMjItXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgwMjM6XFx0aWYgKCFicGZfc2tfYXNzaWduX2ZhbWlseV9vayhza2IsIHNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy04MDI0LVxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODAzNS1cXG5uZXQvY29yZS9maWx0ZXIuYzo4MDM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2Fzc2lnbl9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo4MDM3OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfYXNzaWduLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTgwMzgtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc3MS1cXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzcyOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2Fzc2lnbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NzczLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX3NldF90c3RhbXA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUxNz1fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfYWRkcl9zZXRfc3VuX3BhdGgoc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqc2Ffa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTM4Ol9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl90Y3BfcmVxX2F0dHJzICphdHRycywgaW50IGF0dHJzX19zeilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTYxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTYyOlxcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NjMtXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg2ND1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcXG4tLVxcbnNjcmlwdHMvYnBmX2RvYy5weT02OTI9Y2xhc3MgUHJpbnRlckhlbHBlcnNIZWFkZXIoUHJpbnRlcik6XFxuLS1cXG5zY3JpcHRzL2JwZl9kb2MucHktODIxLSAgICAgICAgJ2JwZl9nZXRfc29ja2V0X2Nvb2tpZScsXFxuc2NyaXB0cy9icGZfZG9jLnB5OjgyMjogICAgICAgICdicGZfc2tfYXNzaWduJyxcXG5zY3JpcHRzL2JwZl9kb2MucHktODIzLSAgICBdXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU0Ni0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NTQ3OiAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpzaywgdTY0IGZsYWdzKVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTQ4LSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NTc4LSAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ1Nzk6ICogbG9uZyBicGZfc2tfYXNzaWduKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgsIHN0cnVjdCBicGZfc29jayAqc2ssIHU2NCBmbGFncylcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDU4MC0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oPTYzPXN0cnVjdCBicGZfdGNwX3JlcV9hdHRycztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oOjY0OmV4dGVybiBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC02NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KSBfX2tzeW07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9hc3NpZ25fcmV1c2UuYz02Nz1hc3NpZ25fc2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYXNzaWduX3JldXNlLmMtNzQtXFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Fzc2lnbl9yZXVzZS5jOjc1OlxcdHJldCA9IGJwZl9za19hc3NpZ24oc2tiLCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYXNzaWduX3JldXNlLmMtNzYtXFx0YnBmX3NrX3JlbGVhc2Uoc2spO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jPTY2PXN0YXRpYyBpbnQgaGFuZGxlX2lwX3RjcChzdHJ1Y3QgZXRoaGRyICpldGgsIHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xMzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jOjEzOTpcXHRcXHRpZiAoYnBmX3NrX2Fzc2lnbihza2IsIHJlcV9zaywgMCkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmMtMTQwLVxcdFxcdFxcdExPRygpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jLTE1Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9idGZfc2tjX2Nsc19pbmdyZXNzLmM6MTU3OlxcdFxcdGlmIChicGZfc2tfYXNzaWduKHNrYiwgdHAsIDApKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jLTE1OC1cXHRcXHRcXHRMT0coKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNjgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfYnRmX3NrY19jbHNfaW5ncmVzcy5jOjE2OTpcXHRpZiAoYnBmX3NrX2Fzc2lnbihza2IsIGJwZl9za2MsIDApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2J0Zl9za2NfY2xzX2luZ3Jlc3MuYy0xNzAtXFx0XFx0TE9HKCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYz0xMDI9aGFuZGxlX3VkcChzdHJ1Y3QgX19za19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIGJvb2wgaXB2NClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jLTEyNi1hc3NpZ246XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmM6MTI3OlxcdHJldCA9IGJwZl9za19hc3NpZ24oc2tiLCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTI4LVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jPTEzMz1oYW5kbGVfdGNwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgYm9vbCBpcHY0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmMtMTY1LWFzc2lnbjpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYzoxNjY6XFx0cmV0ID0gYnBmX3NrX2Fzc2lnbihza2IsIHNrLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYy0xNjctXFx0YnBmX3NrX3JlbGVhc2Uoc2spO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfYXNzaWduLmM9MTcxPVNFQyhcXFwidGNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2Fzc2lnbi5jOjE3MjppbnQgYnBmX3NrX2Fzc2lnbl90ZXN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19hc3NpZ24uYy0xNzMte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MTA5PWludCByZWRpcl9wb3J0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xMjAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTIxOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTIyLVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTEyOD1pbnQgcmVkaXJfaXA0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xNDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTQ0OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTQ1LVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE1MT1pbnQgcmVkaXJfaXA2KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xNjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MTcwOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTcxLVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTE3Nj1pbnQgc2VsZWN0X3NvY2tfYShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMTg0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjE4NTpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTE4Ni1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0xOTE9aW50IHNlbGVjdF9zb2NrX2Ffbm9fcmV1c2Vwb3J0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0xOTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjAwOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX05PX1JFVVNFUE9SVCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjAxLVxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTIwNj1pbnQgc2VsZWN0X3NvY2tfYihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X21kICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yMTQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjE1Oi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbigpIHJldHVybnMgLUVFWElTVCBpZiBzb2NrZXQgYWxyZWFkeSBzZWxlY3RlZC4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yMTYtU0VDKFxcXCJza19sb29rdXBcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTIxNz1pbnQgc2tfYXNzaWduX2VleGlzdChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjI1LVxcdFxcdGdvdG8gb3V0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjIyNjpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIyNy1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjMzLVxcdFxcdGdvdG8gb3V0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjIzNDpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTIzNS1cXHRpZiAoZXJyICE9IC1FRVhJU1QpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI0Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyNDg6LyogQ2hlY2sgdGhhdCBicGZfc2tfYXNzaWduKEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKSBjYW4gb3ZlcnJpZGUgc2VsZWN0aW9uLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI0OS1TRUMoXFxcInNrX2xvb2t1cFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MjUwPWludCBza19hc3NpZ25fcmVwbGFjZV9mbGFnKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNTgtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjU5OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMjYwLVxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNjYtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjY3OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI2OC1cXHRpZiAoZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yNzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MjgwOi8qIENoZWNrIHRoYXQgYnBmX3NrX2Fzc2lnbihzaz1OVUxMKSBpcyBhY2NlcHRlZC4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yODEtU0VDKFxcXCJza19sb29rdXBcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTI4Mj1pbnQgc2tfYXNzaWduX251bGwoc3RydWN0IGJwZl9za19sb29rdXAgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI4OC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzoyODk6XFx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5MC1cXHRpZiAoZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0yOTctXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6Mjk4OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTI5OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMDUtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzA2OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBOVUxMLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMDctXFx0aWYgKGVyciAhPSAtRUVYSVNUKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTMwOC1cXHRcXHRnb3RvIG91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYzozMDk6XFx0ZXJyID0gYnBmX3NrX2Fzc2lnbihjdHgsIE5VTEwsIEJQRl9TS19MT09LVVBfRl9SRVBMQUNFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMTAtXFx0aWYgKGVycilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMTEtXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzEyOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTMxMy1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9MzI1PWludCBhY2Nlc3NfY3R4X3NrKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy0zMzktXFx0XFx0Z290byBvdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6MzQwOlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzazEsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM0MS1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzUyLVxcdC8qIFJlc2V0IHNlbGVjdGlvbiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjM1MzpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgTlVMTCwgQlBGX1NLX0xPT0tVUF9GX1JFUExBQ0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTM1NC1cXHRpZiAoZXJyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzYyLVxcdFxcdGdvdG8gb3V0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjM2MzpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2syLCBCUEZfU0tfTE9PS1VQX0ZfUkVQTEFDRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtMzY0LVxcdGlmIChlcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYz0zOTE9aW50IGN0eF9uYXJyb3dfYWNjZXNzKHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy01NjYtXFx0aWYgKHNrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6NTY3OlxcdFxcdGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTY4LVxcdFxcdGJwZl9za19yZWxlYXNlKHNrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jPTU3NT1pbnQgc2tfYXNzaWduX2Vzb2Nrbm9zdXBwb3J0KHN0cnVjdCBicGZfc2tfbG9va3VwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19sb29rdXAuYy01ODQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM6NTg1OlxcdGVyciA9IGJwZl9za19hc3NpZ24oY3R4LCBzaywgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNTg2LVxcdGlmIChlcnIgIT0gLUVTT0NLVE5PU1VQUE9SVCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmM9NjI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHNlbGVjdF9zZXJ2ZXJfYShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfbG9va3VwLmMtNjM1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jOjYzNjpcXHRlcnIgPSBicGZfc2tfYXNzaWduKGN0eCwgc2ssIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX2xvb2t1cC5jLTYzNy1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jPTUwNz1zdGF0aWMgaW50IHRjcF9oYW5kbGVfYWNrKHN0cnVjdCB0Y3Bfc3luY29va2llICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTU0OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jOjU1MDpcXHRyZXQgPSBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhjdHgtXFx1MDAzZXNrYiwgc2ssIFxcdTAwMjZjdHgtXFx1MDAzZWF0dHJzLCBzaXplb2YoY3R4LVxcdTAwM2VhdHRycykpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmMtNTUxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjozMC4zMjAzNzU1NjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMDU0NDk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBTa19Mb29rdXAgQXNzaWduIEhvb2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3NrX2Fzc2lnbmAgd2l0aGluIGBza19sb29rdXBgLCBhbmQgSSBqdXN0IHJlYWxpemVkIHRoYXQncyBhY3R1YWxseSBhbiBhbGlhcyBvciBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24sIGBicGZfc2tfbG9va3VwX2Fzc2lnbmAuIEdvb2QgY2F0Y2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBhbmQgd2hlcmUgdGhlIGtlcm5lbCBpcyB1c2luZyBgQlBGX0ZVTkNfc2tfYXNzaWduYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIHNvIGxldCdzIGNoZWNrIGl0LiBJIG5lZWQgdG8gZ2V0IGEgbGlzdCBvZiBpdHMgdXNhZ2UgYXMgaXQgaXMgaW50ZWdyYWwgdG8gdGhlIHdvcmtpbmdzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6MzIuMzIwOTIzNjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDk3NDMxMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0ZVTkNfc2tfYXNzaWduXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9icGYuaD02MzgyPWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYzODctXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjYzODg6LyogQlBGX0ZVTkNfc2tfYXNzaWduIGZsYWdzIGluIGJwZl9za19sb29rdXAgY29udGV4dC4gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjM4OS1lbnVtIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc3MC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzcxOlxcdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzItXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfYXNzaWduX3Byb3RvO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIwNTA9c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1NC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA1NTpcXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1Ni1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTYzODI9ZW51bSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjM4Ny1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjM4ODovKiBCUEZfRlVOQ19za19hc3NpZ24gZmxhZ3MgaW4gYnBmX3NrX2xvb2t1cCBjb250ZXh0LiAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02Mzg5LWVudW0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjozNC42NzA2NzUwOTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjY0MzI5NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgRnVuY3Rpb24gQXNzaWdubWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgYHRjX2Nsc19hY3RfZnVuY19wcm90b2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCByZXR1cm5pbmcgYGJwZl9za19hc3NpZ25fcHJvdG9gLCB3aGljaCBpbiB0dXJuIHBvaW50cyB0byBgYnBmX3NrX2Fzc2lnbmAuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFzIHRoaXMgbGlrZWx5IG1lYW5zIHdlJ3JlIGFzc2lnbmluZyBhIHNvY2tldCwgYHNrYCwgdG8gc29tZXRoaW5nLiBGdXJ0aGVybW9yZSwgYHNrX2xvb2t1cF9mdW5jX3Byb3RvYCByZXR1cm5zIGBicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90b2AsIHNvIHdlIGFyZSBsaWtlbHkgbG9va2luZyB1cCBhbmQgdGhlbiBhc3NpZ25pbmcvbW9kaWZ5aW5nIHNvbWV0aGluZyBoZXJlLiBBbHNvIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGFsc28gcmV0dXJucyBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9fcHJvdG9gLCB3aGljaCBpbmRpY2F0ZXMgd2UncmUgY2FwYWJsZSBvZiBjaGFuZ2luZyB0aGUgcHJvdG9jb2wgb24gYW4gYHNrYmAuXG5cbk5vdyB0aGluZ3MgZ2V0IHJlYWxseSBpbnRlcmVzdGluZzsgYGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrYCBzcGVjaWZpY2FsbHkgcmVnaXN0ZXJzIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2AgKmZvciogYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggVENQIHJlcXVlc3Qgc29ja2V0cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBjb250cm9sIChUQykgdXNpbmcgQlBGLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGF0J3MgaW50ZXJlc3RpbmcuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgY29uZmlncyB0aWVkIHRvIFRDIEJQRiwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCwgYW5kIHRoZSBgQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCAuLi4pYCBjYWxsIGl0c2VsZi4gR2l2ZW4gdGhlIFRDIGNvbnRleHQsIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBjaGVjayBgaW5pdC9LY29uZmlnYCBqdXN0IGluIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODY1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjQxLjMxMzk3MjUyOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODY3NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXFxubmV0L3NjaGVkL0tjb25maWctNzAzLVxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjQxLjQ1Njg0ODM5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDk4Njc4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBOZXR3b3JrIFNjaGVkdWxlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb25zIGZyb20gNzAwIHRvIDcyMC4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBhdmFpbGFibGUgbmV0d29yayBzY2hlZHVsZXIgZmVhdHVyZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYnVpbGQgZmxhZ3MuIEknbSBleHBlY3RpbmcgdGhpcyByYW5nZSB0byBjb3ZlciBhIHNwZWNpZmljIHNldCBvZiBzY2hlZHVsZXJzLCBwZXJoYXBzIGEgcmVjZW50IGFkZGl0aW9uIG9yIGEgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGdyb3VwLiBUaW1lIHRvIGdldCB0aGUgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjY1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjo0NS41NTU1Mjk0MjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cXG4gNzAxOlxcdFxcbiA3MDI6XFx0Y29uZmlnIE5FVF9DTFNfQUNUXFxuIDcwMzpcXHRcXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcbiA3MDQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNzA1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXFxuIDcwODpcXHRcXHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXFxuIDcwOTpcXHRcXHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cXG4gNzEwOlxcdFxcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdCAgQSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgaXByb3V0ZTIgcGFja2FnZSBpcyByZXF1aXJlZCB0byB1c2VcXG4gNzEzOlxcdFxcdCAgZXh0ZW5kZWQgbWF0Y2hlcy5cXG4gNzE0OlxcdFxcbiA3MTU6XFx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXFxuIDcxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBQb2xpY2luZ1xcXCJcXG4gNzE3OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzE4OlxcdFxcdGhlbHBcXG4gNzE5OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBkbyB0cmFmZmljIHBvbGljaW5nLCBpLmUuIHN0cmljdFxcbiA3MjA6XFx0XFx0ICBiYW5kd2lkdGggbGltaXRpbmcuIFRoaXMgYWN0aW9uIHJlcGxhY2VzIHRoZSBleGlzdGluZyBwb2xpY2luZ1xcbiA3MjE6XFx0XFx0ICBtb2R1bGUuXFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3MjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BvbGljZS5cXG4gNzI1OlxcdFxcbiA3MjY6XFx0Y29uZmlnIE5FVF9BQ1RfR0FDVFxcbiA3Mjc6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgYWN0aW9uc1xcXCJcXG4gNzI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTI6NDUuNTU1NjIwNzYzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcwODY3NDMxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIG1ha2Ugc3VyZSB0aG9zZSBCUEYgb3B0aW9ucyBhcmUgc2V0IGNvcnJlY3RseS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYm90aCBgTkVUX0NMU19CUEZgIGFuZCBgTkVUX0FDVF9CUEZgIGFyZSBlbmFibGVkLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciB0aGUgaW5mcmFzdHJ1Y3R1cmUgSSdtIHdvcmtpbmcgb24sIHNvIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGFyZSBib3RoIHNldCBhbmQgcmVhZHkgdG8gZ28uIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSBpZiB0aGV5J3JlIG5vdCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjUyLjY0MjM2NjY4NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyNTkwOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0JQRnxjb25maWcgTkVUX0FDVF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXFxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiQlBGLWJhc2VkIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz04MzA9Y29uZmlnIE5FVF9BQ1RfVkxBTlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODQwLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg0MTpjb25maWcgTkVUX0FDVF9CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy04NDItXFx0dHJpc3RhdGUgXFxcIkJQRiBiYXNlZCBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjUzLjMwNDk2NjQ5OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1ODg1OTE4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGFkZCBgQlBGX1NZU0NBTExgIHRvIHRoZSBjaGVja2xpc3QuIEl0J3MgYSBrZXkgcGllY2UgdG8gdmVyaWZ5LiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gY2hlY2sgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSB3YW50IHRvIHF1aWNrbHkgc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbiBwcm90b3R5cGVzOiBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBhbmQgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYC4gUHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3aWxsIHRlbGwgbWUgd2hldGhlciB0aGlzIHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWwgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyB3aWxsIGRpcmVjdGx5IGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMjo1OS4xOTA4OTA2MjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTUxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00NTY1PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDU2Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTY3OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1Njgtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEyOjU5LjI2NTA1MDY3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MTc4MDMxOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gQlBGIFByb2dyYW0gTG9hZGluZyoqXG5cbk9rYXksIHNvIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRgLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IHRvIGFjdHVhbGx5ICpsb2FkKiBCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB0aG9zZSBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2Agb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCwgSSBuZWVkIGBCUEZfU1lTQ0FMTGAsIGFuZCBlaXRoZXIgYE5FVF9DTFNfQUNUYCwgYE5FVF9DTFNfQlBGYCwgb3IgYE5FVF9BQ1RfQlBGYCwgcmlnaHQ/IE9idmlvdXMgdGhhdCBgQ09ORklHX05FVGAgaXMgcmVsZXZhbnQgaGVyZSAtIEknbSBkZWFsaW5nIHdpdGggdGhlIG5ldHdvcmsuIEJ1dCB3aGF0IGFib3V0IGBDT05GSUdfSU5FVGA/IE9yIGBDT05GSUdfSVBWNmAsIHBvdGVudGlhbGx5P1xuXG5Mb29raW5nIGF0IGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2AsIEkgc2VlIHRoYXQgaXQgdXNlcyBgaW5ldF9yZXFzayhzaylgIGFuZCBgaXB2Nl9vbmx5X3NvY2soc2spYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IElQdjQgYW5kIElQdjYgbWlnaHQgYmUgYXQgcGxheSBoZXJlLiBMZXQgbWUgY29uZmlybSBpZiBlaXRoZXIgYENPTkZJR19JTkVUYCBvciBgQ09ORklHX0lQVjZgIGFjdHVhbGx5IG1hdHRlcnMuIFRoZSBjaGVja3MgYXJlIHdpdGhpbiBgaW5ldF9yZXFzayhzayktXHUwMDNlcnNrX29wcy1cdTAwM2VmYW1pbHkgPT0gZmFtaWx5O2AgYW5kIGBpcHY2X29ubHlfc29jayhzaylgLlxuXG5Ob3csIEknbSB0aGlua2luZywgaXMgdGhlIGNvZGUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBndWFyZGVkIGJ5LCBvciBkb2VzIGl0IG90aGVyd2lzZSBkZXBlbmQgb24sIGBDT05GSUdfSU5FVGA/IEkgbmVlZCB0byBjaGVjayB0aGUgZmlsZSBpdHNlbGYgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIGBDT05GSUdfSU5FVGAgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODUyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjEzLjQ0MzA4NjE5N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4MjY2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjQyND1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDI5LX1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MzEtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01ODA4PXN0YXRpYyBpbnQgX19icGZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01ODE1LVxcdFxcdHJldHVybiBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MTY6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTctXFx0XFx0cmV0dXJuIHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTktXFx0XFx0cmV0dXJuIHNvbF9pcHY2X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MjA6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcXG5uZXQvY29yZS9maWx0ZXIuYy01ODIxLVxcdFxcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTgzOT1zdGF0aWMgaW50IF9fYnBmX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTg1MC1cXHRcXHRlcnIgPSBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTg1MTpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4NTItXFx0XFx0ZXJyID0gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4NTM6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4NTQtXFx0XFx0ZXJyID0gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MTY3PUJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX2dldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYxNzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjE3MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL2ZpbHRlci5jLTYxNzQtXFx0ICAgIG9wdG5hbWUgXFx1MDAzZT0gVENQX0JQRl9TWU4gXFx1MDAyNlxcdTAwMjYgb3B0bmFtZSBcXHUwMDNjPSBUQ1BfQlBGX1NZTl9NQUMpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyMDk9QlBGX0NBTExfMihicGZfc29ja19vcHNfY2JfZmxhZ3Nfc2V0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjE3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTg6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCAhc2tfZnVsbHNvY2soc2spKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjM0PUJQRl9DQUxMXzMoYnBmX2JpbmQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgYWRkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMzc6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzOC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXFx1MDAzZXNrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI2MS1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6NjI2MjojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02MjYzLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzMwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzMzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjMzMi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYzNjE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzgwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM4Mi1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDM9QlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NzEyLVxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MTQtXFx0Y2FzZSBBRl9JTkVUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjczNz1CUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjc1Ni1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6Njc1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NzU4LVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxODg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5ODojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk5LXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2Nl9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0MTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6ODQxOTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04NDIwLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQ5Nz1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTktXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODUyMDojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NTIxLVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjgtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg1Mjk6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtODUzMC1cXHRjYXNlIEJQRl9GVU5DX3NrX3N0b3JhZ2VfZ2V0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYwNj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzItI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMzojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NjM0LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2NTU9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc1MS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzUyOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NTMtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc5Mj14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODIxOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjItXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODg2Nz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg5NS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfbmV0bnNfY29va2llX3NvY2tfb3BzX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg4OTY6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODg5Ny1cXHRjYXNlIEJQRl9GVU5DX2xvYWRfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MDQtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfdGNwX3NvY2tfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODkwNTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04OTA2LVxcdGRlZmF1bHQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04OTQ5PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODk3My1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NzQ6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODk3NS1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY4OT1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTczMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTczMjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTczMy1zdGF0aWMgdm9pZCBicGZfaW5pdF9yZXVzZXBvcnRfa2VybihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKnJldXNlX2tlcm4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIxMT1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBza19sb29rdXBfdmVyaWZpZXJfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTYtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMTc6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMTgtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2OD1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzAtXFx0LyogQlRGIHR5cGVzIGZvciB0Y3BfdGltZXdhaXRfc29jayBhbmQgaW5ldF90aW1ld2FpdF9zb2NrIGFyZSBub3RcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3MTpcXHQgKiBnZW5lcmF0ZWQgaWYgQ09ORklHX0lORVQ9bi4gVHJpZ2dlciBhbiBleHBsaWNpdCBnZW5lcmF0aW9uIGhlcmUuXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzItXFx0ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3NS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3Ny1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyOTc9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjk4LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI5OTojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjMwMC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI3NzA9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3ODMtXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3ODQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3ODUtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTM6MTMuNTM1OTIwNjg2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NDgzODY3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRnVuY3Rpb24gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCwgd2hpY2ggZnJvbSBteSBub3Rlcywgc2hvdWxkIGJlIGFyb3VuZCBsaW5lIDEyNTM4IGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBzZWVtcyBuZXR3b3JraW5nLXJlbGF0ZWQsIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGlmIGl0cyB1c2UgaXMgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIGBDT05GSUdfSU5FVGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaGVyZS4gU28sIGxldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUgYmxvY2sgZW5jb21wYXNzaW5nIGxpbmVzIDEyNTMwIHRocm91Z2ggMTI1NDUgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIHF1aWNrbHkuIEknbSBsb29raW5nIGZvciBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIHNvbWV0aGluZyBsaWtlIGFuIGAjaWZkZWZgLCBgI2lmbmRlZmAsIG9yIG1heWJlIGV2ZW4gYW4gYCNpZmAgdGhhdCBtaWdodCBiZSBnYXRpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IGl0IHJlbGF0ZXMgdG8gZ2VuZXJhbCBpbnRlcm5ldHdvcmtpbmcgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTM6MjAuOTg0MzEyMzgzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MzA6XFx0XFxuMTI1MzE6XFx0XFx0dW4gPSAoc3RydWN0IHNvY2thZGRyX3VuICopc2Ffa2Vybi1cXHUwMDNldWFkZHI7XFxuMTI1MzI6XFx0XFx0bWVtY3B5KHVuLVxcdTAwM2VzdW5fcGF0aCwgc3VuX3BhdGgsIHN1bl9wYXRoX19zeik7XFxuMTI1MzM6XFx0XFx0c2Ffa2Vybi1cXHUwMDNldWFkZHJsZW4gPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIHN1bl9wYXRoX19zejtcXG4xMjUzNDpcXHRcXG4xMjUzNTpcXHRcXHRyZXR1cm4gMDtcXG4xMjUzNjpcXHR9XFxuMTI1Mzc6XFx0XFxuMTI1Mzg6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG4xMjUzOTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxcbjEyNTQwOlxcdHtcXG4xMjU0MTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpXFxuMTI1NDI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XFxuMTI1NDM6XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcztcXG4xMjU0NDpcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XFxuMTI1NDU6XFx0XFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7XFxuMTI1NDY6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbjEyNTQ3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4xMjU0ODpcXHRcXHRfX3UxNiBtaW5fbXNzO1xcbjEyNTQ5OlxcdFxcdHUzMiB0c29mZiA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjIwLjk4NTAxODU3M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjQ2MDg5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRDUC9JUCBTdGFjayBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLiBNeSBleWVzIGltbWVkaWF0ZWx5IGp1bXAgdG8gbGluZSAxMjU0MTogYCNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylgLiBPa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2ssIGFuZCB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIGxpa2VseSBlbmFibGluZyBvciBkaXNhYmxpbmcgU1lOIGNvb2tpZXMgYmFzZWQgb24gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbiBoZXJlLCBzbyBJIGNhbiBjaGVjayBpZiBTWU4gY29va2llcyBhcmUgZW5hYmxlZCBvciBub3QuXG5cbk5vdywgbGV0J3MgZXhwYW5kIG15IHZpZXcuIEknbGwgY2hlY2sgd2hhdCB0aGUgY29kZSBkb2VzOiBsaW5lcyAxMjU5NS0xMjYyMCwgcHJvYmFibHkgY29udGFpbnMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGFzcGVjdC4gSSBjYW4gc2VlIHRoYXQgdGhpcyBzZWdtZW50IGlzIGNydWNpYWwgZm9yIGhhbmRsaW5nIFNZTiBmbG9vZCBwcm90ZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBTWU4gY29va2llcyBiZWluZyBlbmFibGVkLiBJdCBpcyBsaWtlbHkgY29uZmlndXJpbmcgaG93IHRoZSBrZXJuZWwgcmVzcG9uZHMgdG8gY29ubmVjdGlvbiBhdHRlbXB0cywgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIFNZTiBjb29raWUgbWVjaGFuaXNtIGl0c2VsZi4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgcGFyYW1ldGVycywgZGV0ZXJtaW5pbmcgdGhlIGZsb3csIHRoZSBjb25kaXRpb25zLCBhbmQgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uLCB0b28sIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcG9ydGlvbiBpcyBxdWl0ZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AvSVAgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzoyNC4yMzExMTE1MjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxODEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDA6XFx0XFx0XFx0aWYgKCFSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfdGltZXN0YW1wcykpXFxuMTI2MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI2MDI6XFx0XFxuMTI2MDM6XFx0XFx0XFx0dHNvZmYgPSBhdHRycy1cXHUwMDNlcmN2X3RzZWNyIC0gdGNwX25zX3RvX3RzKGF0dHJzLVxcdTAwM2V1c2VjX3RzX29rLCB0Y3BfY2xvY2tfbnMoKSk7XFxuMTI2MDQ6XFx0XFx0fVxcbjEyNjA1OlxcdFxcbjEyNjA2OlxcdFxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xcbjEyNjA3OlxcdFxcdGlmICghcmVxKVxcbjEyNjA4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEyNjA5OlxcdFxcbjEyNjEwOlxcdFxcdGlyZXEgPSBpbmV0X3JzayhyZXEpO1xcbjEyNjExOlxcdFxcdHRyZXEgPSB0Y3BfcnNrKHJlcSk7XFxuMTI2MTI6XFx0XFxuMTI2MTM6XFx0XFx0cmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcXG4xMjYxNDpcXHRcXHRyZXEtXFx1MDAzZXN5bmNvb2tpZSA9IDE7XFxuMTI2MTU6XFx0XFx0cmVxLVxcdTAwM2Vtc3MgPSBhdHRycy1cXHUwMDNlbXNzO1xcbjEyNjE2OlxcdFxcdHJlcS1cXHUwMDNldHNfcmVjZW50ID0gYXR0cnMtXFx1MDAzZXJjdl90c3ZhbDtcXG4xMjYxNzpcXHRcXG4xMjYxODpcXHRcXHRpcmVxLVxcdTAwM2VzbmRfd3NjYWxlID0gYXR0cnMtXFx1MDAzZXNuZF93c2NhbGU7XFxuMTI2MTk6XFx0XFx0aXJlcS1cXHUwMDNlcmN2X3dzY2FsZSA9IGF0dHJzLVxcdTAwM2VyY3Zfd3NjYWxlO1xcbjEyNjIwOlxcdFxcdGlyZXEtXFx1MDAzZXRzdGFtcF9va1xcdD0gISFhdHRycy1cXHUwMDNldHN0YW1wX29rO1xcbjEyNjIxOlxcdFxcdGlyZXEtXFx1MDAzZXNhY2tfb2sgPSAhIWF0dHJzLVxcdTAwM2VzYWNrX29rO1xcbjEyNjIyOlxcdFxcdGlyZXEtXFx1MDAzZXdzY2FsZV9vayA9ICEhYXR0cnMtXFx1MDAzZXdzY2FsZV9vaztcXG4xMjYyMzpcXHRcXHRpcmVxLVxcdTAwM2VlY25fb2sgPSAhIWF0dHJzLVxcdTAwM2VlY25fb2s7XFxuMTI2MjQ6XFx0XFxuMTI2MjU6XFx0XFx0dHJlcS1cXHUwMDNlcmVxX3VzZWNfdHMgPSAhIWF0dHJzLVxcdTAwM2V1c2VjX3RzX29rO1xcbjEyNjI2OlxcdFxcdHRyZXEtXFx1MDAzZXRzX29mZiA9IHRzb2ZmO1xcbjEyNjI3OlxcdFxcbjEyNjI4OlxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4xMjYyOTpcXHRcXHRza2ItXFx1MDAzZXNrID0gcmVxX3RvX3NrKHJlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjI0LjIzMzczNTUwNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzc2MjQwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uICoqSW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIFNZTiBjb29raWVzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGV5J3JlICpub3QqIGVuYWJsZWQuKiogTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgc28gd2hhdCBoYXBwZW5zIGlmIGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzbid0IHNldD8gV2hhdCdzIHRoZSBjb2RlIHBhdGggdGhlbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWx0ZXJuYXRpdmUgYmVoYXZpb3IuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJ20gZ29pbmcgdG8ganVtcCB0byBsaW5lcyAxMjYzMC0xMjY0NS4gVGhhdCBzaG91bGQgYmUgdGhlIHJlZ2lvbiBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYWx0ZXJuYXRpdmUgaGFuZGxpbmcgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZSBtYWNybyBub3QgYmVpbmcgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjI3LjYwOTk4MDgwMloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjMwOlxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfcGZyZWU7XFxuMTI2MzE6XFx0XFxuMTI2MzI6XFx0XFx0cmV0dXJuIDA7XFxuMTI2MzM6XFx0I2Vsc2VcXG4xMjYzNDpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI2MzU6XFx0I2VuZGlmXFxuMTI2MzY6XFx0fVxcbjEyNjM3OlxcdFxcbjEyNjM4OlxcdF9fYnBmX2tmdW5jIGludCBicGZfc29ja19vcHNfZW5hYmxlX3R4X3RzdGFtcChzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNrb3BzLFxcbjEyNjM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBmbGFncylcXG4xMjY0MDpcXHR7XFxuMTI2NDE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xMjY0MjpcXHRcXG4xMjY0MzpcXHRcXHRpZiAoc2tvcHMtXFx1MDAzZW9wICE9IEJQRl9TT0NLX09QU19UU1RBTVBfU0VORE1TR19DQilcXG4xMjY0NDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI2NDU6XFx0XFxuMTI2NDY6XFx0XFx0aWYgKGZsYWdzKVxcbjEyNjQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNjQ4OlxcdFxcbjEyNjQ5OlxcdFxcdHNrYiA9IHNrb3BzLVxcdTAwM2Vza2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjEzOjI3LjYxMDUyNzcyM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjczNDQ0ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgYW5kIFNZTiBDb29raWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlLCBhbmQgSSd2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byB0cmFjayBoZXJlLiBGaXJzdCwgaWYgYENPTkZJR19TWU5fQ09PS0lFU2AgaXMgKm5vdCogZW5hYmxlZCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBmbGF0IG91dCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoYXQncyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3Igb2YgYSBkZXBlbmRlbmN5LiBJIG5vdGljZWQgdGhpcyBvbiBsaW5lIDEyNTQxLCB0aGUgYCNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylgIGNoZWNrIGlzIGxpdGVyYWxseSAqcmlnaHQgYWZ0ZXIqIHRoZSBmdW5jdGlvbidzIGVudHJ5IHBvaW50ISBNZWFuaW5nIHRoYXQgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCB3aXRoaW4gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCBpcyBvbmx5IGdvaW5nIHRvIGJlIGhpdCBpZiBTWU4gY29va2llcyAqYXJlKiBlbmFibGVkLlxuXG5Ob3csIEknbSBhbHNvIHNlZWluZyByZWZlcmVuY2VzIHRvIGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0JQRmAsIGFuZCBgTkVUX0NMU19CUEZgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyBCUEYga2Z1bmNzIGFyZSBtYWRlIGF2YWlsYWJsZSBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gV2hhdCBlbmFibGVzICp0aGF0KiBmdW5jdGlvbmFsaXR5PyBOYXR1cmFsbHksIGl0J3MgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgcmVmcmVzaCBteSBtZW1vcnkgYWJvdXQgYENPTkZJR19TWU5fQ09PS0lFU2AgaW4gdGhlIEtjb25maWcgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4OTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzozMC44ODM5NzYxNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5Njc0NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNZTl9DT09LSUVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTI2Ny1cXG5uZXQvaXB2NC9LY29uZmlnOjI2ODpjb25maWcgU1lOX0NPT0tJRVNcXG5uZXQvaXB2NC9LY29uZmlnLTI2OS1cXHRib29sIFxcXCJJUDogVENQIHN5bmNvb2tpZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzozMC45Nzk5NTMwOTFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU4MTkxMDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgSVB2NCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8ganVtcCBvdmVyIGFyb3VuZCBsaW5lIDI2OC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIEknbSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVnYXJkaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIHN3aXRjaGVzLiBUaGlzIGlzIHdoZXJlIEkgb2Z0ZW4gZmluZCB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgSVB2NC1yZWxhdGVkIGZlYXR1cmVzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLCBvciBpZiBJIGFtIGp1c3QgdHJ5aW5nIHRvIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuIFRpbWUgdG8gZ2V0IGNvZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODoxMzozMy41NjE4NjcxNTZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjU6XFx0XFx0ICBnYXRlZC01KS4gVGhpcyByb3V0aW5nIHByb3RvY29sIGlzIG5vdCB1c2VkIHdpZGVseSwgc28gc2F5IE4gdW5sZXNzXFxuIDI2NjpcXHRcXHQgIHlvdSB3YW50IHRvIHBsYXkgd2l0aCBpdC5cXG4gMjY3OlxcdFxcbiAyNjg6XFx0Y29uZmlnIFNZTl9DT09LSUVTXFxuIDI2OTpcXHRcXHRib29sIFxcXCJJUDogVENQIHN5bmNvb2tpZSBzdXBwb3J0XFxcIlxcbiAyNzA6XFx0XFx0aGVscFxcbiAyNzE6XFx0XFx0ICBOb3JtYWwgVENQL0lQIG5ldHdvcmtpbmcgaXMgb3BlbiB0byBhbiBhdHRhY2sga25vd24gYXMgXFxcIlNZTlxcbiAyNzI6XFx0XFx0ICBmbG9vZGluZ1xcXCIuIFRoaXMgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrIHByZXZlbnRzIGxlZ2l0aW1hdGUgcmVtb3RlXFxuIDI3MzpcXHRcXHQgIHVzZXJzIGZyb20gYmVpbmcgYWJsZSB0byBjb25uZWN0IHRvIHlvdXIgY29tcHV0ZXIgZHVyaW5nIGFuIG9uZ29pbmdcXG4gMjc0OlxcdFxcdCAgYXR0YWNrIGFuZCByZXF1aXJlcyB2ZXJ5IGxpdHRsZSB3b3JrIGZyb20gdGhlIGF0dGFja2VyLCB3aG8gY2FuXFxuIDI3NTpcXHRcXHQgIG9wZXJhdGUgZnJvbSBhbnl3aGVyZSBvbiB0aGUgSW50ZXJuZXQuXFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdCAgU1lOIGNvb2tpZXMgcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgdGhpcyB0eXBlIG9mIGF0dGFjay4gSWYgeW91XFxuIDI3ODpcXHRcXHQgIHNheSBZIGhlcmUsIHRoZSBUQ1AvSVAgc3RhY2sgd2lsbCB1c2UgYSBjcnlwdG9ncmFwaGljIGNoYWxsZW5nZVxcbiAyNzk6XFx0XFx0ICBwcm90b2NvbCBrbm93biBhcyBcXFwiU1lOIGNvb2tpZXNcXFwiIHRvIGVuYWJsZSBsZWdpdGltYXRlIHVzZXJzIHRvXFxuIDI4MDpcXHRcXHQgIGNvbnRpbnVlIHRvIGNvbm5lY3QsIGV2ZW4gd2hlbiB5b3VyIG1hY2hpbmUgaXMgdW5kZXIgYXR0YWNrLiBUaGVyZVxcbiAyODE6XFx0XFx0ICBpcyBubyBuZWVkIGZvciB0aGUgbGVnaXRpbWF0ZSB1c2VycyB0byBjaGFuZ2UgdGhlaXIgVENQL0lQIHNvZnR3YXJlO1xcbiAyODI6XFx0XFx0ICBTWU4gY29va2llcyB3b3JrIHRyYW5zcGFyZW50bHkgdG8gdGhlbS4gRm9yIHRlY2huaWNhbCBpbmZvcm1hdGlvblxcbiAyODM6XFx0XFx0ICBhYm91dCBTWU4gY29va2llcywgY2hlY2sgb3V0IFxcdTAwM2NodHRwczovL2NyLnlwLnRvL3N5bmNvb2tpZXMuaHRtbFxcdTAwM2UuXFxuIDI4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTM6MzMuNTYxOTUzMTg2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMzkwMzM4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBJIG5lZWQuIGBDT05GSUdfU1lOX0NPT0tJRVNgIGlzIGRlZmluaXRlbHkgaW4gYG5ldC9pcHY0L0tjb25maWdgLCBhbmQgaXQgZGVwZW5kcyBvbiBgQ09ORklHX0lORVRgLCBhcyBleHBlY3RlZC4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgYENPTkZJR19JUFY2YCBmb3IgSVB2NiBwYWNrZXQgYW5kIHNvY2tldCBzdXBwb3J0LiBUaGUgY29kZSBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIHBhY2tldCdzIHByb3RvY29sIGRldGVybWluZXMgdGhlIGFkZHJlc3MgZmFtaWx5LCBhbmQgdGhlcmUncyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSBhbiBgQUZfSU5FVGAgc29ja2V0IHJlY2VpdmluZyBhbiBJUHY2IHBhY2tldCwgcmV0dXJuaW5nIGAtRUFGTk9TVVBQT1JUYC4gU28sIHRoYXQgbWVhbnMgSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX05FVGAsIGBDT05GSUdfSU5FVGAsIGFuZCBgQ09ORklHX0lQVjZgLlxuXG5Ob3csIG1vdmluZyBiZXlvbmQgYmFzaWMgbmV0d29yayBjb25maWd1cmF0aW9uLCBhbmQgaW50byBUQyBCUEYsIEknbSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX0NMU19BQ1RgLCBhbmQgYENPTkZJR19TWU5fQ09PS0lFU2AgYXMgdGhlc2Ugc2VlbSBpbXBvcnRhbnQuIFdhaXQsIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgSSdtIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfQUNUX0JQRmAgb3IgYENPTkZJR19ORVRfQ0xTX0JQRmAuIEknbSBnb2luZyB0byBuZWVkIHRoZSBCUEYtYmFzZWQgY2xhc3NpZmllciBhbmQgYWN0aW9uLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgdG8gbG9hZCBhbmQgcnVuIFRDIEJQRiBmb3IgYm90aCB0aGUgY2xhc3NpZmllciBhbmQgYWN0aW9uLiBMb29raW5nIGZ1cnRoZXIsIGl0IHNlZW1zIGBDT05GSUdfTkVUX0NMU19CUEZgIGlzIHRoZSBCUEYtYmFzZWQgY2xhc3NpZmllciAoYGNsc19icGZgKSwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIFRDIEJQRiAoYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCkuIEFuZCwgYENPTkZJR19ORVRfQUNUX0JQRmAgaXMgdGhlIEJQRi1iYXNlZCBhY3Rpb24gKGBhY3RfYnBmYCksIGZvciBgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1RgLiBSaWdodCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBORVRfQ0xTX0JQRmAgaW4gYG5ldC9zY2hlZC9LY29uZmlnYCB0byBiZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjEzLjk1MjI5NTc4MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNjMxMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTU1MD1jb25maWcgTkVUX0NMU19DR1JPVVBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU2MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1NjI6Y29uZmlnIE5FVF9DTFNfQlBGXFxubmV0L3NjaGVkL0tjb25maWctNTYzLVxcdHRyaXN0YXRlIFxcXCJCUEYtYmFzZWQgY2xhc3NpZmllclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MTQuNTY0OTMyOTY5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MzQ2NzYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZSBmb3IgTmV0d29yayBTY2hlZHVsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5ldHdvcmsgc2NoZWR1bGluZyBpcyBjb25maWd1cmVkLiBMZXQncyB6ZXJvIGluIG9uIGxpbmVzIDU2MCB0aHJvdWdoIDU4MCBvZiBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBsaWtlbHkgdG8gYmUuIEkgd2FudCB0byBzZWUgd2hhdCBvcHRpb25zIGFyZSBiZWluZyBwcmVzZW50ZWQsIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgcXVldWVpbmcgZGlzY2lwbGluZXMsIHRyYWZmaWMgc2hhcGluZywgYW5kIHBlcmhhcHMgc29tZSBwcmlvcml0aXphdGlvbiBzZXR0aW5ncy4gVGhlIHJlYWwgZ29hbCBpcyB0byByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgb3JnYW5pemVkIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgbGF0ZXIgY2hhbmdlcywgZXNwZWNpYWxseSBpZiBJIHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IHNjaGVkdWxlciBvciB0d2VhayBhbiBleGlzdGluZyBvbmUuIEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdHlwaWNhbCBmb3IgS2NvbmZpZyBmaWxlcywgYnV0IGV2ZW4gaWYgaXQgaXNuJ3QsIEkgc2hvdWxkIGJlIGFibGUgdG8gcGFyc2UgdGhlIGludGVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjE4LjI5OTYxNDE0OFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTYwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19jZ3JvdXAuXFxuIDU2MTpcXHRcXG4gNTYyOlxcdGNvbmZpZyBORVRfQ0xTX0JQRlxcbiA1NjM6XFx0XFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcbiA1NjQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTY1OlxcdFxcdGhlbHBcXG4gNTY2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxcbiA1Njc6XFx0XFx0ICBwcm9ncmFtbWFibGUgQlBGIChKSVQnZWQpIGZpbHRlcnMgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gZW1hdGNoZXMuXFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiA1NzA6XFx0XFx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cXG4gNTcxOlxcdFxcbiA1NzI6XFx0Y29uZmlnIE5FVF9DTFNfRkxPV0VSXFxuIDU3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiRmxvd2VyIGNsYXNzaWZpZXJcXFwiXFxuIDU3NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1NzU6XFx0XFx0aGVscFxcbiA1NzY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXFxuIDU3NzpcXHRcXHQgIGEgY29uZmlndXJhYmxlIGNvbWJpbmF0aW9uIG9mIHBhY2tldCBrZXlzIGFuZCBtYXNrcy5cXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuIDU4MDpcXHRcXHQgIGJlIGNhbGxlZCBjbHNfZmxvd2VyLlxcbiA1ODE6XFx0XFxuIDU4MjpcXHRjb25maWcgTkVUX0NMU19NQVRDSEFMTFxcbiA1ODM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hdGNoLWFsbCBjbGFzc2lmaWVyXFxcIlxcbiA1ODQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MTguMjk5NzY0ODU4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MzgzMDI0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGVCUEYgQ2xhc3NpZmllciBhbmQgQWN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgY2xzX2JwZmAgYW5kIGBhY3RfYnBmYCBhcmUgZW5hYmxlZCBhbmQgaXQgc2VlbXMgbGlrZSBgTkVUX0NMU19CUEZgIGFuZCBgTkVUX0FDVF9CUEZgIGFyZSB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcnVubmluZyB0aGVtLiBCdXQgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGJyb2FkZXIgcGljdHVyZSwgYW5kIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gaW52ZXN0aWdhdGUgaWYgYENPTkZJR19ORVRfU0NIRURgIGhhcyBzb21lIHJlbGV2YW5jZSBoZXJlLCBvciBpZiB0aGVyZSdzIGFuIGluZGlyZWN0IGRlcGVuZGVuY3kgaW4gcGxheS4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9DTFNfQlBGYCwgaW4gdHVybiwgZGVwZW5kIG9uIGBORVRfU0NIRURgLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBvcHRpb25zIHdpbGwgY2xhcmlmeSBob3cgdGhlIGVCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2ODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjIwLjgzODA3MTUxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgzNjUzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MjAuOTU2NDQxODc0WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTM5MzgxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBTb2NrZXQgQXNzaWdubWVudCBhbmQgUHJvdG9jb2wgVHJhbnNsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgLCBhbmQgbW9kaWZpZXMgYSBmZXcgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za2JfY2hhbmdlX3Byb3RvYCwgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIHRvIGNoZWNrIGZvciBhZGRyZXNzIGZhbWlseSBjb21wYXRpYmlsaXR5IHdoZW4gYXNzaWduaW5nIG9yIHJlLWFzc2lnbmluZyBzb2NrZXRzIHRvIHNrX2J1ZmZzLiBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZyBsb2dpYyBoZXJlLCBzbyBpdCdzIGltcG9ydGFudCB0byBnZXQgaXQgcmlnaHQuXG5cblNwZWNpZmljYWxseSwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCB2ZXJpZmllcyBpZiBhIHNvY2tldCdzIGFkZHJlc3MgZmFtaWx5IChlLmcuLCBJUHY0IG9yIElQdjYpIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdG9jb2wgb2YgYW4gaW5jb21pbmcgcGFja2V0LiBJZiB0aGUgZmFtaWx5IGNoZWNrIGZhaWxzLCBgYnBmX3NrX2Fzc2lnbmAgYW5kIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2Agbm93IHJldHVybiBgLUVBRk5PU1VQUE9SVGAuIFRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBjYXNlIHdpdGggYGJwZl9za2JfY2hhbmdlX3Byb3RvYCBpcyBhbHNvIHNpZ25pZmljYW50OyBpdCBpbnZhbGlkYXRlcyBhbnkgcHJlLWZldGNoZWQgc29ja2V0IGFzc2lnbm1lbnQgaWYgdGhlIHRyYW5zbGF0aW9uIHJlc3VsdHMgaW4gYW4gaW5jb21wYXRpYmxlIGFkZHJlc3MgZmFtaWx5IGFuZCBvcnBoYW5zIHRoZSBza2IsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW91ci5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlcyBtb2RpZnkgQlBGIG5ldHdvcmtpbmcgaGVscGVycywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIGV4aXN0aW5nIEJQRiBwcm9ncmFtcywgSSdkIHNheSBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIHRvIGVuc3VyZSB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBtaW5kZnVsIG9mIGR1YWwtc3RhY2sgSVB2NC1tYXBwZWQgSVB2NiBzb2NrZXRzIGFuZCBTWU4tcmVjZWl2ZWQgcmVxdWVzdCBzb2NrZXRzIHRvIG1ha2Ugc3VyZSB0aGUgZmFtaWx5IGNoZWNrcyBhcmUgd29ya2luZyBhcyB0aGV5IHNob3VsZC4gQWxzbywgdGVzdGluZyB3aXRoIHByb3RvY29sIHRyYW5zbGF0aW9ucyB0by9mcm9tIElQdjQvSVB2NiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIG9mIHByZWZldGNoZWQgc29ja2V0IGludmFsaWRhdGlvbi5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZTogYEJQRl9TWVNDQUxMYCwgYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JQRmAsIGBTWU5fQ09PS0lFU2AsIGBJTkVUYCwgYW5kIGBJUFY2YC4gVGhpcyBzaG91bGQgY292ZXIgdGhlIGJhc2UgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBwYXRjaC4gTm8gb3RoZXIgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyBzZWVtcyByZWxldmFudCBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayB0aGlzIGNvdmVycyBpdC4gTGV0J3MgZ2V0IHRvIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDM5LCJPdXRwdXRUb2tlbnMiOjIzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MzIuNDk1ODI5MTcyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MTY1NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIlNZTl9DT09LSUVTXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tcIixcbiAgICBcImJwZl9za19hc3NpZ25cIixcbiAgICBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gICAgXCJicGZfc2tfYXNzaWduX3RjcF9yZXFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIlNZTl9DT09LSUVTXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tcIixcbiAgICBcImJwZl9za19hc3NpZ25cIixcbiAgICBcImJwZl9za2JfY2hhbmdlX3Byb3RvXCIsXG4gICAgXCJicGZfc2tfYXNzaWduX3RjcF9yZXFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGJwZl9za19hc3NpZ25fZmFtaWx5X29rKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnQgaGVscGVycyAoYnBmX3NrX2Fzc2lnbiwgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2spIGFuZCBkcm9wcyBwcmVmZXRjaGVkIHNvY2tldCBhc3NpZ25tZW50cyBkdXJpbmcgcHJvdG9jb2wgdHJhbnNsYXRpb24gaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgVENQIFNZTl9SRUNWIHJlcXVlc3Qgc29ja3MsIElQdjQtbWFwcGVkIElQdjYgc29ja2V0cywgYW5kIEwzIHByb3RvY29sIHRyYW5zbGF0aW9uLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciBpbnZhcmlhbnQgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MzIuNjQ0MDA2Mzg0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU2MjM5MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjMyLjY0NDg3MDMzNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNTYxNTIyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSBpbmNvbXBhdGlibGUuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cXHUwMDNlcHJvdG9jb2xgLCBgc2stXFx1MDAzZXNrX2ZhbWlseWAsIGBzay1cXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXFxuMi4gSW5mby1sZWFrczogTm8gZGF0YSBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXFxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWM5MDU5MDcyNmIwNjNkMDAyNGU5MmM1ZTg3NWRlMWMwMDgxZGZkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE4OjEwOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi4wZGU3OTY3MDc3YTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yNjU5LDYgKzI2NTksMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqIFx0XHRjaGVja2VkIGFuZCBzZWdtZW50cyBhcmUgcmVjYWxjdWxhdGVkIGJ5IHRoZSBHU08vR1JPIGVuZ2luZS5cbiAgKiBcdFx0VGhlIHNpemUgZm9yIEdTTyB0YXJnZXQgaXMgYWRhcHRlZCBhcyB3ZWxsLlxuICAqXG4rICpcdFx0T24gc3VjY2VzcywgYW4gYXNzaWduZWQgc29ja2V0IGlzIHJlbGVhc2VkIGlmIGl0cyBhZGRyZXNzXG4rICpcdFx0ZmFtaWx5IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgcHJvdG9jb2wuIEFzc2lnbiBhXG4rICpcdFx0Y29tcGF0aWJsZSBzb2NrZXQgYWZ0ZXIgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuXG4rICpcbiAgKiBcdFx0QWxsIHZhbHVlcyBmb3IgKmZsYWdzKiBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2FnZSwgYW5kIG11c3RcbiAgKiBcdFx0YmUgbGVmdCBhdCB6ZXJvLlxuICAqXG5AQCAtNDU2OCw2ICs0NTcyLDEwIEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHQqKi1FT1BOT1RTVVBQKiogaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZVxuICAqXHRcdGEgY2FsbCBmcm9tIG91dHNpZGUgb2YgVEMgaW5ncmVzcy5cbiAgKlxuKyAqXHRcdCoqLUVBRk5PU1VQUE9SVCoqIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGhcbisgKlx0XHR0aGUgbmV0d29yayBsYXllciBvZiB0aGUgcGFja2V0LCBmb3IgZXhhbXBsZSBhbiAqKkFGX0lORVQqKlxuKyAqXHRcdHNvY2tldCBhbmQgYW4gSVB2NiBwYWNrZXQuXG4rICpcbiAgKiBsb25nIGJwZl9za19hc3NpZ24oc3RydWN0IGJwZl9za19sb29rdXAgKmN0eCwgc3RydWN0IGJwZl9zb2NrICpzaywgdTY0IGZsYWdzKVxuICAqXHREZXNjcmlwdGlvblxuICAqXHRcdEhlbHBlciBpcyBvdmVybG9hZGVkIGRlcGVuZGluZyBvbiBCUEYgcHJvZ3JhbSB0eXBlLiBUaGlzXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uNzlhMGU0ODRkOWRkNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTM0OTEsNiArMzQ5MSwzMiBAQCBzdGF0aWMgaW50IGJwZl9za2JfcHJvdG9feGxhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgdG9fcHJvdG8pXG4gXHRyZXR1cm4gLUVOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBicGZfc2tfYXNzaWduX2ZhbWlseV9vayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4rXG4rXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdGZhbWlseSA9IEFGX0lORVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0ZmFtaWx5ID0gQUZfSU5FVDY7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHQvKiBSZXF1ZXN0cyBpbmhlcml0IHRoZSBsaXN0ZW5lciBmYW1pbHksIGJ1dCBoYXZlIGZhbWlseS1zcGVjaWZpYyBvcHMuICovXG4rXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbitcdFx0cmV0dXJuIGluZXRfcmVxc2soc2spLVx1MDAzZXJza19vcHMtXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcbitcbitcdHJldHVybiBzay1cdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XG4rXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuK1x0XHRzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4rXHRcdCFpcHY2X29ubHlfc29jayhzaykpO1xuK31cbitcbiBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIF9fYmUxNiwgcHJvdG8sXG4gXHQgICB1NjQsIGZsYWdzKVxuIHtcbkBAIC0zNTIxLDYgKzM1NDcsMTEgQEAgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qIFByb3RvY29sIHRyYW5zbGF0aW9uIGNhbiBpbnZhbGlkYXRlIGFuIGVhcmxpZXIgc29ja2V0IGFzc2lnbm1lbnQuICovXG4rXHRpZiAoc2tiX3NrX2lzX3ByZWZldGNoZWQoc2tiKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBza2ItXHUwMDNlc2spKVxuK1x0XHRza2Jfb3JwaGFuKHNrYik7XG4rXG4gXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiBcbkBAIC03OTg5LDYgKzgwMjAsOCBAQCBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4gXHRpZiAoc2tfdW5oYXNoZWQoc2spKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxuK1x0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMjUyNiw2ICsxMjU1OSw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAobmV0ICE9IHNvY2tfbmV0KHNrKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbiBcbitcdGlmICghYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2soc2tiLCBzaykpXG4rXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuK1xuIFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRvcHMgPSBcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcztcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLjBkZTc5NjcwNzdhMmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI2NTksNiArMjY1OSwxMCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdGNoZWNrZWQgYW5kIHNlZ21lbnRzIGFyZSByZWNhbGN1bGF0ZWQgYnkgdGhlIEdTTy9HUk8gZW5naW5lLlxuICAqIFx0XHRUaGUgc2l6ZSBmb3IgR1NPIHRhcmdldCBpcyBhZGFwdGVkIGFzIHdlbGwuXG4gICpcbisgKlx0XHRPbiBzdWNjZXNzLCBhbiBhc3NpZ25lZCBzb2NrZXQgaXMgcmVsZWFzZWQgaWYgaXRzIGFkZHJlc3NcbisgKlx0XHRmYW1pbHkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG5ldyBwcm90b2NvbC4gQXNzaWduIGFcbisgKlx0XHRjb21wYXRpYmxlIHNvY2tldCBhZnRlciB0cmFuc2xhdGlvbiBpZiByZXF1aXJlZC5cbisgKlxuICAqIFx0XHRBbGwgdmFsdWVzIGZvciAqZmxhZ3MqIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlLCBhbmQgbXVzdFxuICAqIFx0XHRiZSBsZWZ0IGF0IHplcm8uXG4gICpcbkBAIC00NTY4LDYgKzQ1NzIsMTAgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdCoqLUVPUE5PVFNVUFAqKiBpZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIGZvciBleGFtcGxlXG4gICpcdFx0YSBjYWxsIGZyb20gb3V0c2lkZSBvZiBUQyBpbmdyZXNzLlxuICAqXG4rICpcdFx0KiotRUFGTk9TVVBQT1JUKiogaWYgdGhlIHNvY2tldCBmYW1pbHkgaXMgbm90IGNvbXBhdGlibGUgd2l0aFxuKyAqXHRcdHRoZSBuZXR3b3JrIGxheWVyIG9mIHRoZSBwYWNrZXQsIGZvciBleGFtcGxlIGFuICoqQUZfSU5FVCoqXG4rICpcdFx0c29ja2V0IGFuZCBhbiBJUHY2IHBhY2tldC5cbisgKlxuICAqIGxvbmcgYnBmX3NrX2Fzc2lnbihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqY3R4LCBzdHJ1Y3QgYnBmX3NvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gICpcdERlc2NyaXB0aW9uXG4gICpcdFx0SGVscGVyIGlzIG92ZXJsb2FkZWQgZGVwZW5kaW5nIG9uIEJQRiBwcm9ncmFtIHR5cGUuIFRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjMyLjY0NDg3MTU1NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTQ2NTQ2Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEV2YWx1YXRpb24gb2YgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKm1pZ2h0KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIHN1cmUsIHRob3VnaC5cblxuRmlyc3QsIHRoZSBjb21taXQgdGl0bGUgc2F5cyBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiLCBzbyBpdCdzIHByb2JhYmx5IGFscmVhZHkgb24gdGhlIHJhZGFyIGZvciBmdXp6aW5nLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGJlIGNvbXByZWhlbnNpdmUuIEl0IG1vZGlmaWVzIGBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBhbmQgYHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaGAuIFRoZSBjaGFuZ2VzIGluIHRoZSBoZWFkZXIgZmlsZXMgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBpcyB3aGVyZSBteSBhdHRlbnRpb24gd2lsbCBmb2N1cy5cblxuSW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgSSdtIHNlZWluZyBhIG5ldyBmdW5jdGlvbiwgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYC4gSXQgYXBwZWFycyB0byBiZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmFtaWx5IG9mIHRoZSBzb2NrZXQgbWF0Y2hlcyB0aGUgZmFtaWx5IG9mIHRoZSBwYWNrZXQgYmFzZWQgb24gdGhlIHByb3RvY29sLiBJbnRlcmVzdGluZy4gV2UncmUgZGVhbGluZyB3aXRoIGBBRl9JTkVUYCBhbmQgYEFGX0lORVQ2YCBjaGVja3MsIHNvIHRoYXQncyBhIGtleSBhcmVhLiBUaGUgZnVuY3Rpb24gY2hlY2tzIGZvciBgVENQX05FV19TWU5fUkVDVmAsIHdoaWNoIGlzIHdvcnRoIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaW4gdGhpcyBjYXNlLlxuXG5DcnVjaWFsbHksIHRoaXMgYGJwZl9za19hc3NpZ25fZmFtaWx5X29rYCBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3Byb3RvLCAuLi4pYCB3aGVyZSBhbiBvcnBoYW4gaXMgY2FsbGVkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBUaGVuLCB0aGUgc2FtZSBmdW5jdGlvbiBpcyB1c2VkIGluIGBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIC4uLilgIGFuZCBgX19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKC4uLilgIHdoZXJlIGBFQUZOT1NVUFBPUlRgIGlzIHJldHVybmVkLiBUaGlzIGltcGxpZXMgc29tZSBmb3JtIG9mIHNvY2tldCBmYW1pbHkgdmFsaWRhdGlvbiwgYW5kIGEgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciB0aGVzZSBuZXcgY2hlY2tzIG9yIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgc2tiX29ycGhhbmAgaGF2ZSBpbnRyb2R1Y2VkIGFueSBvcHBvcnR1bml0aWVzIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBUaGUgY29uZGl0aW9uYWwgbmF0dXJlIG9mIHRob3NlIGNhbGxzIG1lYW5zIHRoYXQgc29tZSBwYXRocyBtaWdodCBub3QgYmUgd2VsbC10ZXN0ZWQsIGFuZCB0aGF0J3Mgd2hlcmUgYnVncyB0ZW5kIHRvIGhpZGUuXG5cblRvIGZpbmFsaXplIG15IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcz8gV2hhdCdzIHRoZSBjYWxsIGdyYXBoPyBJIG5lZWQgdG8ga25vdyB0aGUgcG9zc2libGUgY29kZXBhdGhzIHRoYXQgaW52b2x2ZSB0aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIHZpZXcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgbWF5IGJlIGEgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBpbnZvbHZlZCBpbiB0aGUgQlBGIGNvbnRleHQuIExldCBtZSBwdWxsIHVwIHNvbWUgY29kZSBvciB1c2UgYSBncmVwcGVyIHRvIGxvb2sgZm9yIHVzYWdlIHBhdHRlcm5zLCBvciBjaGVjayBmb3Igc3BlY2lmaWMgcmVhZC1maWxlIGNhbGxzLiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHRydWx5IHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjM5LjU5MTQyMTQyMVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4Nzg0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI1MTc9X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2FkZHJfc2V0X3N1bl9wYXRoKHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKnNhX2tlcm4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzNy1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjUzODpfX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdGNwX3JlcV9hdHRycyAqYXR0cnMsIGludCBhdHRyc19fc3opXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg2ND1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2tfYXNzaWduX3RjcF9yZXFzaylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg2Ni1CVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3RjcF9yZXFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6MzkuNjY3MzA2OTA0WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxOTc5NjgwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBpdHMgaW1wbGVtZW50YXRpb24gYXJvdW5kIGxpbmUgMTI1Mzggd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4sIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBCUEYtYmFzZWQgbmV0d29yayBmaWx0ZXJpbmcuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBhIHN1YnRsZSBvcHRpbWl6YXRpb24sIG9yIHBlcmhhcHMgYSBwcm9ibGVtYXRpYyBpbnRlcmFjdGlvbiwgbWlnaHQgYmUgaGlkaW5nIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGhlcmUsIGFuZCBob3BlZnVsbHksIEknbGwgdW5jb3ZlciBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBpcyAqcmVhbGx5KiBkb2luZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDEuODY1Mjc4MzJaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjUzNTpcXHRcXHRyZXR1cm4gMDtcXG4xMjUzNjpcXHR9XFxuMTI1Mzc6XFx0XFxuMTI1Mzg6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG4xMjUzOTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RjcF9yZXFfYXR0cnMgKmF0dHJzLCBpbnQgYXR0cnNfX3N6KVxcbjEyNTQwOlxcdHtcXG4xMjU0MTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOX0NPT0tJRVMpXFxuMTI1NDI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XFxuMTI1NDM6XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcztcXG4xMjU0NDpcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XFxuMTI1NDU6XFx0XFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7XFxuMTI1NDY6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbjEyNTQ3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4xMjU0ODpcXHRcXHRfX3UxNiBtaW5fbXNzO1xcbjEyNTQ5OlxcdFxcdHUzMiB0c29mZiA9IDA7XFxuMTI1NTA6XFx0XFxuMTI1NTE6XFx0XFx0aWYgKGF0dHJzX19zeiAhPSBzaXplb2YoKmF0dHJzKSB8fFxcbjEyNTUyOlxcdFxcdCAgICBhdHRycy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgYXR0cnMtXFx1MDAzZXJlc2VydmVkWzFdIHx8IGF0dHJzLVxcdTAwM2VyZXNlcnZlZFsyXSlcXG4xMjU1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU1NDpcXHRcXG4xMjU1NTpcXHRcXHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuMTI1NTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI1NTc6XFx0XFxuMTI1NTg6XFx0XFx0bmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMTI1NTk6XFx0XFx0aWYgKG5ldCAhPSBzb2NrX25ldChzaykpXFxuMTI1NjA6XFx0XFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG4xMjU2MTpcXHRcXG4xMjU2MjpcXHRcXHRpZiAoIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2spKVxcbjEyNTYzOlxcdFxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbjEyNTY0OlxcdFxcbjEyNTY1OlxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEyNTY2OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbjEyNTY3OlxcdFxcdFxcdG9wcyA9IFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcztcXG4xMjU2ODpcXHRcXHRcXHRtaW5fbXNzID0gNTM2O1xcbjEyNTY5OlxcdFxcdFxcdGJyZWFrO1xcbjEyNTcwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbjEyNTcxOlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuMTI1NzI6XFx0XFx0XFx0b3BzID0gXFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcztcXG4xMjU3MzpcXHRcXHRcXHRtaW5fbXNzID0gSVBWNl9NSU5fTVRVIC0gNjA7XFxuMTI1NzQ6XFx0XFx0XFx0YnJlYWs7XFxuMTI1NzU6XFx0I2VuZGlmXFxuMTI1NzY6XFx0XFx0ZGVmYXVsdDpcXG4xMjU3NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU3ODpcXHRcXHR9XFxuMTI1Nzk6XFx0XFxuMTI1ODA6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfU1RSRUFNIHx8IHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XFxuMTI1ODE6XFx0XFx0ICAgIHNrX2lzX21wdGNwKHNrKSlcXG4xMjU4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU4MzpcXHRcXG4xMjU4NDpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZW1zcyBcXHUwMDNjIG1pbl9tc3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjQxLjg2NTkxNzU3MVoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDk1NzcxNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgYnBmX3NrX2Fzc2lnbmAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gcmV2aXNpdCB0aGUgYGJwZl9za19hc3NpZ25gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzk4OSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJJ20gZ29pbmcgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGxvZ2ljIHRoZXJlLCBhcyBpdCdzIGNyaXRpY2FsIGZvciBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggc29ja2V0IGFzc2lnbm1lbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzcGVjaWZpYyBhc3BlY3RzIHdlJ3JlIHRyb3VibGVzaG9vdGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgZXZlcnl0aGluZy4gSSdsbCBmb2N1cyBvbiBob3cgaXQgbWFuYWdlcyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDMuOTYxNjkxNDA5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0Mzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTgwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5ODE6XFx0XFxuNzk4MjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNilcXG43OTgzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5ODQ6XFx0XFxuNzk4NTpcXHRcXHRcXHRtc3MgPSB0Y3BfdjZfZ2V0X3N5bmNvb2tpZShzaywgaXBoLCB0aCwgXFx1MDAyNmNvb2tpZSk7XFxuNzk4NjpcXHRcXHRcXHRicmVhaztcXG43OTg3OlxcdCNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xcbjc5ODg6XFx0XFxuNzk4OTpcXHRcXHRkZWZhdWx0Olxcbjc5OTA6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuNzk5MTpcXHRcXHR9XFxuNzk5MjpcXHRcXHRpZiAobXNzID09IDApXFxuNzk5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43OTk0OlxcdFxcbjc5OTU6XFx0XFx0cmV0dXJuIGNvb2tpZSB8ICgodTY0KW1zcyBcXHUwMDNjXFx1MDAzYyAzMik7XFxuNzk5NjpcXHQjZWxzZVxcbjc5OTc6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjc5OTg6XFx0I2VuZGlmIC8qIENPTkZJR19TWU5fQ09PS0lFUyAqL1xcbjc5OTk6XFx0fVxcbjgwMDA6XFx0XFxuODAwMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90byA9IHtcXG44MDAyOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfdGNwX2dlbl9zeW5jb29raWUsXFxuODAwMzpcXHRcXHQuZ3BsX29ubHlcXHQ9IHRydWUsIC8qIF9fY29va2llX3YqX2luaXRfc2VxdWVuY2UoKSBpcyBHUEwgKi9cXG44MDA0OlxcdFxcdC5wa3RfYWNjZXNzXFx0PSB0cnVlLFxcbjgwMDU6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG44MDA2OlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxcbjgwMDc6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjgwMDg6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbjgwMDk6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjgwMTA6XFx0XFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbjgwMTE6XFx0fTtcXG44MDEyOlxcdFxcbjgwMTM6XFx0QlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxcbjgwMTQ6XFx0e1xcbjgwMTU6XFx0XFx0aWYgKCFzayB8fCBmbGFncyAhPSAwKVxcbjgwMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODAxNzpcXHRcXHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuODAxODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuODAxOTpcXHRcXHRpZiAodW5saWtlbHkoZGV2X25ldChza2ItXFx1MDAzZWRldikgIT0gc29ja19uZXQoc2spKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDMuOTYyMzM3NDRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyNjQzNjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYnBmX3NrYl9jaGFuZ2VfcHJvdG8gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHBhY2tldCBtYW5pcHVsYXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiwgYW5kIGZyb20gdGhlIHNvdXJjZSwgaXQgbG9va3MgbGlrZSBsaW5lIDM1MjEgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHByb3RvY29sIGNoYW5nZSBpcyBoYW5kbGVkIGF0IHRoZSBuZXR3b3JrIGxldmVsLiBXaGF0J3MgdGhlIGludGVncml0eSBvZiB0aGUgbGF5ZXJzIHRoYXQgYXJlIGFmZmVjdGVkPyBXaGF0IGtpbmQgb2YgY2hlY2tzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgc2FmZSBtYW5pcHVsYXRpb24gb2YgdGhlIHBhY2tldCBoZWFkZXI/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBtYW5hZ2luZyB0aGluZ3MgYXQgYSBncmFudWxhciBsZXZlbCwgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCBzb3J0IG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aGluZ3MgYXJlIGluIHRoZSBzb3VyY2UgZmlsZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NzAzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NDYuMjg4Nzc2MzU5WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4ODIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTEwOlxcdFxcdC8qIFJlcXVlc3RzIGluaGVyaXQgdGhlIGxpc3RlbmVyIGZhbWlseSwgYnV0IGhhdmUgZmFtaWx5LXNwZWNpZmljIG9wcy4gKi9cXG4zNTExOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcXG4zNTEyOlxcdFxcdFxcdHJldHVybiBpbmV0X3JlcXNrKHNrKS1cXHUwMDNlcnNrX29wcy1cXHUwMDNlZmFtaWx5ID09IGZhbWlseTtcXG4zNTEzOlxcdFxcbjM1MTQ6XFx0XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gZmFtaWx5IHx8XFxuMzUxNTpcXHRcXHQgICAgICAgKGZhbWlseSA9PSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMzUxNjpcXHRcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuMzUxNzpcXHRcXHRcXHQhaXB2Nl9vbmx5X3NvY2soc2spKTtcXG4zNTE4OlxcdH1cXG4zNTE5OlxcdFxcbjM1MjA6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV9wcm90bywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBfX2JlMTYsIHByb3RvLFxcbjM1MjE6XFx0XFx0ICAgdTY0LCBmbGFncylcXG4zNTIyOlxcdHtcXG4zNTIzOlxcdFxcdGludCByZXQ7XFxuMzUyNDpcXHRcXG4zNTI1OlxcdFxcdGlmICh1bmxpa2VseShmbGFncykpXFxuMzUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNTI3OlxcdFxcbjM1Mjg6XFx0XFx0LyogR2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBoZWxwZXIgZG9lcyB0aGUgYmFzaWMgZ3JvdW5kd29ya1xcbjM1Mjk6XFx0XFx0ICogbmVlZGVkIGZvciBjaGFuZ2luZyB0aGUgcHJvdG9jb2wsIGFuZCBlQlBGIHByb2dyYW0gZmlsbHMgdGhlXFxuMzUzMDpcXHRcXHQgKiByZXN0IHRocm91Z2ggYnBmX3NrYl9zdG9yZV9ieXRlcygpLCBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTMxOlxcdFxcdCAqIGFuZCBvdGhlciBoZWxwZXJzLCByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3IGJ1ZmZlciBoZXJlLlxcbjM1MzI6XFx0XFx0ICpcXG4zNTMzOlxcdFxcdCAqIFRoZSByYXRpb25hbGUgaXMgdG8ga2VlcCB0aGlzIG1pbmltYWwgYW5kIHdpdGhvdXQgYSBuZWVkIHRvXFxuMzUzNDpcXHRcXHQgKiBkZWFsIHdpdGggcmF3IHBhY2tldCBkYXRhLiBGLmUuIGV2ZW4gaWYgd2Ugd291bGQgcGFzcyBidWZmZXJzXFxuMzUzNTpcXHRcXHQgKiBoZXJlLCB0aGUgcHJvZ3JhbSBzdGlsbCBuZWVkcyB0byBjYWxsIHRoZSBicGZfbFhfY3N1bV9yZXBsYWNlKClcXG4zNTM2OlxcdFxcdCAqIGhlbHBlcnMgYW55d2F5LiBQbHVzLCB0aGlzIHdheSB3ZSBrZWVwIGFsc28gc2VwYXJhdGlvbiBvZlxcbjM1Mzc6XFx0XFx0ICogY29uY2VybnMsIHNpbmNlIGYuZS4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5IHRha2VcXG4zNTM4OlxcdFxcdCAqIGNhcmUgb2Ygc3RvcmVzLlxcbjM1Mzk6XFx0XFx0ICpcXG4zNTQwOlxcdFxcdCAqIEN1cnJlbnRseSwgYWRkaXRpb25hbCBvcHRpb25zIGFuZCBleHRlbnNpb24gaGVhZGVyIHNwYWNlIGFyZVxcbjM1NDE6XFx0XFx0ICogbm90IHN1cHBvcnRlZCwgYnV0IGZsYWdzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHNvIHdlIGNhbiBhZGFwdFxcbjM1NDI6XFx0XFx0ICogdGhhdC4gRm9yIG9mZmxvYWRzLCB3ZSBtYXJrIHBhY2tldCBhcyBkb2RneSwgc28gdGhhdCBoZWFkZXJzXFxuMzU0MzpcXHRcXHQgKiBuZWVkIHRvIGJlIHZlcmlmaWVkIGZpcnN0LlxcbjM1NDQ6XFx0XFx0ICovXFxuMzU0NTpcXHRcXHRyZXQgPSBicGZfc2tiX3Byb3RvX3hsYXQoc2tiLCBwcm90byk7XFxuMzU0NjpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMzU0NzpcXHRcXHRpZiAocmV0KVxcbjM1NDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNTQ5OlxcdFxcbjM1NTA6XFx0XFx0LyogUHJvdG9jb2wgdHJhbnNsYXRpb24gY2FuIGludmFsaWRhdGUgYW4gZWFybGllciBzb2NrZXQgYXNzaWdubWVudC4gKi9cXG4zNTUxOlxcdFxcdGlmIChza2Jfc2tfaXNfcHJlZmV0Y2hlZChza2IpIFxcdTAwMjZcXHUwMDI2XFxuMzU1MjpcXHRcXHQgICAgIWJwZl9za19hc3NpZ25fZmFtaWx5X29rKHNrYiwgc2tiLVxcdTAwM2VzaykpXFxuMzU1MzpcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuMzU1NDpcXHRcXG4zNTU1OlxcdFxcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXFxuMzU1NjpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4zNTU3OlxcdFxcbjM1NTg6XFx0XFx0cmV0dXJuIDA7XFxuMzU1OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjE0OjQ2LjI4OTc3Nzg4WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk5MTY1Nzg1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTmVlZHNLTVNBTj1mYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIHJ1bi4gSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBzb2NrZXQgZmFtaWx5IChgc2stXHUwMDNlc2tfZmFtaWx5YCwgZXRjLikgYW5kIHRoZSBwYWNrZXQgcHJvdG9jb2wgKGBza2ItXHUwMDNlcHJvdG9jb2xgKSBpbiBCUEYgc29ja2V0IGFzc2lnbm1lbnRzIGFuZCBwcm90b2NvbCBjaGFuZ2VzLiBUaGUgcGF0Y2ggaW1wbGVtZW50cyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdpdGhpbiB0aGUgQlBGIGhlbHBlcnMgYGJwZl9za19hc3NpZ25gIGFuZCBgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2tgLiBJZiB0aGVyZSBpcyBhIG1pc21hdGNoLCB0aGUgaGVscGVycyBub3cgcmV0dXJuIGFuIGVycm9yLiBBbHNvLCBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIHdpbGwgbm93IG9ycGhhbiBhIHNvY2tldCB0aGF0IGJlY29tZXMgaW5jb21wYXRpYmxlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBUaGUgcGF0Y2ggc3RyaWN0bHkgaW50cm9kdWNlcyBjaGVja3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uICpleGlzdGluZyosIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGRzOiBgc2tiLVx1MDAzZXByb3RvY29sYCwgYHNrLVx1MDAzZXNrX2ZhbWlseWAsIGBzay1cdTAwM2Vza19zdGF0ZWAsIGBzay1cdTAwM2Vza19pcHY2b25seWAsIGFuZCBgcnNrX29wcy1cdTAwM2VmYW1pbHlgLiBUaGUgY2hlY2tzIGFyZSBib29sZWFuIGFuZCBwcmV2ZW50IGFzc2lnbmluZyBhIHNvY2tldCB0byBhIHBhY2tldCB0aGF0IGlzIG5vdCBhIG1hdGNoLiBObyBuZXcgbWVtb3J5IGlzIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQuXG5cblRoZSBvcmlnaW5hbCBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLCBhIHNvY2tldC9wYWNrZXQgZmFtaWx5IG1pc21hdGNoLCAqY291bGQqIGhhdmUgbGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBzdWNoIGFzIHR5cGUgY29uZnVzaW9uLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGRvd25zdHJlYW0gbmV0d29ya2luZyBjb2RlIGFjY2Vzc2VkIHRoZSBzb2NrZXQgc3RydWN0dXJlIGFzc3VtaW5nIHRoZSBpbmNvcnJlY3QgZmFtaWx5LiBIb3dldmVyLCB0aG9zZSBpc3N1ZXMgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTidzIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoaXMgcGF0Y2ggZWxpbWluYXRlcyB0aGUgb3JpZ2luYWwgcHJvYmxlbSBieSByZXR1cm5pbmcgYW4gZXJyb3Igb3Igb3JwaGFuaW5nIHRoZSBzb2NrZXQsIGJ1dCBldmVuIHRoZSBvcmlnaW5hbCBwcm9ibGVtIHRoYXQgdGhpcyBwYXRjaCBmaXhlcywgaWYgZW5jb3VudGVyZWQsIHdvdWxkIGhhdmUgY2F1c2VkIGVycm9ycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4uXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCAqb25seSogaW50cm9kdWNlcyB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdGhhdCB0aGUgcG90ZW50aWFsIGlzc3VlcyBpdCByZXNvbHZlcyBhcmUgS0FTQU4tZGV0ZWN0YWJsZSwgcnVubmluZyBLTVNBTiB3b3VsZCBiZSBhbiB1bm5lY2Vzc2FyeSB1c2Ugb2YgcmVzb3VyY2VzLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKnByZXZlbnRpbmcqIGluY29ycmVjdCBhc3NpZ25tZW50cyBhbmQgcHJvdG9jb2wgY2hhbmdlcywgbm90IGFib3V0IGludHJvZHVjaW5nIG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODExMiwiT3V0cHV0VG9rZW5zIjoyNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6MTQ6NTYuMjA2MzYwNTkzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gKGBicGZfc2tfYXNzaWduX2ZhbWlseV9va2ApIHdoZW4gYXNzaWduaW5nIGEgc29ja2V0IHRvIGFuIHNrYiB2aWEgQlBGIGhlbHBlcnMgKGBicGZfc2tfYXNzaWduYCwgYGJwZl9za19hc3NpZ25fdGNwX3JlcXNrYCkgYW5kIG9ycGhhbnMgcHJlZmV0Y2hlZCBzb2NrZXRzIGluIGBicGZfc2tiX2NoYW5nZV9wcm90b2AgaWYgdGhlIHByb3RvY29sIHRyYW5zbGF0aW9uIG1ha2VzIHRoZSBhc3NpZ25lZCBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSBpbmNvbXBhdGlibGUuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIGV4YW1pbmVkIGZpZWxkcyAoYHNrYi1cXHUwMDNlcHJvdG9jb2xgLCBgc2stXFx1MDAzZXNrX2ZhbWlseWAsIGBzay1cXHUwMDNlc2tfc3RhdGVgLCBgaXB2Nl9vbmx5X3NvY2soKWAsIGV0Yy4pIGFyZSBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgZmllbGRzIG9uIGV4aXN0aW5nIHNvY2tldCBhbmQgc2tiIHN0cnVjdHVyZXMuXFxuMi4gSW5mby1sZWFrczogTm8gZGF0YSBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXFxuMy4gS0FTQU4gdnMgS01TQU46IFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IGZhbWlseSB2YWxpZGF0aW9uIHByZXZlbnQgdHlwZSBjb25mdXNpb24gLyBvdXQtb2YtYm91bmRzIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZG93bnN0cmVhbSBpbiB0aGUgbmV0d29yayBzdGFjayB3aGVuIGhhbmRsaW5nIG1pc21hdGNoZWQgc29ja2V0IHR5cGVzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIChgYnBmX3NrX2Fzc2lnbl9mYW1pbHlfb2tgKSB3aGVuIGFzc2lnbmluZyBhIHNvY2tldCB0byBhbiBza2IgdmlhIEJQRiBoZWxwZXJzIChgYnBmX3NrX2Fzc2lnbmAsIGBicGZfc2tfYXNzaWduX3RjcF9yZXFza2ApIGFuZCBvcnBoYW5zIHByZWZldGNoZWQgc29ja2V0cyBpbiBgYnBmX3NrYl9jaGFuZ2VfcHJvdG9gIGlmIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBtYWtlcyB0aGUgYXNzaWduZWQgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHkgaW5jb21wYXRpYmxlLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBleGFtaW5lZCBmaWVsZHMgKGBza2ItXFx1MDAzZXByb3RvY29sYCwgYHNrLVxcdTAwM2Vza19mYW1pbHlgLCBgc2stXFx1MDAzZXNrX3N0YXRlYCwgYGlwdjZfb25seV9zb2NrKClgLCBldGMuKSBhcmUgZXN0YWJsaXNoZWQsIGluaXRpYWxpemVkIGZpZWxkcyBvbiBleGlzdGluZyBzb2NrZXQgYW5kIHNrYiBzdHJ1Y3R1cmVzLlxcbjIuIEluZm8tbGVha3M6IE5vIGRhdGEgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBieSBmYW1pbHkgdmFsaWRhdGlvbiBwcmV2ZW50IHR5cGUgY29uZnVzaW9uIC8gb3V0LW9mLWJvdW5kcyAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGRvd25zdHJlYW0gaW4gdGhlIG5ldHdvcmsgc3RhY2sgd2hlbiBoYW5kbGluZyBtaXNtYXRjaGVkIHNvY2tldCB0eXBlcywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[1] Phase: Succeeded StartedAt: 2026-09-11 18:15:08 +0000 UTC FinishedAt: 2026-09-11 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 18:15:08 +0000 UTC FinishedAt: 2026-09-11 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2] Phase: Succeeded StartedAt: 2026-09-11 18:15:08 +0000 UTC FinishedAt: 2026-09-11 21:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:15:08 +0000 UTC FinishedAt: 2026-09-11 21:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:15:08 +0000 UTC FinishedAt: 2026-09-11 18:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:15:08 +0000 UTC FinishedAt: 2026-09-11 18:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"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-workflow64wf7/series-workflow64wf7-convert-artifact-479165212/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:15:18 +0000 UTC FinishedAt: 2026-09-11 18:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:15:18 +0000 UTC FinishedAt: 2026-09-11 18:31:13 +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:*5282439a-af57-415f-b3ec-3f96c06f48b3,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-workflow64wf7/series-workflow64wf7-convert-artifact-479165212/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": "4ffa11e7-0453-4605-bcd5-c5eddd0b7427", "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-workflow64wf7/series-workflow64wf7-build-action-2604278090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:15:18 +0000 UTC FinishedAt: 2026-09-11 18:31:03 +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:*5282439a-af57-415f-b3ec-3f96c06f48b3,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-workflow64wf7/series-workflow64wf7-convert-artifact-479165212/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": "4ffa11e7-0453-4605-bcd5-c5eddd0b7427", "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-workflow64wf7/series-workflow64wf7-build-action-2604278090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:31:13 +0000 UTC FinishedAt: 2026-09-11 18:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:31:13 +0000 UTC FinishedAt: 2026-09-11 18:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:31:13 +0000 UTC FinishedAt: 2026-09-11 18:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:31:13 +0000 UTC FinishedAt: 2026-09-11 18:31:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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-workflow64wf7/series-workflow64wf7-convert-artifact-453091419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:31:23 +0000 UTC FinishedAt: 2026-09-11 18:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:31:23 +0000 UTC FinishedAt: 2026-09-11 18:33:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ffa11e7-0453-4605-bcd5-c5eddd0b7427,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-workflow64wf7/series-workflow64wf7-build-action-2604278090/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-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:33:19 +0000 UTC FinishedAt: 2026-09-11 18:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:33:19 +0000 UTC FinishedAt: 2026-09-11 18:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:33:19 +0000 UTC FinishedAt: 2026-09-11 18:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:33:19 +0000 UTC FinishedAt: 2026-09-11 18:49:47 +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:*5282439a-af57-415f-b3ec-3f96c06f48b3,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-workflow64wf7/series-workflow64wf7-convert-artifact-453091419/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": "4aa7abad-99e7-4f90-b69e-218f74135cd3", "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-workflow64wf7/series-workflow64wf7-build-action-490030847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:33:19 +0000 UTC FinishedAt: 2026-09-11 18:49:37 +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:*5282439a-af57-415f-b3ec-3f96c06f48b3,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-workflow64wf7/series-workflow64wf7-convert-artifact-453091419/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": "4aa7abad-99e7-4f90-b69e-218f74135cd3", "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-workflow64wf7/series-workflow64wf7-build-action-490030847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:49:47 +0000 UTC FinishedAt: 2026-09-11 18:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:49:47 +0000 UTC FinishedAt: 2026-09-11 18:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:49:47 +0000 UTC FinishedAt: 2026-09-11 18:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:49:47 +0000 UTC FinishedAt: 2026-09-11 18:51:27 +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:*4aa7abad-99e7-4f90-b69e-218f74135cd3,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-workflow64wf7/series-workflow64wf7-build-action-490030847/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-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 21:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 21:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"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:*4ffa11e7-0453-4605-bcd5-c5eddd0b7427,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4aa7abad-99e7-4f90-b69e-218f74135cd3,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-workflow64wf7/series-workflow64wf7-build-action-2604278090/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-workflow64wf7/series-workflow64wf7-build-action-490030847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 18:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 18:51:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"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-workflow64wf7/series-workflow64wf7-convert-artifact-4204239700/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 18:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 18:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:37 +0000 UTC FinishedAt: 2026-09-11 18:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:47 +0000 UTC FinishedAt: 2026-09-11 21:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64wf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"bpf","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_assign_family_ok","bpf_sk_assign","bpf_skb_change_proto","bpf_sk_assign_tcp_reqsk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SCHED","NET_CLS_ACT","NET_CLS_BPF","SYN_COOKIES","INET","IPV6"],"series_id":"3281e16c-9cc4-48f5-9b00-2e60a0be7cd4","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 18:51:47 +0000 UTC FinishedAt: 2026-09-11 21:54:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ffa11e7-0453-4605-bcd5-c5eddd0b7427,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4aa7abad-99e7-4f90-b69e-218f74135cd3,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-workflow64wf7/series-workflow64wf7-build-action-2604278090/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-workflow64wf7/series-workflow64wf7-build-action-490030847/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-workflow64wf7/series-workflow64wf7-convert-artifact-4204239700/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,}