Name: series-workflowjtwsf Phase: Succeeded StartedAt: 2026-08-11 20:04:35 +0000 UTC FinishedAt: 2026-08-11 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[0] Phase: Succeeded StartedAt: 2026-08-11 20:04:35 +0000 UTC FinishedAt: 2026-08-11 20:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 20:04:35 +0000 UTC FinishedAt: 2026-08-11 20:08:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "ad81e5d2-1b5b-46c2-8506-8e07e022e46d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_zerocopy", "tcp_sendmsg_locked", "ovs_dp_upcall" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5ODc2NGE4ZjkzOWNjZDlmYmZhZGJlNmNmMTdiNzcwYjJjMDA0MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMDowNjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XG4tICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnlcbiYjNDM7ICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcbiYjNDM7ICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXHUwMDI2XHUwMDI2IGogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbikge1xuJiM0MztcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuIFx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4mIzQzO1x0XHRpZiAoaiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgJiM0MzszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0fVxuIFx0c2tiX3NoaW5mbyh0byktXHUwMDNlbnJfZnJhZ3MgPSBqO1xuIFxuJiM0MztcdGlmIChpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBmcm9tLVx1MDAzZXVucmVhZGFibGUpXG4mIzQzO1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li4xODZhMzZjNjk4Nzk4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTI3OCw2ICYjNDM7MTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0aWYgKGNvcHkgXHUwMDNlIG1zZ19kYXRhX2xlZnQobXNnKSlcbiBcdFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFxuJiM0MztcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSkge1xuJiM0MztcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuJiM0MztcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKHpjID09IDApIHtcbiBcdFx0XHRib29sIG1lcmdlID0gdHJ1ZTtcbiBcdFx0XHRpbnQgaSA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5pbmRleCBhZTY5YjJjYWJhYjllLi40ODI4OTNhNWY2N2RjIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5AQCAtNDY3LDYgJiM0Mzs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghZHBfaWZpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiBcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3VwY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5ODc2NGE4ZjkzOWNjZDlmYmZhZGJlNmNmMTdiNzcwYjJjMDA0MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAyMDowNjoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTM4NzAsNyAmIzQzOzM4NzAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7CiAgKglSZXR1cm4gdmFsdWU6CiAgKgkwOiBldmVyeXRoaW5nIGlzIE9LCiAgKgktRU5PTUVNOiBjb3VsZG4mIzM5O3Qgb3JwaGFuIGZyYWdzIG9mIEBmcm9tIGR1ZSB0byBsYWNrIG9mIG1lbW9yeQotICoJLUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeQomIzQzOyAqCS1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWQKJiM0MzsgKiAgICAgIHBheWxvYWQgd291bGQgYmUgbWl4ZWQgd2l0aCB1bnJlYWRhYmxlIGZyYWdzLgogICovCiBpbnQKIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbikKQEAgLTM5MDUsMTAgJiM0MzszOTA2LDE3IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbikKIAkJfQogCX0KIAomIzQzOwlpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSAmYW1wOyZhbXA7IGogJmd0OyAwICZhbXA7JmFtcDsgbGVuKSB7CiYjNDM7CQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwogCXNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7CiAKIAlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHsKIAkJc2tiX3R4X2Vycm9yKGZyb20pOwomIzQzOwkJaWYgKGogJmd0OyAwKQomIzQzOwkJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tJmd0O2hlYWQpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CkBAIC0zOTI4LDYgJiM0MzszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCX0KIAlza2Jfc2hpbmZvKHRvKS0mZ3Q7bnJfZnJhZ3MgPSBqOwogCiYjNDM7CWlmIChpICZndDsgMCAmYW1wOyZhbXA7IGZyb20tJmd0O3VucmVhZGFibGUpCiYjNDM7CQl0by0mZ3Q7dW5yZWFkYWJsZSA9IDE7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA0NTU0NDFmMWI2OTQ5Li4xODZhMzZjNjk4Nzk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTI3OCw2ICYjNDM7MTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJaWYgKGNvcHkgJmd0OyBtc2dfZGF0YV9sZWZ0KG1zZykpCiAJCQljb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpOwogCiYjNDM7CQlpZiAoemMgIT0gTVNHX1pFUk9DT1BZICZhbXA7JmFtcDsgdW5saWtlbHkoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSkgewomIzQzOwkJCXRjcF9tYXJrX3B1c2godHAsIHNrYik7CiYjNDM7CQkJZ290byBuZXdfc2VnbWVudDsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKHpjID09IDApIHsKIAkJCWJvb2wgbWVyZ2UgPSB0cnVlOwogCQkJaW50IGkgPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBhZTY5YjJjYWJhYjllLi40ODI4OTNhNWY2N2RjIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtNDY3LDYgJiM0Mzs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIWRwX2lmaW5kZXgpCiAJCXJldHVybiAtRU5PREVWOwogCiYjNDM7CWlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKIAlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAJCWlmICghbnNrYikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOZXcgTmV0d29yayBDb2RlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrOiBgc2tidWZmLmNgLCBgdGNwLmNgLCBhbmQgdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBjb2RlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1ha2luZyBmdW5jdGlvbmFsIGNoYW5nZXMsIHNwZWNpZmljYWxseSBhZGRpbmcgY2hlY2tzIGZvciBgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGluIGZ1bmN0aW9ucyBsaWtlIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gR2l2ZW4gdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb24gY29yZSBuZXR3b3JraW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyAqZnV6emluZyouIFdlICpuZWVkKiB0byBmdXp6IHRoaXMuIEl0JiMzOTtzIHRvbyBpbXBvcnRhbnQgdG8gbGVhdmUgdW50ZXN0ZWQuCgpNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgc2xpZ2h0IGh1cmRsZSwgYnV0IHdlIGNhbiBwcm9iYWJseSB0cmFjZSBkb3duIGl0cyBjYWxsZXIgdG8gZ2V0IGNvbnRleHQuIE5vdywgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSB1c2FnZXMgb2YgYHNrYl96ZXJvY29weWAgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTktXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1MDogKiB3aGljaCBjYWxscyB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlLlxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTUzLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTgtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEwLVx0XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdDtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMi1cdFx0XHRpZiAoeGVudmlmX2hhbmRsZV9mcmFnX2xpc3QocXVldWUsIHNrYikpIHtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cdFx0XHRcdFx0XHQgICBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSB0byBjb25zb2xpZGF0ZSBmcmFnX2xpc3QhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2Olx0XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTctXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzMy1cdFx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3Mi1cdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykge1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfc2VudCYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTEyODM9c3RhdGljIHZvaWQgeGVudmlmX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjY5PXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzA6dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNzItXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTgxMj1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNDpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM0PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3Mi1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTEyOmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTYxLVxubmV0L2NvcmUvc2tidWZmLmM6MTk2MjpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI0OS1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTA6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTEtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMC0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODMyLSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzQtICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzNTogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzYtICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODM3PXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Mzkte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1NTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU2LVxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTg6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Njc6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3Nzpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODc4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIxLVx0fVxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDMtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzk0NDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjQyPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNDktXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjUxLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3ODg9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxubmV0L2NvcmUvc2tidWZmLmM6NTAxMjpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDEzLVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTg6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAxOS1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2NS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyNjY6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzNDMtXG5uZXQvaXB2NC90Y3AuYzoxMzQ0Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQ1LVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxODMyOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc2OS1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTU0Olx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1NS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTE9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVx0aWYgKGRwLVx1MDAzZXVzZXJfZmVhdHVyZXMgXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMTpcdFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAyLVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4Ny1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDA4LVxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTA5Mi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTA5MzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTEwOTQtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEkga25vdyB0aGF0IGBza2JfemVyb2NvcHlgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSSYjMzk7dmUgc2VlbiBpdCB1c2VkIGluIHBsYWNlcyBsaWtlIHRoZSBOZXRmaWx0ZXIgTkZORVRMSU5LIHF1ZXVlIGltcGxlbWVudGF0aW9uIChgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY2ApIGFuZCB3aXRoaW4gT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoIGNvZGUgKGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2ApLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBjb21wb25lbnRzIGxldmVyYWdlIHplcm8tY29weSBtZWNoYW5pc21zLgoKYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHRoYXQmIzM5O3MgdGhlIGJyZWFkLWFuZC1idXR0ZXIgb2YgVENQIHNlbmQgb3BlcmF0aW9ucy4gQW55IGNoYW5nZSB0aGVyZSBpcyBwb3RlbnRpYWxseSBmYXItcmVhY2hpbmcsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBpbnRlcmFjdGlvbnMgY2FyZWZ1bGx5LgoKVGhlbiB0aGVyZeKAmXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIHdoaWNoLCBhZ2Fpbiwgc2hvd3MgdXAgaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aC4gU28sIGxldOKAmXMgbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoZXNlIHRocmVlOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYXMgSSBkaWcgZGVlcGVyLgoKSGFuZyBvbiBhIHNlY29uZOKApiBJIGp1c3QgcmVjYWxsZWQgdGhhdCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFN0aWxsLCBpZiBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGxlcnMgd2l0aGluIHRoYXQgbW9kdWxlLiBJdCYjMzk7cyBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoLCBidXQgc3RpbGwgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBpdHMgY2FsbGVycyB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1ZXVlX3VzZXJzcGFjZV9wYWNrZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzAtXHRcdFx0ICAgICB1aW50MzJfdCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0zMjk9aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDUtXHRpZiAoIXNrYl9pc19nc28oc2tiKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM0NjpcdFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ3LVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTM2Nj1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzk2LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mzk3Olx0XHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTgtXHRcdGlmIChlcnIpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQxPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTAtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTItXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBJbnF1aXJ5KioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIGEgc3BlY2lmaWMgYXJlYS4gYG92c19kcF91cGNhbGxgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlIGJlY2F1c2UgaXQgZGlyZWN0bHkgY2FsbHMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIGZsb3cgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2guCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoYXQmIzM5O3MgdXNpbmcgYHNrYl96ZXJvY29weWAuICBBIHF1aWNrIHNjYW4gcmV2ZWFscyBpdCYjMzk7cyBjYWxsZWQgYnkgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBieSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXRzZWxmIGluIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggY29kZS4gSW50ZXJlc3RpbmcuCgpUaGVuLCBmb3IgY29udHJhc3QsIEkmIzM5O20gY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwgdG8gVENQLCBhbmQgSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBzdGFuZGFyZCBgdGNwX3NlbmRtc2dgLCBgdGNwX3NlbmRwYWdlX2xvY2tlZGAsIGFuZCBvdGhlciBjb3JlIFRDUCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgZm9yIGNvbXBhcmlzb24uCgpTbywgdG8gc3VtbWFyaXplIG15IGtleSBmb2N1cyBzeW1ib2xzIHJpZ2h0IG5vdywgSSBoYXZlOgoKKiAgIGBza2JfemVyb2NvcHlgCiogICBgdGNwX3NlbmRtc2dfbG9ja2VkYAoqICAgYG92c19kcF91cGNhbGxgCgpCYXNlZCBvbiB0aGlzIHBhdGgsIHRoZSBjb25maWd1cmF0aW9ucyBvZiBpbnRlcmVzdCBhcmUgcHJldHR5IGNsZWFybHk6CgoqICAgYE9QRU5WU1dJVENIYAoqICAgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYAoKSSBzaG91bGQgcmVhbGx5IHF1aWNrbHkgbG9vayBhdCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGluIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgb24gdGhhdCBmcm9udC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBPcGVuIHZTd2l0Y2ggaW4gdGhlIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24gaW4gdGhlIEtjb25maWcgZmlsZXMuIEkga25vdyB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgdHlwaWNhbCBsb2NhdGlvbnMgd2hlcmUgbmV0d29yayBkZXZpY2UgZHJpdmVycyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgcmVzaWRlIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgT3BlbiB2U3dpdGNoIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIGFzIGEgbW9kdWxlLiBJ4oCZbSB0aGlua2luZyBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG5ldHdvcmsgc3RhY2tzIG9yIGZlYXR1cmVzLCBsaWtlIGJyaWRnaW5nIG9yIFZMQU4gc3VwcG9ydCwgYW5kIGhvdyB0aG9zZSBtaWdodCBiZSBjb25maWd1cmVkIGluIHJlbGF0aW9uIHRvIHRoZSBPVlMgZW50cnkuIENoZWNraW5nIHRoZSBLY29uZmlnIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNvbXBvbmVudCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBpbWFnZSwgb3IgaWYgaXQmIzM5O3MgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbnRleHQgYXQgYWxsLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgYmFzZSBzdGF0ZSBvZiBPcGVuIHZTd2l0Y2ggd2l0aGluIHRoZSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGNvcnJlY3RseSBzZXQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIEJlZm9yZSBJIGRpdmUgZGVlcGVyLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGUga2VybmVsIGV4cG9ydHMgdGhlIGBza2JfemVyb2NvcHlgIHN5bWJvbCwgZXNwZWNpYWxseSBpZiB0aGUgY29kZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBtaWdodCByZWx5IG9uIGl0LiBIbW0sIGxvb2tzIGdvb2QuIGBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO2AgaXMgaW5kZWVkIHByZXNlbnQsIHNvIG5vIGltbWVkaWF0ZSBjb25jZXJucyB0aGVyZS4gTmV4dCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoaXMgc3ltYm9sIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDQ4LX1cbm5ldC9pcHY0L3RjcC5jOjE0NDk6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTE0NTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQ5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbml0aWFsIEFmZmlybWF0aW9uIGFuZCBWZXJpZmljYXRpb24qKgoKWWVzLiBPa2F5LCB0aGF0IGZlZWxzIHJpZ2h0IGluIHByaW5jaXBsZS4gQnV0IGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIGBvdnNfZHBfdXBjYWxsYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBjb21wb25lbnQgYW5kIGl0cyBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBzcGVjaWZpYyBkZXRhaWxzLiBKdXN0IGEgcXVpY2sgcmV2aWV3IHdpbGwgZW5zdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBteSBtZW50YWwgbW9kZWwgb2YgdGhhdCBhc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qb3ZzX2RwX3VwY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzI1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIFRoaXMgZGF0YSBpc24mIzM5O3QgKmV4cG9ydGVkKiwgc28gaXQmIzM5O3Mgbm90IGEgc2ltcGxlIHZhcmlhYmxlIEkgY2FuIGVhc2lseSBhY2Nlc3MuIEJ1dCwgaXQmIzM5O3MgYWxzbyBub3Qgc3RhdGljYWxseSBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgZHluYW1pY2FsbHkuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCB0YWtlcyBtZS4gSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiBob3cgdGhpcyBub24tZXhwb3J0ZWQsIG5vbi1zdGF0aWMgZGF0YSBpcyBtYW5hZ2VkLCB0byBkZXRlcm1pbmUgaG93IEkgY2FuIGFjY2VzcyBpdC4gUmlnaHQsIEkgdGhpbmsgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBtYW5pcHVsYXRpb24gaXMgdGhlIGBvdnNfZHBfdXBjYWxsYCBmdW5jdGlvbi4gTm93LCB3aGVyZSBpcyBpdCwgYWggeWVzLi4uIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb3ZzX2RwX3VwY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzI4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzI5OmludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zMzAtXHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzIxPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMyMjppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKiwgc3RydWN0IHNrX2J1ZmYgKixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMyMy1cdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgY29uc3Qgc3RydWN0IGRwX3VwY2FsbF9pbmZvICosXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzcyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoaXMgbm9uLXN0YXRpYyBlbGVtZW50IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXRzIGR5bmFtaWMgbmF0dXJlIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGFzIGEgZ29vZCBmb2N1cyBzeW1ib2wsIHN1Z2dlc3RpbmcgcG90ZW50aWFsIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgY29udHJvbCBvciBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBleGFjdGx5IGhvdy4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQWgsIGhlcmUgd2UgZ28sIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX05FVExJTktgLiBNYWtlcyBzZW5zZSwgdGhlIHF1ZXVlIGxpa2VseSBsZXZlcmFnZXMgdGhlIG5ldGxpbmsgaW5mcmFzdHJ1Y3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjb21tdW5pY2F0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGxpbmsgaW4gdGhlIGNoYWluLCBzbyB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0YW50IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgd2lsbCB3b3JrIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipORVRGSUxURVJfTkVUTElOSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODgtXHRkZXBlbmRzIG9uIE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODk6XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzkwOlx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzkxLVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwMC1cdGRlZmF1bHQgblxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwMTpcdGRlcGVuZHMgb24gKE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIHx8IE5FVEZJTFRFUl9ORVRMSU5LX0xPRykgXHUwMDI2XHUwMDI2IE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDItXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTU2NT1jb25maWcgTkZUX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTY2Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU2Ny1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgcXVldWUgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gTkVURklMVEVSX05FVExJTktfUVVFVUUqKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGp1c3QgcXVpY2tseSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIEkgbmVlZCB0byBzb2xpZGlmeSB0aGF0IGNvbmNlcHQgaW4gbXkgbWluZC4gTm90IGEgY3JpdGljYWwgaXNzdWUgYnkgYW55IG1lYW5zLCBidXQgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNjdXNzaW9uIGlmIEkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEkmIzM5O2xsIGp1c3QgY2hlY2sgdGhlIHN0YW5kYXJkIGRvY3VtZW50YXRpb24sIEkgaGF2ZSBpdCBzb21ld2hlcmUuLi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNwb3Qgb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJJiMzOTttIHN1cmUgSSYjMzk7bGwgZmluZCBpdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgbGluZSA1NCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBsaW5lIHByb2JhYmx5IGNvbnRhaW5zIGEgdG9wLWxldmVsIGBjb25maWdgIG9wdGlvbiBvciBhIG1vZHVsZSBkZWZpbml0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIHVzdWFsbHkgYmVnaW4uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIHNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGtleSBuZXRmaWx0ZXIgZmVhdHVyZXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3ZlIG9yZ2FuaXplZCB0aGUgb3B0aW9ucyBjb25jZXB0dWFsbHkg4oCTIGlzIGl0IGJhc2VkIG9uIHByb3RvY29sLCBmdW5jdGlvbmFsaXR5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIEhvcGVmdWxseSwgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDQzOlx0XHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXG4gIDQ0Olx0XHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNDk6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDUyOlx0XHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4gIDU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDU3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA2MDpcdFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbiAgNjM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDY0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNjU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDY4Olx0XHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEZXBlbmRlbmNpZXMgYW5kIE9wZW4gdlN3aXRjaDogQSBRdWljayBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGZlYXR1cmUuIEl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gT2theSwgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gaW1wbGljYXRpb25zLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aXRoIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuCgpOb3csIHdoaWxlIEkmIzM5O20gaW4gdGhlIG5laWdoYm9yaG9vZCwgaXQgd291bGRuJiMzOTt0IGh1cnQgdG8gZ2l2ZSBgT1BFTlZTV0lUQ0hgIGEgcXVpY2sgbG9vay1vdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGhlYWQgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBTb21ldGltZXMgcmVsYXRlZCBjb21wb25lbnRzIGhhdmUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIG9yIGNvbmZpZyBvcHRpb25zLCBhbmQgaXQmIzM5O3MgdXNlZnVsIHRvIGtlZXAgdGhhdCBpbiBtaW5kLCBqdXN0IGluIGNhc2UuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0IHVzZXMgb3IgcmVsYXRlcyB0byBOZXRmaWx0ZXIsIHJpZ2h0PyBTbywgbGV0JiMzOTtzIHNlZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBPcGVuIHZTd2l0Y2gsIGFuZCBpdCYjMzk7cyBjbGVhciBpdCBsZWFucyBvbiB0aGUgSU5FVCBzdGFjay4gUmlnaHQsIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gaXQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIE9wZW4gdlN3aXRjaCwgbmF0dXJhbGx5LCBidXQgYWxzbyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIHF1aWNrbHkgcmVtZW1iZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgdHlwaWNhbGx5IHRha2VuIGNhcmUgb2Ygb25lIHdheSBvciBhbm90aGVyLCBzbyBJJiMzOTtsbCBqdXN0IG1lbnRpb24gdGhlIGZpcnN0IHR3byBmb3Igbm93LiBMZXQmIzM5O3Mga2VlcCBpdCBzaW1wbGUgYW5kIHRvIHRoZSBwb2ludC4gT2gsIGJlZm9yZSBJIGZvcmdldCwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgc2tiX3plcm9jb3B5YCBpcyB1dGlsaXplZCBhbnl3aGVyZSBlbHNlOyBtaWdodCBiZSB1c2VmdWwgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzA9dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNzItXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzgyOD1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzE6ICpcdHNrYl96ZXJvY29weV9oZWFkbGVuIC0gQ2FsY3VsYXRlIGhlYWRyb29tIG5lZWRlZCBmb3Igc2tiX3plcm9jb3B5KClcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICYjMzk7dG8mIzM5OyBza2IgcGFzc2VkXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXHRpbnRvIHNrYl96ZXJvY29weSgpLlxubmV0L2NvcmUvc2tidWZmLmMtMzgzNi0gKi9cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3Nzpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODc4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwNT1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk1NDpcdFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTUtXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4Ny1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDA4LVxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTA5Mi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTA5MzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTEwOTQtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IEtlcm5lbCBQYXRjaCAtIFNLQiBGcmFnIFJlYWRhYmlsaXR5IENoZWNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHNvbWVvbmUmIzM5O3MgaW50cm9kdWNlZCBhIHNlcmllcyBvZiBjaGVja3MgZm9yIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKClgIHdpdGhpbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiB0aGVzZSBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgY29udGV4dHMgb2YgYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgb3ZzX2RwX3VwY2FsbGAgaW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLCBhcyBJIGtub3cgdGhvc2UgYXJlYXMgd2VsbCBmcm9tIG15IHdvcmsuCgpTcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBPcGVuIHZTd2l0Y2ggY29udGV4dCB3aXRoIHRoZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgZnVuY3Rpb24sIHRoaXMgZmVlbHMgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgZGF0YSBjb3JydXB0aW9uIG9yIGFjY2VzcyBpc3N1ZSB3aXRoIGZyYWdtZW50ZWQgc2ticy4gQW5kIHRoZSBtZW50aW9uIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgY29udGV4dCBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBhIHJlbGF0aW9uc2hpcCB0byBOZXRmaWx0ZXImIzM5O3MgdXNlcnNwYWNlIHF1ZXVlaW5nIG1lY2hhbmlzbSBvciBPcGVuIHZTd2l0Y2gmIzM5O3MgbmV0d29yayBkYXRhcGF0aC4KCkxldCYjMzk7cyBzZWU6IGBza2JfemVyb2NvcHlg4oCmIHJpZ2h0LCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGludm9sdmVkIGluIHplcm8tY29weSBvcGVyYXRpb25zLiAqQWgsIGludGVyZXN0aW5nKiwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgZ2l2ZW4gdGhlIGNvbnRleHQgYXJvdW5kIG5ldHdvcmtpbmcsIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBmcmFnbWVudCBoYW5kbGluZy4gSXMgYHNrYl96ZXJvY29weWAgY2FsbGVkIGZyb20gYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYD8gTGV0IG1lIHF1aWNrbHkgY2hlY2suLi4gWWVzLCBpdCBpcy4gQW5kIEkgYXNzdW1lIGBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZWAgaXMgZXhwb3J0ZWQg4oCTIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGF0JiMzOTtzIHJlbGV2YW50LiBJZiB0aG9zZSBmcmFnbWVudHMgYXJlIG5vdCByZWFkYWJsZSBpbiB0aGUgTkZRVUVVRSBjb250ZXh0IGFuZCBwb3RlbnRpYWxseSBjb3BpZWQgZnJvbSBrZXJuZWwgdG8gdXNlcnNwYWNlIGFuZCBiYWNrIHRvIGtlcm5lbCBhZ2Fpbiwgc29tZXRoaW5nIG11c3QgYmUgYXQgc3Rha2UgaWYgdGhleSBhcmVuJiMzOTt0IHJlYWRhYmxlIGluIHRoZSBwcm9jZXNzLgoKT2theSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBwYXRjaCBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hlY2sgaXMgYmVpbmcgYWRkZWQsIGFuZCBwcmVjaXNlbHkgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBgc2tiX2ZyYWdzX3JlYWRhYmxlYCBmdW5jdGlvbiBpcyBmYWlsaW5nLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNrYiBmcmFnbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgdGhyb3VnaG91dCB0aGUgdmFyaW91cyBwYXRocywgaW5jbHVkaW5nIE9wZW4gdlN3aXRjaCwgTmV0ZmlsdGVyIGFuZCBUQ1Agc3RhY2tzLiBUaGVyZSBtaWdodCBiZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgb3Igc29tZSBmcmFnbWVudGVkIGJ1ZmZlciBoYW5kbGluZywgcGVyaGFwcyB3aXRoIERNQSBvciBzaGFyZWQgbWVtb3J5IGNvbnNpZGVyYXRpb25zLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg3MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgdGhvdWdodCBwcm9jZXNzLiBMZXQmIzM5O3MgZ2V0IHRoaXMgZG9uZS4KKioqCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGNvcmUgcXVlc3Rpb24gc2VlbXMgdG8gYmUgd2hldGhlciB0aGUgc2l0dWF0aW9uIGlzIHN0YXRpYyBvciBkeW5hbWljLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQsIGlzbiYjMzk7dCBpdD8gSXQgZGljdGF0ZXMgZXZlcnl0aGluZyB0aGF0IGZvbGxvd3MuIElmIGl0JiMzOTtzIHN0YXRpYywgdGhlbiB0aGUgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgYWJvdXQgc3RhYmlsaXphdGlvbiwgY29udHJvbCwgYW5kIGEgZm9jdXMgb24gbWluaW1pemluZyBkZXZpYXRpb24gZnJvbSB0aGUgZXN0YWJsaXNoZWQgc3RhdGUuIEVzc2VudGlhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGludmFyaWFudHMsIHRoaW5ncyB0aGF0ICp3b24mIzM5O3QqIGNoYW5nZSwgYW5kIGxldmVyYWdlIHRoZW0uIEhvd2V2ZXIsIGlmIGl0IGlzbiYjMzk7dCBzdGF0aWMsIGl0IG1lYW5zIGNoYW5nZSBpcyBpbmhlcmVudCBpbiB0aGUgc3lzdGVtLiBUaGUgYXBwcm9hY2ggd2lsbCBuZWNlc3NhcmlseSByZXZvbHZlIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBmb3JjZXMgZHJpdmluZyB0aGF0IGNoYW5nZSwgcHJlZGljdGluZyBpdHMgZGlyZWN0aW9uLCBhbmQgYWRhcHRpbmcgYWNjb3JkaW5nbHkuIFN0YWJpbGl0eSBiZWNvbWVzIGEgbW92aW5nIHRhcmdldCwgYW5kIHJlc2lsaWVuY2UgYW5kIGFnaWxpdHkgYmVjb21lIHBhcmFtb3VudC4gU28sIHllcywgdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGNsYXNzaWZ5IHdoZXRoZXIgdGhlIHNpdHVhdGlvbiBpcyBzdGFibGUsIG9yIGluIGZsdXguIFRoYXQgZGlzdGluY3Rpb24gZGV0ZXJtaW5lcyB0aGUgcmlnaHQgcGF0aCBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3MDU6bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03MDYtXHRcdFx0ICAgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3ND1fX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4MS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTgyOlx0bnNrYiA9IG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKG5ldCwgcXVldWUsIGVudHJ5LCBcdTAwMjZwYWNrZXRfaWRfcHRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTgzLVx0aWYgKG5za2IgPT0gTlVMTCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqU3RhdGljIEZ1bmN0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgaGl0dGluZyBtZTogYF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRgLiBUaGlzIGZ1bmN0aW9uLi4uIGl0JiMzOTtzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIHNuYWdnaW5nIG15IGF0dGVudGlvbi4gQSBzdGF0aWMgZnVuY3Rpb24gaXMsIGJ5IGRlZmluaXRpb24sIGZpbGUtc2NvcGUgb25seS4gSXQmIzM5O3Mgbm90IHZpc2libGUgb3V0c2lkZSBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGdvaW5nIHRvIGltcGFjdCBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIElzIGl0IHN1cHBvc2VkIHRvIGJlIHN0YXRpYz8gSXMgdGhpcyBpbnRlbnRpb25hbCwgb3IgZGlkIHNvbWVvbmUgb3Zlcmxvb2sgc29tZXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHNwZWNpZmljIG1vZHVsZSBhbmQgaG93IGl0cyBlbmNhcHN1bGF0aW9uIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aGluIHRoaXMgY29udGV4dC4gTm93IEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLCBhbmQgaXRzIHN0YXRpYyBuYXR1cmUsIGltcGFjdHMgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBpbnRlbmRlZCBmbG93LiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mcW5sX2VucXVldWVfcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9OTczPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTc0Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzUtXHRcdFx0c3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNzY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDc3Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA3OC1cdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4Ny1cdFx0ZW50cnktXHUwMDNlc2tiID0gc2tiO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDg4Olx0XHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4OS1cdFx0aWYgKHJldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwOTgtXHRcdGVudHJ5X3NlZy1cdTAwM2Vza2IgPSBza2I7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwOTk6XHRcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnlfc2VnKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTEwMC1cdFx0aWYgKHJldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTExMDc9bmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc29fc2N0cChza2IpKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcdFx0cmV0dXJuIF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3NS1cdFx0aWYgKGVyciA9PSAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTc2Olx0XHRcdGVyciA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKG5ldCwgcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXHRcdFx0XHRcdFx0XHRzZWdzLCBlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbjogYG5mcW5sX2VucXVldWVfcGFja2V0YCoqCgpPa2F5LCBzbyB0aGUgZmFjdCB0aGF0IGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgZmV3IGZsYWdzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4gVGhhdCBpbXBsaWVzIGEgZmV3IGtleSB0aGluZ3MgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHRyYW5zbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gVGhpcyBzY3JlYW1zICYjMzQ7QVBJIGZ1bmN0aW9uJiMzNDsgb3IgJiMzNDtwYXJ0IG9mIGEgYnJvYWRlciBsaWJyYXJ5L21vZHVsZSYjMzQ7IOKAkyBzb21ldGhpbmcgaW50ZW5kZWQgZm9yIHJldXNlIGFuZCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIG5ldGZpbHRlciBxdWV1ZSBpbXBsZW1lbnRhdGlvbiBvciBldmVuIGV4dGVybmFsIGNvZGUuCgpUaGlzIGNvbnRyYXN0cyBzdHJvbmdseSB3aXRoIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCB3b3VsZCBiZSBzY29wZWQgcHVyZWx5IHdpdGhpbiBhIHNpbmdsZSAuYyBmaWxlLiBJbiB0aGF0IHNjZW5hcmlvLCBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIsIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IG1lYW50IGZvciBkaXJlY3QsIGV4dGVybmFsIGFjY2Vzcy4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIHdlIGhhdmUgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNyb3NzLW1vZHVsZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBpbmNsdWRlIGZpbGVzIHRoYXQgd291bGQgYWxsb3cgYW5vdGhlciBtb2R1bGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCgpJdCBhbHNvIG1lYW5zIHRoYXQgdGhlIGxpbmtlciBuZWVkcyB0byBiZSBhd2FyZSBvZiB0aGlzIGZ1bmN0aW9uLCBuZWVkaW5nIHRoZSByaWdodCBkZWNsYXJhdGlvbiB0byBnZXQgdGhlIGV4dGVybmFsIHN5bWJvbHMgY29ubmVjdGVkLiBXZSBuZWVkIHRvIGJlIHdhcnkgb2YgYW55IHBvdGVudGlhbCBuYW1lIGNsYXNoZXMsIHRvbyDigJMgYWx0aG91Z2ggaW4gYSB3ZWxsLXN0cnVjdHVyZWQgc3lzdGVtLCB3ZSYjMzk7ZCBiZSB1c2luZyBuYW1lc3BhY2VzIGFuZCBjYXJlZnVsbHkgbmFtZWQgZnVuY3Rpb25zIHRvIG1pbmltaXplIHN1Y2ggcmlza3MuIFRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBoYXMgaW1wbGljYXRpb25zIGZvciBzeW1ib2wgcmVzb2x1dGlvbiBhbmQsIHRoZXJlZm9yZSwgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGxpbmtpbmcgc3RyYXRlZ3kuIEl0IHNoYXBlcyBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIHdob2xlIHN5c3RlbS4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5mcW5sX2VucXVldWVfcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYG5mcW5sX2VucXVldWVfcGFja2V0YCBDb251bmRydW0qKgoKQWxyaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZyBpbW1lZGlhdGVseS4gVHlwaWNhbGx5LCBpZiBhIGZ1bmN0aW9uIGlzIGJlaW5nICp1c2VkKiBpbiBhIG1vZHVsYXIgb3IgZXh0ZXJuYWwgY29udGV4dCwgaXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQsIHJpZ2h0PyBPdGhlcndpc2UsIHlvdSYjMzk7bGwgYmUgc3RhcmluZyBkb3duIGxpbmtlciBlcnJvcnMgb3IgdW5kZWZpbmVkIHN5bWJvbCBpc3N1ZXMuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGl0ICppcyogYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgbWVtYmVyLCBvciBtYXliZSBldmVuIGJlaW5nIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcHV6emxlIGhlcmUuCgpTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGZ1bmN0aW9uIGlzIGJlaW5nIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIElzIGl0IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlIGFuZCBoaWRkZW4gdmlhIHN0YXRpYyBpbmxpbmU/IElzIGl0IGFjY2Vzc2VkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyPyBPciBpcyB0aGVyZSBzb21ldGhpbmcgZWxzZSBnb2luZyBvbj8gSSBzdXNwZWN0IHRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBtYXliZSBzb21lIHN5bWJvbCB0YWJsZSBhbmFseXNpcyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgJiMzNDtoaWRkZW4mIzM0OyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBHb3R0YSBkaWcgaW50byB0aGUgYnVpbGQgcHJvY2VzcywgdGhlIGxpbmtlciBzY3JpcHRzLCBhbmQgcG90ZW50aWFsbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSBzb3VyY2UgZmlsZXMuIFRoaXMgY291bGQgYmUgYSBzbmVha3kgYml0IG9mIGtlcm5lbCB0cmlja2VyeSwgb3IganVzdCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9lbnF1ZXVlX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk3NDpfX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVx0XHRcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMDc2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNzgtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXHRcdGVudHJ5LVx1MDAzZXNrYiA9IHNrYjtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA4ODpcdFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODktXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDk4LVx0XHRlbnRyeV9zZWctXHUwMDNlc2tiID0gc2tiO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5Olx0XHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5X3NlZyk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMTA2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTEwNzpuZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc29fc2N0cChza2IpKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcdFx0cmV0dXJuIF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3NS1cdFx0aWYgKGVyciA9PSAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTc2Olx0XHRcdGVyciA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKG5ldCwgcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXHRcdFx0XHRcdFx0XHRzZWdzLCBlbnRyeSk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciBuZnFoID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlx0Lm91dGZuXHRcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MDItXHQubmZfaG9va19kcm9wXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZSwgYnV0IHRoZSBgbmZfcXVldWVfaGFuZGxlciBuZnFoYCBzdHJ1Y3QgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggdGVsbHMgbWUgdGhlIG5ldGZpbHRlciBxdWV1ZSBpcyBhY3RpdmUuIFRoaXMgbWVhbnMgdGhhdCBmb2N1c2luZyBvbiBgc2tiX3plcm9jb3B5YCBpcyBzdGlsbCBhIHZhbGlkIGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBhIGNvdXBsZSBvZiBvdGhlciBrZXkgZnVuY3Rpb25zIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBhbHNvIHJlbGV2YW50LiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBleHBvcnRlZCwgZ29vZC4gQW5kLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGNoZWNraW5nIGBvdnNfZHBfdXBjYWxsYCBhbmQgaXQmIzM5O3MgY29uZmlybWVkLCBpdCBpcyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGEgY2FuZGlkYXRlIGFzIHdlbGwuCgpUaGVyZWZvcmUsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYW5hbHl6ZSBhcmU6CgoqICAgYHNrYl96ZXJvY29weWAKKiAgIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgCiogICBgb3ZzX2RwX3VwY2FsbGAKCkJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gdGhpcyBjb2RlOgoKKiAgIGBPUEVOVlNXSVRDSGAKKiAgIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAKCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4KCmBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gSG1tbS4uLiB1c3VhbGx5LCBpZiBgTkVURklMVEVSX0FEVkFOQ0VEYCBkZWZhdWx0cyB0byAmIzM0O3kmIzM0OyB0aGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBpdC4gQnV0IGl0JiMzOTtzIGJldHRlciB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBgTkVURklMVEVSX0FEVkFOQ0VEYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBjdXJyZW50IGxpbmUgb2YgdGhpbmtpbmcsIG15IGd1dCB0ZWxscyBtZSB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCBpbiBvbmUgb2YgdGhlIGJhc2UgS2NvbmZpZyBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9LY29uZmlnYCDigJMgaXQmIzM5O3MgYSBjcml0aWNhbCBmaWxlIGZvciBuZXR3b3JrLXJlbGF0ZWQgc2V0dGluZ3MsIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBmaXJzdCBzdG9wLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMjIwLCBhcyB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBiYXNlIG5ldHdvcmtpbmcgZmVhdHVyZXMgYXJlIHBsYWNlZC4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBjdXJyZW50IHByb2JsZW0gYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBicmFuY2hpbmcgbG9naWMgYW5kIHdoZXJlIG15IHNwZWNpZmljIHNldHRpbmcgbWlnaHQgYmUgaW50ZXJmZXJpbmcgd2l0aCBhIGJhc2UgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE1Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlIHVuZGVyIFwmIzM0O2lwdGFibGVzXCYjMzQ7IGZvciB0aGUgbG9jYXRpb24gb2ZcbiAyMTY6XHRcdCAgdGhlc2UgcGFja2FnZXMuXG4gMjE3Olx0XG4gMjE4Olx0aWYgTkVURklMVEVSXG4gMjE5Olx0XG4gMjIwOlx0Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIyMTpcdFx0Ym9vbCBcJiMzNDtBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblwmIzM0O1xuIDIyMjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcbiAyMjM6XHRcdGRlZmF1bHQgeVxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgY2FuIHNlbGVjdCBiZXR3ZWVuIGFsbCB0aGUgbmV0ZmlsdGVyIG1vZHVsZXMuXG4gMjI2Olx0XHQgIElmIHlvdSBzYXkgTiB0aGUgbW9yZSB1bnVzdWFsIG9uZXMgd2lsbCBub3QgYmUgc2hvd24gYW5kIHRoZVxuIDIyNzpcdFx0ICBiYXNpYyBvbmVzIG5lZWRlZCBieSBtb3N0IHBlb3BsZSB3aWxsIGRlZmF1bHQgdG8gJiMzOTtNJiMzOTsuXG4gMjI4Olx0XG4gMjI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMjMwOlx0XG4gMjMxOlx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbiAyMzI6XHRcdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4gMjMzOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuIDIzNDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjkKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMTM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29yZSBQYXRjaCBmb3IgWmVyby1Db3B5IE9wZXJhdGlvbnMqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZm9jdXMgaGVyZSBpcyBhIHBhdGNoIGludHJvZHVjaW5nIGBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIHdhcnJhbnRzIGEgZGVlcCBkaXZlIGJlY2F1c2UgaXQgYWZmZWN0cyBrZXkgbmV0d29yayBkYXRhIHBhdGggb3BlcmF0aW9ucy4gIFRoZSBmdW5jdGlvbnMgdGhhdCBjYXVnaHQgbXkgYXR0ZW50aW9uIGFyZSBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIGFsbCBvZiB3aGljaCBub3cgaW5jbHVkZSB0aGlzIG5ldyBjaGVjay4gIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O2Z1enppbmcmIzM0Oy4gIFRoaXMgaXMgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgY2FuIGV4cG9zZSBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIGludGVncml0eSwgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggemVyby1jb3B5IG9wZXJhdGlvbnMuCgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gIGBza2JfemVyb2NvcHlgIGlzIGEgY29yZSBmdW5jdGlvbiwgc28gdGhpcyBjb3VsZCBpbXBhY3QgYSB3aWRlIHJhbmdlIG9mIG5ldHdvcmsgZmxvd3MuICBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBlcXVhbGx5IGNydWNpYWwsIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCwgbWVhbmluZyB0aGVyZSYjMzk7cyBhIGhpZ2hlciBjaGFuY2Ugb2YgdGhpcyBpbXBhY3RpbmcgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgaW5jbHVzaW9uIGluIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBzdWdnZXN0cyBvcGVudnN3aXRjaCBpcyBhbHNvIGluIHRoZSBwaWN0dXJlLCBhbmQgSSB0aGluayB0aGF0JiMzOTtzIHdoeSB0aGlzIGlzIG1vcmUgc2lnbmlmaWNhbnQuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBpc3N1ZXMgd2hlcmUgZnJhZ21lbnRlZCBza19idWZmcyAobmV0d29yayBidWZmZXJzKSBhcmUgaW52b2x2ZWQuICBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHdpdGhpbiB0aGVzZSBmcmFnbWVudHMgaXMgYWNjZXNzaWJsZSBiZWZvcmUgemVyby1jb3B5IG9wZXJhdGlvbnMgb3IgdXNlcnNwYWNlIGludGVyYWN0aW9ucyBvY2N1ci4gSSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IHVucmVhZGFibGUgb3IgaW5jb25zaXN0ZW50IGRhdGEgZnJvbSBiZWluZyBwYXNzZWQgYXJvdW5kLiAgSWYgeW91IHRyeSB0byBjb3B5IGZyYWdtZW50cyBpbnRvIGEgYnVmZmVyLCBidXQgdGhleSYjMzk7cmUgbm90IHJlYWRhYmxlLCB0aGF0JiMzOTtzIGEgcHJvYmxlbS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIGJ1dCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/ICBgT1BFTlZTV0lUQ0hgIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBmb3IgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiAgQW5kLCBmb3IgdGhlIHJlc3QsIGFmdGVyIGEgcXVpY2sgY2hlY2ssIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQsIGxpa2UgYElORVRgLCB1bmxlc3MgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZy4gYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBsb29rcyByZWxldmFudCBiZWNhdXNlIHRoaXMgaXMgYSBuZXcgY2hlY2sgYW5kIG1heSBleHBvc2Ugc29tZXRoaW5nLgoKQWxyaWdodCwgd2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIG5lZWQgdG8gZGV2ZWxvcCBmdXp6aW5nIHN0cmF0ZWdpZXMuIEkgd2lsbCBmb2N1cyBvbiB6ZXJvLWNvcHkgc2NlbmFyaW9zIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHNvbWUgdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3VwY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O292c19kcF91cGNhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyAoYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgKSBhbmQgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIChgcXVldWVfdXNlcnNwYWNlX3BhY2tldGApIHRvIGFkZCBjaGVja3MgZm9yIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoYHNrYl9mcmFnc19yZWFkYWJsZWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdW5yZWFkYWJsZSBmcmFnbWVudHMgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOTg3NjRhOGY5MzljY2Q5ZmJmYWRiZTZjZjE3Yjc3MGIyYzAwNDAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMjA6MDY6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLmQyMWFmNjgxNTY5NTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0zODcwLDcgJiM0MzszODcwLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pOwogICoJUmV0dXJuIHZhbHVlOgogICoJMDogZXZlcnl0aGluZyBpcyBPSwogICoJLUVOT01FTTogY291bGRuJiMzOTt0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnkKLSAqCS1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnkKJiM0MzsgKgktRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5LCBvciByZWFkYWJsZSBoZWFkCiYjNDM7ICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy4KICAqLwogaW50CiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCkBAIC0zOTA1LDEwICYjNDM7MzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAJCX0KIAl9CiAKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgJmFtcDsmYW1wOyBqICZndDsgMCAmYW1wOyZhbXA7IGxlbikgewomIzQzOwkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsKIAlza2JfbGVuX2FkZCh0bywgbGVuICYjNDM7IHBsZW4pOwogCiAJaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7CiAJCXNrYl90eF9lcnJvcihmcm9tKTsKJiM0MzsJCWlmIChqICZndDsgMCkKJiM0MzsJCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpOwpAQCAtMzkyOCw2ICYjNDM7MzkzNiw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbikKIAl9CiAJc2tiX3NoaW5mbyh0byktJmd0O25yX2ZyYWdzID0gajsKIAomIzQzOwlpZiAoaSAmZ3Q7IDAgJmFtcDsmYW1wOyBmcm9tLSZndDt1bnJlYWRhYmxlKQomIzQzOwkJdG8tJmd0O3VucmVhZGFibGUgPSAxOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNDU1NDQxZjFiNjk0OS4uMTg2YTM2YzY5ODc5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTEyNzgsNiAmIzQzOzEyNzgsMTEgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCWlmIChjb3B5ICZndDsgbXNnX2RhdGFfbGVmdChtc2cpKQogCQkJY29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTsKIAomIzQzOwkJaWYgKHpjICE9IE1TR19aRVJPQ09QWSAmYW1wOyZhbXA7IHVubGlrZWx5KCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpIHsKJiM0MzsJCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOwomIzQzOwkJCWdvdG8gbmV3X3NlZ21lbnQ7CiYjNDM7CQl9CiYjNDM7CiAJCWlmICh6YyA9PSAwKSB7CiAJCQlib29sIG1lcmdlID0gdHJ1ZTsKIAkJCWludCBpID0gc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTQ2Nyw2ICYjNDM7NDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFkcF9pZmluZGV4KQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiAJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoIW5za2IpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDY0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBVbnJlYWRhYmxlIFNLQiBGcmFnbWVudHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIGNydWNpYWwgY2hhbmdlcyBhcm91bmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBgc2tiYCBmcmFnbWVudHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzY2VuYXJpb3Mgd2hlcmUgdGhlc2UgZnJhZ21lbnRzIGFyZSAmIzM0O3VucmVhZGFibGUuJiMzNDsgRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIHBhdGNoIHRvdWNoZXMgYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpbmdzIGxpa2UgZGV2aWNlIG1lbW9yeSBUQ1Agb3IgcG90ZW50aWFsbHkgc2ltaWxhciBmZWF0dXJlcyB3aGVyZSBgc2tiYCBmcmFncyBtaWdodCBiZSBwb2ludGluZyB0byBtZW1vcnkgdGhhdCB0aGUgQ1BVIGNhbiYjMzk7dCBkaXJlY3RseSByZWFkLCBsaWtlIERNQSBidWZmZXJzIG9yIGRldmljZSBtZW1vcnkuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgdXNpbmcgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IHRyeSB0byBhY2Nlc3MgdGhvc2UgdW5yZWFkYWJsZSBmcmFnbWVudHMsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYSBjcmFzaCBvciBhIGtlcm5lbCBmYXVsdC4gRm9yIGV4YW1wbGUsIGluIGBza2JfemVyb2NvcHlgLCBpdCYjMzk7cyBhZGRpbmcgYSBjaGVjazoKCmBgYGMKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgJmFtcDsmYW1wOyBqICZndDsgMCAmYW1wOyZhbXA7IGxlbikgewomIzQzOwkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KYGBgCgphbmQgZW5zdXJpbmcgdGhhdCBpZiB0aGVyZSBhcmUgdW5yZWFkYWJsZSBmcmFncywgYHRvLSZndDt1bnJlYWRhYmxlYCBpcyBzZXQgYXBwcm9wcmlhdGVseSwgcHJlc2VydmluZyB0aGUgdW5yZWFkYWJsZSBzdGF0ZS4gSW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXQganVtcHMgdG8gYSBuZXcgc2VnbWVudC4gVGhlIGZpeCBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgYSBiaXQgbW9yZSBzdHJhaWdodCBmb3J3YXJkIGFuZCBqdXN0IHJldHVybnMgLUVGQVVMVC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXNuJiMzOTt0IGFib3V0IEtNU0FOIOKAkyBpdCYjMzk7cyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGV2ZW4gYXR0ZW1wdGluZyB0byByZWFkIG1lbW9yeSBpdCYjMzk7cyAqbm90IGFsbG93ZWQqIHRvIHJlYWQuIFRoZSByb290IGNhdXNlIGlzIGEgc2l0dWF0aW9uIHdoZXJlIHlvdSBtaWdodCBoYXZlIHJlYWRhYmxlIGFuZCB1bnJlYWRhYmxlIGZyYWdtZW50cywgb3IgbW9yZSBzcGVjaWZpY2FsbHksIGludmFsaWQgcG9pbnRlcnMuIElmIHRoZSBjb2RlIGRpZCB0cnkgdG8gcmVhZCBmcm9tIGFuIHVucmVhZGFibGUgZnJhZywgaXQmIzM5O2QgY2F1c2UgYSBwYWdlIGZhdWx0LCB3aGljaCBpcyBhIGJpZyBwcm9ibGVtLiBLQVNBTiB3b3VsZCBwcm9iYWJseSBjYXRjaCBzb21lIG9mIHRoZXNlIGFzIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUsIGJ1dCBhIHNpbXBsZSB1bnJlYWRhYmxlIG1lbW9yeSBhY2Nlc3MgaXMgZ29pbmcgdG8gZmF1bHQgdGhlIHBhZ2UsIHNvIEtNU0FOIGlzbiYjMzk7dCB0aGUgY29uY2Vybi4KClNvLCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGlzLiBgc2tiX2ZyYWdzX3JlYWRhYmxlYCBpcyByZWFsbHkganVzdCBhIHNhZmVndWFyZCBhZ2FpbnN0IGFjY2Vzc2luZyB0aG9zZSBDUFUtaW5hY2Nlc3NpYmxlIGZyYWdtZW50cy4gU2luY2Ugd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgYnV0IHdpdGggbWVtb3J5IHRoYXQmIzM5O3MgbGl0ZXJhbGx5ICp1bnJlYWRhYmxlKiBieSB0aGUgQ1BVLCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyBjb3JyZWN0LiBUaGUgcGF0Y2ggaXMgYWJvdXQgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHVucmVhZGFibGUgbWVtb3J5IChlLmcuLCBmcm9tIGRldm1lbSBUQ1ApLCBhdm9pZGluZyBwYWdlIGZhdWx0cywgYW5kIHByZXZlbnRpbmcgbWl4aW5nIG9mIHJlYWRhYmxlIGFuZCB1bnJlYWRhYmxlIGZyYWdzLiBUaGUga2VybmVsJiMzOTtzIHBhZ2UgZmF1bHQgaGFuZGxlciwgYWxvbmcgd2l0aCBLQVNBTiwgd2lsbCBzdGlsbCBmdW5jdGlvbiBhcyBleHBlY3RlZCBhbmQgZGVhbCB3aXRoIGNhc2VzIHdoZXJlIG1lbW9yeSBpcyBpbXByb3Blcmx5IGFjY2Vzc2VkLiBJJiMzOTtsbCBzdW1tYXJpemUgdGhlIHJhdGlvbmFsZSB3aXRoIHRoZXNlIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjoxNS40MDc3NzY4NzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIzNTIxODkzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcIm92c19kcF91cGNhbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgd2l0aCB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGUuZy4sIGRldmljZSBtZW1vcnkgVENQIHBheWxvYWRzKSwgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZW0gb3IgbWl4aW5nIHRoZW0gd2l0aCByZWFkYWJsZSBmcmFnbWVudHMuIFRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIGtlcm5lbCBwYWdlIGZhdWx0cyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyB0byBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaW52YWxpZCBhY2Nlc3NlcyB0byB1bm1hcHBlZCBvciB1bnJlYWRhYmxlIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDY6MTUuNDA3NzgyOTMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzNTc2MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk4NzY0YThmOTM5Y2NkOWZiZmFkYmU2Y2YxN2I3NzBiMmMwMDQwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMDowNjoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuQEAgLTM4NzAsNyArMzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcXG4gICpcXHRSZXR1cm4gdmFsdWU6XFxuICAqXFx0MDogZXZlcnl0aGluZyBpcyBPS1xcbiAgKlxcdC1FTk9NRU06IGNvdWxkbid0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnlcXG4tICpcXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5XFxuKyAqXFx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZFxcbisgKiAgICAgIHBheWxvYWQgd291bGQgYmUgbWl4ZWQgd2l0aCB1bnJlYWRhYmxlIGZyYWdzLlxcbiAgKi9cXG4gaW50XFxuIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG5AQCAtMzkwNSwxMCArMzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXFx1MDAyNlxcdTAwMjYgaiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGVuKSB7XFxuK1xcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXFx1MDAzZWhlYWQpKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuIFxcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xcbiBcXHRcXHRza2JfdHhfZXJyb3IoZnJvbSk7XFxuK1xcdFxcdGlmIChqIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cXHUwMDNlaGVhZCkpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbkBAIC0zOTI4LDYgKzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxuIFxcdH1cXG4gXFx0c2tiX3NoaW5mbyh0byktXFx1MDAzZW5yX2ZyYWdzID0gajtcXG4gXFxuK1xcdGlmIChpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBmcm9tLVxcdTAwM2V1bnJlYWRhYmxlKVxcbitcXHRcXHR0by1cXHUwMDNldW5yZWFkYWJsZSA9IDE7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXFxuaW5kZXggNDU1NDQxZjFiNjk0OS4uMTg2YTM2YzY5ODc5OCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcC5jXFxuQEAgLTEyNzgsNiArMTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0aWYgKGNvcHkgXFx1MDAzZSBtc2dfZGF0YV9sZWZ0KG1zZykpXFxuIFxcdFxcdFxcdGNvcHkgPSBtc2dfZGF0YV9sZWZ0KG1zZyk7XFxuIFxcbitcXHRcXHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpIHtcXG4rXFx0XFx0XFx0dGNwX21hcmtfcHVzaCh0cCwgc2tiKTtcXG4rXFx0XFx0XFx0Z290byBuZXdfc2VnbWVudDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKHpjID09IDApIHtcXG4gXFx0XFx0XFx0Ym9vbCBtZXJnZSA9IHRydWU7XFxuIFxcdFxcdFxcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbkBAIC00NjcsNiArNDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghZHBfaWZpbmRleClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuIFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuIFxcdFxcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFuc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjoxNi43NzIyOTA4NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjk4NDQwMzg1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcIm92c19kcF91cGNhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzk4NzY0YThmOTM5Y2NkOWZiZmFkYmU2Y2YxN2I3NzBiMmMwMDQwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIwOjA2OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4NzAsNyArMzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbid0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnlcbi0gKlx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeVxuKyAqXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5LCBvciByZWFkYWJsZSBoZWFkXG4rICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCArMzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbitcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4gXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbitcdFx0aWYgKGogXHUwMDNlIDApXG4rXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgKzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHR9XG4gXHRza2Jfc2hpbmZvKHRvKS1cdTAwM2Vucl9mcmFncyA9IGo7XG4gXG4rXHRpZiAoaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgZnJvbS1cdTAwM2V1bnJlYWRhYmxlKVxuK1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLjE4NmEzNmM2OTg3OTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0xMjc4LDYgKzEyNzgsMTEgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGlmIChjb3B5IFx1MDAzZSBtc2dfZGF0YV9sZWZ0KG1zZykpXG4gXHRcdFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcbiBcbitcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSkge1xuK1x0XHRcdHRjcF9tYXJrX3B1c2godHAsIHNrYik7XG4rXHRcdFx0Z290byBuZXdfc2VnbWVudDtcbitcdFx0fVxuK1xuIFx0XHRpZiAoemMgPT0gMCkge1xuIFx0XHRcdGJvb2wgbWVyZ2UgPSB0cnVlO1xuIFx0XHRcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzO1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC00NjcsNiArNDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWRwX2lmaW5kZXgpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuIFx0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghbnNrYilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjE2Ljc3MjI5Mjg4OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTY3ODk5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTmV3IE5ldHdvcmsgQ29kZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2s6IGBza2J1ZmYuY2AsIGB0Y3AuY2AsIGFuZCB0aGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGFkZGluZyBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgaW4gZnVuY3Rpb25zIGxpa2UgYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBHaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCBvbiBjb3JlIG5ldHdvcmtpbmcsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICpmdXp6aW5nKi4gV2UgKm5lZWQqIHRvIGZ1enogdGhpcy4gSXQncyB0b28gaW1wb3J0YW50IHRvIGxlYXZlIHVudGVzdGVkLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgc2xpZ2h0IGh1cmRsZSwgYnV0IHdlIGNhbiBwcm9iYWJseSB0cmFjZSBkb3duIGl0cyBjYWxsZXIgdG8gZ2V0IGNvbnRleHQuIE5vdywgSSdsbCBkaXZlIGludG8gdGhlIHVzYWdlcyBvZiBgc2tiX3plcm9jb3B5YCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjIxLjY4OTA4Njc5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwODU4MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaD00MTM9ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9uZXRiYWNrX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxNjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxODp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTQ5LSAqIGNvdW50ZXIgYmVjYXVzZSBjb3JlIGRyaXZlciBjYWxscyBpbnRvIHhlbnZpZl96ZXJvY29weV9jYWxsYmFja1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTI6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNjAte1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdDtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIxMTpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIG5za2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVxcdFxcdFxcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjM0OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjc0LVxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50Kys7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE0LVxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9mYWlsKys7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XFx0eGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI2OT12b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjcyLVxcdFxcdCBpbnQgbGVuLCBpbnQgaGxlbik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4MTQ6c3RhdGljIGJvb2wgc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxvLCB1MTYgbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgzND1zdGF0aWMgdm9pZCBfX21zZ196ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjICp1YXJnKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cXHRpZiAoIXRhaWwgfHwgU0tCX0VYVF9FUlIodGFpbCktXFx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlxcdCAgICAhc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQodGFpbCwgbG8sIGxlbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTk2MS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNDktXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjUwOlxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjUxLVxcdFxcdFxcdGtmcmVlX3NrYihuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXFx0c2tiX3plcm9jb3B5X2hlYWRsZW4gLSBDYWxjdWxhdGUgaGVhZHJvb20gbmVlZGVkIGZvciBza2JfemVyb2NvcHkoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcXHRAZnJvbTogc291cmNlIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlxcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAndG8nIHNrYiBwYXNzZWRcXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXFx0aW50byBza2JfemVyb2NvcHkoKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG5uZXQvY29yZS9za2J1ZmYuYy0zODM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTU6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODU4OiAqXFx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXFx0QHRvOiBkZXN0aW5hdGlvbiBidWZmZXJcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcXG5uZXQvY29yZS9za2J1ZmYuYzozODY3OiAqXFx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcXHRoZWFkcm9vbSBpbiB0aGUgYHRvYCBidWZmZXIuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkyMS1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00MjQ5LVxcdHNrYl9zaGluZm8oc2tiMSktXFx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB6Y19mbGFncztcXG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlxcdHNrYl96ZXJvY29weV9jbG9uZShza2IxLCBza2IsIDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0aWYgKGxlbiBcXHUwMDNjIHBvcylcXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzg4PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTI6XFx0XFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MobGlzdF9za2IsIEdGUF9BVE9NSUMpIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcXHRcXHRcXHRcXHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTM0My1cXG5uZXQvaXB2NC90Y3AuYzoxMzQ0OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVxcdGlmIChkcC1cXHUwMDNldXNlcl9mZWF0dXJlcyBcXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1MDE6XFx0XFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUwMi1cXHRlbHNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01ODctXFx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4OlxcdCAqIGluIHNrYl96ZXJvY29weSgpICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVxcdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XFx0ZXJyID0gc2tiX3plcm9jb3B5KHVzZXJfc2tiLCBza2IsIHNrYl9sZW4sIGhsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAwOC1cXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA4NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTA5Mi1cXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG5uZXQveGRwL3hzay5jOjEwOTM6XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMDk0LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjoyMy45NTk5NDk0MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ3NTE0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gSSBrbm93IHRoYXQgYHNrYl96ZXJvY29weWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJJ3ZlIHNlZW4gaXQgdXNlZCBpbiBwbGFjZXMgbGlrZSB0aGUgTmV0ZmlsdGVyIE5GTkVUTElOSyBxdWV1ZSBpbXBsZW1lbnRhdGlvbiAoYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgKSBhbmQgd2l0aGluIE9wZW4gdlN3aXRjaCdzIGRhdGFwYXRoIGNvZGUgKGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2ApLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBjb21wb25lbnRzIGxldmVyYWdlIHplcm8tY29weSBtZWNoYW5pc21zLlxuXG5gdGNwX3NlbmRtc2dfbG9ja2VkYCwgdGhhdCdzIHRoZSBicmVhZC1hbmQtYnV0dGVyIG9mIFRDUCBzZW5kIG9wZXJhdGlvbnMuIEFueSBjaGFuZ2UgdGhlcmUgaXMgcG90ZW50aWFsbHkgZmFyLXJlYWNoaW5nLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgaW50ZXJhY3Rpb25zIGNhcmVmdWxseS5cblxuVGhlbiB0aGVyZeKAmXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIHdoaWNoLCBhZ2Fpbiwgc2hvd3MgdXAgaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aC4gU28sIGxldOKAmXMgbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoZXNlIHRocmVlOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEknbSBnb2luZyB0byBmb2N1cyBvbiBhcyBJIGRpZyBkZWVwZXIuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgSSBqdXN0IHJlY2FsbGVkIHRoYXQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFN0aWxsLCBpZiBpdCdzIGJlaW5nIG1vZGlmaWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbGVycyB3aXRoaW4gdGhhdCBtb2R1bGUuIEl0J3MgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCwgYnV0IHN0aWxsIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBpdHMgY2FsbGVycyB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTc3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjI4LjYwNzQ2NzE4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUyNzE3MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMC1cXHRcXHRcXHQgICAgIHVpbnQzMl90IGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzI5PWludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDUtXFx0aWYgKCFza2JfaXNfZ3NvKHNrYikpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzQ2OlxcdFxcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDctXFx0ZWxzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY2PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozOTc6XFx0XFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQxPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDUyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjMwLjI2MDE5MTI3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTQ3NzcyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiBhIHNwZWNpZmljIGFyZWEuIGBvdnNfZHBfdXBjYWxsYCBpcyBhIGtleSBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZSBiZWNhdXNlIGl0IGRpcmVjdGx5IGNhbGxzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIGZsb3cgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2guXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgd2hhdCdzIHVzaW5nIGBza2JfemVyb2NvcHlgLiAgQSBxdWljayBzY2FuIHJldmVhbHMgaXQncyBjYWxsZWQgYnkgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBieSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXRzZWxmIGluIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggY29kZS4gSW50ZXJlc3RpbmcuXG5cblRoZW4sIGZvciBjb250cmFzdCwgSSdtIGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIFRDUCwgYW5kIEknbSBzZWVpbmcgaXQncyBjYWxsZWQgYnkgdGhlIHN0YW5kYXJkIGB0Y3Bfc2VuZG1zZ2AsIGB0Y3Bfc2VuZHBhZ2VfbG9ja2VkYCwgYW5kIG90aGVyIGNvcmUgVENQIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCBmb3IgY29tcGFyaXNvbi5cblxuU28sIHRvIHN1bW1hcml6ZSBteSBrZXkgZm9jdXMgc3ltYm9scyByaWdodCBub3csIEkgaGF2ZTpcblxuKiAgIGBza2JfemVyb2NvcHlgXG4qICAgYHRjcF9zZW5kbXNnX2xvY2tlZGBcbiogICBgb3ZzX2RwX3VwY2FsbGBcblxuQmFzZWQgb24gdGhpcyBwYXRoLCB0aGUgY29uZmlndXJhdGlvbnMgb2YgaW50ZXJlc3QgYXJlIHByZXR0eSBjbGVhcmx5OlxuXG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWBcblxuSSBzaG91bGQgcmVhbGx5IHF1aWNrbHkgbG9vayBhdCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGluIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBvbiB0aGF0IGZyb250LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjI5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjM1Ljk1NDk3MTYxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExOTIyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjM3LjQ2Njg5OTgwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODU5ODQ0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBPcGVuIHZTd2l0Y2ggaW4gdGhlIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYE9QRU5WU1dJVENIYCBjb25maWd1cmF0aW9uIGluIHRoZSBLY29uZmlnIGZpbGVzLiBJIGtub3cgdGhlIGdlbmVyYWwgc3RydWN0dXJlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHR5cGljYWwgbG9jYXRpb25zIHdoZXJlIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzIHJlc2lkZSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIE9wZW4gdlN3aXRjaCBpcyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZmlndXJlZCBhcyBhIG1vZHVsZS4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JrIHN0YWNrcyBvciBmZWF0dXJlcywgbGlrZSBicmlkZ2luZyBvciBWTEFOIHN1cHBvcnQsIGFuZCBob3cgdGhvc2UgbWlnaHQgYmUgY29uZmlndXJlZCBpbiByZWxhdGlvbiB0byB0aGUgT1ZTIGVudHJ5LiBDaGVja2luZyB0aGUgS2NvbmZpZyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBjb21wb25lbnQgaXMgYWN0dWFsbHkgYnVpbHQgaW50byB0aGUgaW1hZ2UsIG9yIGlmIGl0J3MgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbnRleHQgYXQgYWxsLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgYmFzZSBzdGF0ZSBvZiBPcGVuIHZTd2l0Y2ggd2l0aGluIHRoZSBzeXN0ZW0gSSdtIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjQxLjM1Mjg4Njg3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDUwMDUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjQyLjgyNzM5NjExNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ0ODY4MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uczogYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGNvcnJlY3RseSBzZXQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIEJlZm9yZSBJIGRpdmUgZGVlcGVyLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGUga2VybmVsIGV4cG9ydHMgdGhlIGBza2JfemVyb2NvcHlgIHN5bWJvbCwgZXNwZWNpYWxseSBpZiB0aGUgY29kZSBJJ20gd29ya2luZyB3aXRoIG1pZ2h0IHJlbHkgb24gaXQuIEhtbSwgbG9va3MgZ29vZC4gYEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7YCBpcyBpbmRlZWQgcHJlc2VudCwgc28gbm8gaW1tZWRpYXRlIGNvbmNlcm5zIHRoZXJlLiBOZXh0LCBsZXQncyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIHN5bWJvbCBtaWdodCBiZSByZXF1aXJlZCBmb3IgbXkgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjQ2LjM3MjI2NjgyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MTAzNjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0Y3Bfc2VuZG1zZ19sb2NrZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NDgtfVxcbm5ldC9pcHY0L3RjcC5jOjE0NDk6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjo0OC40NjMzMDkxNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwOTY3ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbml0aWFsIEFmZmlybWF0aW9uIGFuZCBWZXJpZmljYXRpb24qKlxuXG5ZZXMuIE9rYXksIHRoYXQgZmVlbHMgcmlnaHQgaW4gcHJpbmNpcGxlLiBCdXQgYmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgYG92c19kcF91cGNhbGxgLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGNvbXBvbmVudCBhbmQgaXRzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIHNwZWNpZmljIGRldGFpbHMuIEp1c3QgYSBxdWljayByZXZpZXcgd2lsbCBlbnN1cmUgSSdtIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBteSBtZW50YWwgbW9kZWwgb2YgdGhhdCBhc3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTQ5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDY6NTMuMDcyOTkwMDQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM0Mzc0NDAyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipvdnNfZHBfdXBjYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjo1NS4xMDczNzIxNDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2MTc2MjIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBUaGlzIGRhdGEgaXNuJ3QgKmV4cG9ydGVkKiwgc28gaXQncyBub3QgYSBzaW1wbGUgdmFyaWFibGUgSSBjYW4gZWFzaWx5IGFjY2Vzcy4gQnV0LCBpdCdzIGFsc28gbm90IHN0YXRpY2FsbHkgZGVmaW5lZCwgd2hpY2ggaW1wbGllcyBpdCdzIGJlaW5nIGhhbmRsZWQgZHluYW1pY2FsbHkuIEFscmlnaHQsIGxldCdzIHNlZSB3aGVyZSB0aGF0IHRha2VzIG1lLiBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIGhvdyB0aGlzIG5vbi1leHBvcnRlZCwgbm9uLXN0YXRpYyBkYXRhIGlzIG1hbmFnZWQsIHRvIGRldGVybWluZSBob3cgSSBjYW4gYWNjZXNzIGl0LiBSaWdodCwgSSB0aGluayB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIG1hbmlwdWxhdGlvbiBpcyB0aGUgYG92c19kcF91cGNhbGxgIGZ1bmN0aW9uLiBOb3csIHdoZXJlIGlzIGl0LCBhaCB5ZXMuLi4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gTGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMjUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjo1OC45NjkxMzY5MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTEwNTMyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG92c19kcF91cGNhbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzI4LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMyOTppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzMC1cXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzIxPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjI6aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICosIHN0cnVjdCBza19idWZmICosXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIzLVxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIGNvbnN0IHN0cnVjdCBkcF91cGNhbGxfaW5mbyAqLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzowMC41NjAxOTQ4NzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyODg3OTIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhpcyBub24tc3RhdGljIGVsZW1lbnQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdHMgZHluYW1pYyBuYXR1cmUgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgYXMgYSBnb29kIGZvY3VzIHN5bWJvbCwgc3VnZ2VzdGluZyBwb3RlbnRpYWwgZm9yIG1vcmUgc29waGlzdGljYXRlZCBjb250cm9sIG9yIGludGVyYWN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSBob3cuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBoZXJlIHdlIGdvLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9ORVRMSU5LYC4gTWFrZXMgc2Vuc2UsIHRoZSBxdWV1ZSBsaWtlbHkgbGV2ZXJhZ2VzIHRoZSBuZXRsaW5rIGluZnJhc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY29tbXVuaWNhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGxpbmsgaW4gdGhlIGNoYWluLCBzbyB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0YW50IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgd2lsbCB3b3JrIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjA0Ljg4OTA3NjM2N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzEzNjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipORVRGSUxURVJfTkVUTElOS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4OC1cXHRkZXBlbmRzIG9uIE5GX0NUX05FVExJTktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg5OlxcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzkwOlxcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTEtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDAtXFx0ZGVmYXVsdCBuXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwMTpcXHRkZXBlbmRzIG9uIChORVRGSUxURVJfTkVUTElOS19RVUVVRSB8fCBORVRGSUxURVJfTkVUTElOS19MT0cpIFxcdTAwMjZcXHUwMDI2IE5GX0NUX05FVExJTktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDAyLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01NjU9Y29uZmlnIE5GVF9RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NjY6XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NjctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgcXVldWUgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzowNy4wNjIyMjA0MTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyODc3MDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gTkVURklMVEVSX05FVExJTktfUVVFVUUqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEknbSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHJlY2FsbCB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIG5lZWQgdG8gc29saWRpZnkgdGhhdCBjb25jZXB0IGluIG15IG1pbmQuIE5vdCBhIGNyaXRpY2FsIGlzc3VlIGJ5IGFueSBtZWFucywgYnV0IEknbSB0aGlua2luZyBJJ2xsIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBvZiB0aGlzIGRpc2N1c3Npb24gaWYgSSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIGp1c3QgY2hlY2sgdGhlIHN0YW5kYXJkIGRvY3VtZW50YXRpb24sIEkgaGF2ZSBpdCBzb21ld2hlcmUuLi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNwb3Qgb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJJ20gc3VyZSBJJ2xsIGZpbmQgaXQgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzoxMC43OTA5OTM5OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQ5ODI0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MTIuMzE1OTgxODE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDQwMDM5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQsIGFuZCBsaW5lIDU0IGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGdyYXNwIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSBwcm9iYWJseSBjb250YWlucyBhIHRvcC1sZXZlbCBgY29uZmlnYCBvcHRpb24gb3IgYSBtb2R1bGUgZGVmaW5pdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyB1c3VhbGx5IGJlZ2luLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIHNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGtleSBuZXRmaWx0ZXIgZmVhdHVyZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSd2ZSBvcmdhbml6ZWQgdGhlIG9wdGlvbnMgY29uY2VwdHVhbGx5IOKAkyBpcyBpdCBiYXNlZCBvbiBwcm90b2NvbCwgZnVuY3Rpb25hbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjE1Ljc1OTk4ODY1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA0MzpcXHRcXHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXFxuICA0NDpcXHRcXHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDQ5OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA1MjpcXHRcXHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAgNTU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjA6XFx0XFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA2NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDY1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA2ODpcXHRcXHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzoxNS43NjAwOTE1ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NTE3OTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBPcGVuIHZTd2l0Y2g6IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBmZWF0dXJlLiBJdCdzIG1ha2luZyBtZSB3b25kZXIgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gT2theSwgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBpbXBsaWNhdGlvbnMuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggd2l0aCBkZXBlbmRlbmNpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIHdoaWxlIEknbSBpbiB0aGUgbmVpZ2hib3Job29kLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGdpdmUgYE9QRU5WU1dJVENIYCBhIHF1aWNrIGxvb2stb3Zlci4gSSdsbCBuZWVkIHRvIGhlYWQgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBTb21ldGltZXMgcmVsYXRlZCBjb21wb25lbnRzIGhhdmUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIG9yIGNvbmZpZyBvcHRpb25zLCBhbmQgaXQncyB1c2VmdWwgdG8ga2VlcCB0aGF0IGluIG1pbmQsIGp1c3QgaW4gY2FzZS4gSXQncyBsaWtlbHkgdGhhdCBpdCB1c2VzIG9yIHJlbGF0ZXMgdG8gTmV0ZmlsdGVyLCByaWdodD8gU28sIGxldCdzIHNlZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MjEuMjA1Mjc1MTU4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzoyMS4yMDUzMzQyOThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MTg1MjQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBPcGVuIHZTd2l0Y2gsIGFuZCBpdCdzIGNsZWFyIGl0IGxlYW5zIG9uIHRoZSBJTkVUIHN0YWNrLiBSaWdodCwgdGhhdCdzIGZ1bmRhbWVudGFsLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIE9wZW4gdlN3aXRjaCwgbmF0dXJhbGx5LCBidXQgYWxzbyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIHF1aWNrbHkgcmVtZW1iZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgdHlwaWNhbGx5IHRha2VuIGNhcmUgb2Ygb25lIHdheSBvciBhbm90aGVyLCBzbyBJJ2xsIGp1c3QgbWVudGlvbiB0aGUgZmlyc3QgdHdvIGZvciBub3cuIExldCdzIGtlZXAgaXQgc2ltcGxlIGFuZCB0byB0aGUgcG9pbnQuIE9oLCBiZWZvcmUgSSBmb3JnZXQsIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHNrYl96ZXJvY29weWAgaXMgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZTsgbWlnaHQgYmUgdXNlZnVsIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjI0Ljg1NzE4OTM0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMjA2NTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfemVyb2NvcHlcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzA9dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzE6aW50IHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3Mi1cXHRcXHQgaW50IGxlbiwgaW50IGhsZW4pO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzgyOD1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzAtIC8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzE6ICpcXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzMi0gKlxcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM0LSAqXFx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICd0bycgc2tiIHBhc3NlZFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzU6ICpcXHRpbnRvIHNrYl96ZXJvY29weSgpLlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzYtICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg3LVxcdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjU4ODpcXHQgKiBpbiBza2JfemVyb2NvcHkoKSAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cXHRpZiAoIShubGEgPSBubGFfcmVzZXJ2ZSh1c2VyX3NrYiwgT1ZTX1BBQ0tFVF9BVFRSX1BBQ0tFVCwgMCkpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTk1OlxcdGVyciA9IHNrYl96ZXJvY29weSh1c2VyX3NrYiwgc2tiLCBza2JfbGVuLCBobGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXFxuLS1cXG5uZXQveGRwL3hzay5jLTEwMDgtXFxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtMTAxMC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jPTEwODU9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTEwOTItXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMDkzOlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTA5NC1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MjcuMDY5MjYwNjM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5Mzk5ODA4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgUGF0Y2ggLSBTS0IgRnJhZyBSZWFkYWJpbGl0eSBDaGVja3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugc29tZW9uZSdzIGludHJvZHVjZWQgYSBzZXJpZXMgb2YgY2hlY2tzIGZvciBgIXNrYl9mcmFnc19yZWFkYWJsZSgpYCB3aXRoaW4gYSBmZXcga2V5IGZ1bmN0aW9uczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBmb2N1c2luZyBvbiB0aGVzZSBpcyBpbnRlcmVzdGluZy4gSSdtIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjb250ZXh0cyBvZiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGBvdnNfZHBfdXBjYWxsYCBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIGFzIEkga25vdyB0aG9zZSBhcmVhcyB3ZWxsIGZyb20gbXkgd29yay5cblxuU3BlY2lmaWNhbGx5LCBnaXZlbiB0aGUgT3BlbiB2U3dpdGNoIGNvbnRleHQgd2l0aCB0aGUgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGZ1bmN0aW9uLCB0aGlzIGZlZWxzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgZGF0YSBjb3JydXB0aW9uIG9yIGFjY2VzcyBpc3N1ZSB3aXRoIGZyYWdtZW50ZWQgc2ticy4gQW5kIHRoZSBtZW50aW9uIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgY29udGV4dCBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBhIHJlbGF0aW9uc2hpcCB0byBOZXRmaWx0ZXIncyB1c2Vyc3BhY2UgcXVldWVpbmcgbWVjaGFuaXNtIG9yIE9wZW4gdlN3aXRjaCdzIG5ldHdvcmsgZGF0YXBhdGguXG5cbkxldCdzIHNlZTogYHNrYl96ZXJvY29weWDigKYgcmlnaHQsIHRoYXQncyBwb3RlbnRpYWxseSBpbnZvbHZlZCBpbiB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gKkFoLCBpbnRlcmVzdGluZyosIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGdpdmVuIHRoZSBjb250ZXh0IGFyb3VuZCBuZXR3b3JraW5nLCB0aGlzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnQgaGFuZGxpbmcuIElzIGBza2JfemVyb2NvcHlgIGNhbGxlZCBmcm9tIGBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZWA/IExldCBtZSBxdWlja2x5IGNoZWNrLi4uIFllcywgaXQgaXMuIEFuZCBJIGFzc3VtZSBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgIGlzIGV4cG9ydGVkIOKAkyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGF0J3MgcmVsZXZhbnQuIElmIHRob3NlIGZyYWdtZW50cyBhcmUgbm90IHJlYWRhYmxlIGluIHRoZSBORlFVRVVFIGNvbnRleHQgYW5kIHBvdGVudGlhbGx5IGNvcGllZCBmcm9tIGtlcm5lbCB0byB1c2Vyc3BhY2UgYW5kIGJhY2sgdG8ga2VybmVsIGFnYWluLCBzb21ldGhpbmcgbXVzdCBiZSBhdCBzdGFrZSBpZiB0aGV5IGFyZW4ndCByZWFkYWJsZSBpbiB0aGUgcHJvY2Vzcy5cblxuT2theSwgSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIHBhdGNoIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGVjayBpcyBiZWluZyBhZGRlZCwgYW5kIHByZWNpc2VseSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhlIGBza2JfZnJhZ3NfcmVhZGFibGVgIGZ1bmN0aW9uIGlzIGZhaWxpbmcuIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc2tiIGZyYWdtZW50cyBhcmUgYmVpbmcgaGFuZGxlZCB0aHJvdWdob3V0IHRoZSB2YXJpb3VzIHBhdGhzLCBpbmNsdWRpbmcgT3BlbiB2U3dpdGNoLCBOZXRmaWx0ZXIgYW5kIFRDUCBzdGFja3MuIFRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uLCBvciBzb21lIGZyYWdtZW50ZWQgYnVmZmVyIGhhbmRsaW5nLCBwZXJoYXBzIHdpdGggRE1BIG9yIHNoYXJlZCBtZW1vcnkgY29uc2lkZXJhdGlvbnMsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MzUuMDA5MjQzODdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM0OTAyMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzozNy4wNjI3NTI2NjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MDIyOTU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRob3VnaHQgcHJvY2Vzcy4gTGV0J3MgZ2V0IHRoaXMgZG9uZS5cbioqKlxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIHNlZW1zIHRvIGJlIHdoZXRoZXIgdGhlIHNpdHVhdGlvbiBpcyBzdGF0aWMgb3IgZHluYW1pYy4gVGhhdCdzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQsIGlzbid0IGl0PyBJdCBkaWN0YXRlcyBldmVyeXRoaW5nIHRoYXQgZm9sbG93cy4gSWYgaXQncyBzdGF0aWMsIHRoZW4gdGhlIGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIGFib3V0IHN0YWJpbGl6YXRpb24sIGNvbnRyb2wsIGFuZCBhIGZvY3VzIG9uIG1pbmltaXppbmcgZGV2aWF0aW9uIGZyb20gdGhlIGVzdGFibGlzaGVkIHN0YXRlLiBFc3NlbnRpYWxseSwgSSdtIGxvb2tpbmcgZm9yIGludmFyaWFudHMsIHRoaW5ncyB0aGF0ICp3b24ndCogY2hhbmdlLCBhbmQgbGV2ZXJhZ2UgdGhlbS4gSG93ZXZlciwgaWYgaXQgaXNuJ3Qgc3RhdGljLCBpdCBtZWFucyBjaGFuZ2UgaXMgaW5oZXJlbnQgaW4gdGhlIHN5c3RlbS4gVGhlIGFwcHJvYWNoIHdpbGwgbmVjZXNzYXJpbHkgcmV2b2x2ZSBhcm91bmQgdW5kZXJzdGFuZGluZyB0aGUgZm9yY2VzIGRyaXZpbmcgdGhhdCBjaGFuZ2UsIHByZWRpY3RpbmcgaXRzIGRpcmVjdGlvbiwgYW5kIGFkYXB0aW5nIGFjY29yZGluZ2x5LiBTdGFiaWxpdHkgYmVjb21lcyBhIG1vdmluZyB0YXJnZXQsIGFuZCByZXNpbGllbmNlIGFuZCBhZ2lsaXR5IGJlY29tZSBwYXJhbW91bnQuIFNvLCB5ZXMsIHRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBjbGFzc2lmeSB3aGV0aGVyIHRoZSBzaXR1YXRpb24gaXMgc3RhYmxlLCBvciBpbiBmbHV4LiBUaGF0IGRpc3RpbmN0aW9uIGRldGVybWluZXMgdGhlIHJpZ2h0IHBhdGggZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NzAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjQwLjAzMjk4NDQ3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODAxMjg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzA1Om5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTcwNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzQ9X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4MS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk4MjpcXHRuc2tiID0gbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2UobmV0LCBxdWV1ZSwgZW50cnksIFxcdTAwMjZwYWNrZXRfaWRfcHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4My1cXHRpZiAobnNrYiA9PSBOVUxMKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjQxLjU2MTAwNDE0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIzMTUyMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGhpdHRpbmcgbWU6IGBfX25mcW5sX2VucXVldWVfcGFja2V0YC4gVGhpcyBmdW5jdGlvbi4uLiBpdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCdzIHdoYXQncyBzbmFnZ2luZyBteSBhdHRlbnRpb24uIEEgc3RhdGljIGZ1bmN0aW9uIGlzLCBieSBkZWZpbml0aW9uLCBmaWxlLXNjb3BlIG9ubHkuIEl0J3Mgbm90IHZpc2libGUgb3V0c2lkZSBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBpdCdzIGRlZmluZWQgaW4uIFRoYXQncyBpbW1lZGlhdGVseSBnb2luZyB0byBpbXBhY3QgaG93IEknbSB0aGlua2luZyBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIElzIGl0IHN1cHBvc2VkIHRvIGJlIHN0YXRpYz8gSXMgdGhpcyBpbnRlbnRpb25hbCwgb3IgZGlkIHNvbWVvbmUgb3Zlcmxvb2sgc29tZXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHNwZWNpZmljIG1vZHVsZSBhbmQgaG93IGl0cyBlbmNhcHN1bGF0aW9uIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aGluIHRoaXMgY29udGV4dC4gTm93IEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uJ3Mgc2NvcGUsIGFuZCBpdHMgc3RhdGljIG5hdHVyZSwgaW1wYWN0cyB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGludGVuZGVkIGZsb3cuIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzo0NC44ODQxNTk5ODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDY1MzI0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZnFubF9lbnF1ZXVlX3BhY2tldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3Mz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzQ6X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzUtXFx0XFx0XFx0c3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA3Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDc3Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNzgtXFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4Ny1cXHRcXHRlbnRyeS1cXHUwMDNlc2tiID0gc2tiO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA4ODpcXHRcXHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODktXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA5OC1cXHRcXHRlbnRyeV9zZWctXFx1MDAzZXNrYiA9IHNrYjtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwOTk6XFx0XFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeV9zZWcpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTEwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMTA3PW5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cXHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAoKHF1ZXVlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcXHUwMDI2XFx1MDAyNiAhc2tiX2lzX2dzb19zY3RwKHNrYikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcXHRcXHRyZXR1cm4gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTc1LVxcdFxcdGlmIChlcnIgPT0gMClcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjExNzY6XFx0XFx0XFx0ZXJyID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28obmV0LCBxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0c2VncywgZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzo0Ni4zOTA2OTcxNjJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2ODY3MDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbjogYG5mcW5sX2VucXVldWVfcGFja2V0YCoqXG5cbk9rYXksIHNvIHRoZSBmYWN0IHRoYXQgYG5mcW5sX2VucXVldWVfcGFja2V0YCBpcyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBmZXcgZmxhZ3MuIFdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbiB3aXRoIGV4dGVybmFsIGxpbmthZ2UuIFRoYXQgaW1wbGllcyBhIGZldyBrZXkgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0LiBJdCdzIGRlc2lnbmVkIHRvIGJlIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHRyYW5zbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBUaGlzIHNjcmVhbXMgXCJBUEkgZnVuY3Rpb25cIiBvciBcInBhcnQgb2YgYSBicm9hZGVyIGxpYnJhcnkvbW9kdWxlXCIg4oCTIHNvbWV0aGluZyBpbnRlbmRlZCBmb3IgcmV1c2UgYW5kIGludGVyYWN0aW9uIHdpdGggb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgbmV0ZmlsdGVyIHF1ZXVlIGltcGxlbWVudGF0aW9uIG9yIGV2ZW4gZXh0ZXJuYWwgY29kZS5cblxuVGhpcyBjb250cmFzdHMgc3Ryb25nbHkgd2l0aCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggd291bGQgYmUgc2NvcGVkIHB1cmVseSB3aXRoaW4gYSBzaW5nbGUgLmMgZmlsZS4gSW4gdGhhdCBzY2VuYXJpbywgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIsIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IG1lYW50IGZvciBkaXJlY3QsIGV4dGVybmFsIGFjY2Vzcy4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIHdlIGhhdmUgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNyb3NzLW1vZHVsZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBpbmNsdWRlIGZpbGVzIHRoYXQgd291bGQgYWxsb3cgYW5vdGhlciBtb2R1bGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG5cbkl0IGFsc28gbWVhbnMgdGhhdCB0aGUgbGlua2VyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHRoaXMgZnVuY3Rpb24sIG5lZWRpbmcgdGhlIHJpZ2h0IGRlY2xhcmF0aW9uIHRvIGdldCB0aGUgZXh0ZXJuYWwgc3ltYm9scyBjb25uZWN0ZWQuIFdlIG5lZWQgdG8gYmUgd2FyeSBvZiBhbnkgcG90ZW50aWFsIG5hbWUgY2xhc2hlcywgdG9vIOKAkyBhbHRob3VnaCBpbiBhIHdlbGwtc3RydWN0dXJlZCBzeXN0ZW0sIHdlJ2QgYmUgdXNpbmcgbmFtZXNwYWNlcyBhbmQgY2FyZWZ1bGx5IG5hbWVkIGZ1bmN0aW9ucyB0byBtaW5pbWl6ZSBzdWNoIHJpc2tzLiBUaGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaGFzIGltcGxpY2F0aW9ucyBmb3Igc3ltYm9sIHJlc29sdXRpb24gYW5kLCB0aGVyZWZvcmUsIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBsaW5raW5nIHN0cmF0ZWd5LiBJdCBzaGFwZXMgb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoZSB3aG9sZSBzeXN0ZW0uIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjUwLjQ1OTM3MDUyN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NDQwODM2MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbmZxbmxfZW5xdWV1ZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjUyLjUwMzc4NzYzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTgwNTk0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgQ29udW5kcnVtKipcblxuQWxyaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIHNlZWluZyB0aGF0IGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgaXNuJ3Qgc2hvd2luZyB1cCBhcyBhbiBleHBvcnRlZCBzeW1ib2wuIFRoYXQgcmFpc2VzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuIFR5cGljYWxseSwgaWYgYSBmdW5jdGlvbiBpcyBiZWluZyAqdXNlZCogaW4gYSBtb2R1bGFyIG9yIGV4dGVybmFsIGNvbnRleHQsIGl0IG5lZWRzIHRvIGJlIGV4cG9ydGVkLCByaWdodD8gT3RoZXJ3aXNlLCB5b3UnbGwgYmUgc3RhcmluZyBkb3duIGxpbmtlciBlcnJvcnMgb3IgdW5kZWZpbmVkIHN5bWJvbCBpc3N1ZXMuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGl0ICppcyogYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgbWVtYmVyLCBvciBtYXliZSBldmVuIGJlaW5nIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQncyB0aGUgcmVhbCBwdXp6bGUgaGVyZS5cblxuU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYG5mcW5sX2VucXVldWVfcGFja2V0YCBmdW5jdGlvbiBpcyBiZWluZyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBJcyBpdCBkZWZpbmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgaGlkZGVuIHZpYSBzdGF0aWMgaW5saW5lPyBJcyBpdCBhY2Nlc3NlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcj8gT3IgaXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgZ29pbmcgb24/IEkgc3VzcGVjdCB0aGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgbWF5YmUgc29tZSBzeW1ib2wgdGFibGUgYW5hbHlzaXMgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIFwiaGlkZGVuXCIgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgaW52b2tlZC4gR290dGEgZGlnIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MsIHRoZSBsaW5rZXIgc2NyaXB0cywgYW5kIHBvdGVudGlhbGx5IGNyb3NzLXJlZmVyZW5jZSB0aGUgc291cmNlIGZpbGVzLiBUaGlzIGNvdWxkIGJlIGEgc25lYWt5IGJpdCBvZiBrZXJuZWwgdHJpY2tlcnksIG9yIGp1c3QgYSBidWlsZCBjb25maWd1cmF0aW9uIGlzc3VlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzo1Ny45NjE4NTA3NTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTg3MTkzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfZW5xdWV1ZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTc0Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVxcdFxcdFxcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNzY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDc4LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXFx0XFx0ZW50cnktXFx1MDAzZXNrYiA9IHNrYjtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwODg6XFx0XFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg5LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwOTgtXFx0XFx0ZW50cnlfc2VnLVxcdTAwM2Vza2IgPSBza2I7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5OlxcdFxcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnlfc2VnKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTEwNj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTA3Om5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvX3NjdHAoc2tiKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2OlxcdFxcdHJldHVybiBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzUtXFx0XFx0aWYgKGVyciA9PSAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE3NjpcXHRcXHRcXHRlcnIgPSBfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhuZXQsIHF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWdzLCBlbnRyeSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE4MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyIG5mcWggPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlxcdC5vdXRmblxcdFxcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODAyLVxcdC5uZl9ob29rX2Ryb3BcXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6NTkuNDYwNTc0NjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3ODkxNjg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBiaXQgb2YgYSB3cmlua2xlLCBidXQgdGhlIGBuZl9xdWV1ZV9oYW5kbGVyIG5mcWhgIHN0cnVjdCBpcyByZWdpc3RlcmVkLCB3aGljaCB0ZWxscyBtZSB0aGUgbmV0ZmlsdGVyIHF1ZXVlIGlzIGFjdGl2ZS4gVGhpcyBtZWFucyB0aGF0IGZvY3VzaW5nIG9uIGBza2JfemVyb2NvcHlgIGlzIHN0aWxsIGEgdmFsaWQgYXBwcm9hY2guXG5cbk5vdywgbGV0J3MgbG9vayBhdCBhIGNvdXBsZSBvZiBvdGhlciBrZXkgZnVuY3Rpb25zIHRvIHNlZSBpZiB0aGV5J3JlIGFsc28gcmVsZXZhbnQuIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIGV4cG9ydGVkLCBnb29kLiBBbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBjaGVja2luZyBgb3ZzX2RwX3VwY2FsbGAgYW5kIGl0J3MgY29uZmlybWVkLCBpdCBpcyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0J3MgYSBjYW5kaWRhdGUgYXMgd2VsbC5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBuZWVkIHRvIGFuYWx5emUgYXJlOlxuXG4qICAgYHNrYl96ZXJvY29weWBcbiogICBgdGNwX3NlbmRtc2dfbG9ja2VkYFxuKiAgIGBvdnNfZHBfdXBjYWxsYFxuXG5CYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gdGhpcyBjb2RlOlxuXG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWBcblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuXG5cbmBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gSG1tbS4uLiB1c3VhbGx5LCBpZiBgTkVURklMVEVSX0FEVkFOQ0VEYCBkZWZhdWx0cyB0byBcInlcIiB0aGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBpdC4gQnV0IGl0J3MgYmV0dGVyIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYE5FVEZJTFRFUl9BRFZBTkNFRGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MDUuMTM5NDkzNDIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2Mjg1Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIxOS1cXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MDYuNjg1Nzg1NjY4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDk5MDEzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBjdXJyZW50IGxpbmUgb2YgdGhpbmtpbmcsIG15IGd1dCB0ZWxscyBtZSB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCBpbiBvbmUgb2YgdGhlIGJhc2UgS2NvbmZpZyBkZWZpbml0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L0tjb25maWdgIOKAkyBpdCdzIGEgY3JpdGljYWwgZmlsZSBmb3IgbmV0d29yay1yZWxhdGVkIHNldHRpbmdzLCBzbyBpdCdzIGEgbG9naWNhbCBmaXJzdCBzdG9wLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAyMjAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgYmFzZSBuZXR3b3JraW5nIGZlYXR1cmVzIGFyZSBwbGFjZWQuIEknbGwgZm9jdXMgb24gd2hhdCdzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG15IGN1cnJlbnQgcHJvYmxlbSBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgYnJhbmNoaW5nIGxvZ2ljIGFuZCB3aGVyZSBteSBzcGVjaWZpYyBzZXR0aW5nIG1pZ2h0IGJlIGludGVyZmVyaW5nIHdpdGggYSBiYXNlIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MTAuOTk1Njg5NDcxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNTpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1xcdTAwM2UgdW5kZXIgXFxcImlwdGFibGVzXFxcIiBmb3IgdGhlIGxvY2F0aW9uIG9mXFxuIDIxNjpcXHRcXHQgIHRoZXNlIHBhY2thZ2VzLlxcbiAyMTc6XFx0XFxuIDIxODpcXHRpZiBORVRGSUxURVJcXG4gMjE5OlxcdFxcbiAyMjA6XFx0Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyMjE6XFx0XFx0Ym9vbCBcXFwiQWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cXFwiXFxuIDIyMjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxcbiAyMjM6XFx0XFx0ZGVmYXVsdCB5XFxuIDIyNDpcXHRcXHRoZWxwXFxuIDIyNTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBjYW4gc2VsZWN0IGJldHdlZW4gYWxsIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcy5cXG4gMjI2OlxcdFxcdCAgSWYgeW91IHNheSBOIHRoZSBtb3JlIHVudXN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlXFxuIDIyNzpcXHRcXHQgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAnTScuXFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMjMwOlxcdFxcbiAyMzE6XFx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4gMjMyOlxcdFxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4gMjMzOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuIDIzNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA4OjEwLjk5NTc2MTU0MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU0NzAyNjM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29yZSBQYXRjaCBmb3IgWmVyby1Db3B5IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGEgcGF0Y2ggaW50cm9kdWNpbmcgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHNpZ25pZmljYW50LCBhbmQgd2FycmFudHMgYSBkZWVwIGRpdmUgYmVjYXVzZSBpdCBhZmZlY3RzIGtleSBuZXR3b3JrIGRhdGEgcGF0aCBvcGVyYXRpb25zLiAgVGhlIGZ1bmN0aW9ucyB0aGF0IGNhdWdodCBteSBhdHRlbnRpb24gYXJlIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCwgYWxsIG9mIHdoaWNoIG5vdyBpbmNsdWRlIHRoaXMgbmV3IGNoZWNrLiAgSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgXCJmdXp6aW5nXCIuICBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IGNhbiBleHBvc2Ugc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgZGF0YSBpbnRlZ3JpdHksIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHplcm8tY29weSBvcGVyYXRpb25zLlxuXG5MZXQncyBicmVhayBpdCBkb3duLiAgYHNrYl96ZXJvY29weWAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyB0aGlzIGNvdWxkIGltcGFjdCBhIHdpZGUgcmFuZ2Ugb2YgbmV0d29yayBmbG93cy4gIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIGVxdWFsbHkgY3J1Y2lhbCwgaXQncyBhIGNyaXRpY2FsIHBhdGgsIG1lYW5pbmcgdGhlcmUncyBhIGhpZ2hlciBjaGFuY2Ugb2YgdGhpcyBpbXBhY3RpbmcgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgaW5jbHVzaW9uIGluIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBzdWdnZXN0cyBvcGVudnN3aXRjaCBpcyBhbHNvIGluIHRoZSBwaWN0dXJlLCBhbmQgSSB0aGluayB0aGF0J3Mgd2h5IHRoaXMgaXMgbW9yZSBzaWduaWZpY2FudC5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgaXNzdWVzIHdoZXJlIGZyYWdtZW50ZWQgc2tfYnVmZnMgKG5ldHdvcmsgYnVmZmVycykgYXJlIGludm9sdmVkLiAgVGhlIGdvYWwgYXBwZWFycyB0byBiZSB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSB3aXRoaW4gdGhlc2UgZnJhZ21lbnRzIGlzIGFjY2Vzc2libGUgYmVmb3JlIHplcm8tY29weSBvcGVyYXRpb25zIG9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgb2NjdXIuIEkgc3VzcGVjdCB0aGlzIGlzIHJlbGF0ZWQgdG8gcHJldmVudGluZyBwb3RlbnRpYWxseSB1bnJlYWRhYmxlIG9yIGluY29uc2lzdGVudCBkYXRhIGZyb20gYmVpbmcgcGFzc2VkIGFyb3VuZC4gIElmIHlvdSB0cnkgdG8gY29weSBmcmFnbWVudHMgaW50byBhIGJ1ZmZlciwgYnV0IHRoZXkncmUgbm90IHJlYWRhYmxlLCB0aGF0J3MgYSBwcm9ibGVtLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIGJ1dCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/ICBgT1BFTlZTV0lUQ0hgIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBmb3IgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiAgQW5kLCBmb3IgdGhlIHJlc3QsIGFmdGVyIGEgcXVpY2sgY2hlY2ssIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQsIGxpa2UgYElORVRgLCB1bmxlc3MgSSdtIG1pc3Npbmcgc29tZXRoaW5nLiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGxvb2tzIHJlbGV2YW50IGJlY2F1c2UgdGhpcyBpcyBhIG5ldyBjaGVjayBhbmQgbWF5IGV4cG9zZSBzb21ldGhpbmcuXG5cbkFscmlnaHQsIHdpdGggdGhpcyB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBmdXp6aW5nIHN0cmF0ZWdpZXMuIEkgd2lsbCBmb2N1cyBvbiB6ZXJvLWNvcHkgc2NlbmFyaW9zIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBzZXQgc29tZSB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MjksIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA4OjI2LjU0Mjc5MDE1OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTM2NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICAgIFwib3ZzX2RwX3VwY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgKGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCkgYW5kIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCAoYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgKSB0byBhZGQgY2hlY2tzIGZvciB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGBza2JfZnJhZ3NfcmVhZGFibGVgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHVucmVhZGFibGUgZnJhZ21lbnRzIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyAoYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgKSBhbmQgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIChgcXVldWVfdXNlcnNwYWNlX3BhY2tldGApIHRvIGFkZCBjaGVja3MgZm9yIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoYHNrYl9mcmFnc19yZWFkYWJsZWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdW5yZWFkYWJsZSBmcmFnbWVudHMgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA4OjI2LjYxNjMzMzgwOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDM2MjIwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowODoyNi42MTY4NzM3NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExNDMwNzcxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgd2l0aCB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGUuZy4sIGRldmljZSBtZW1vcnkgVENQIHBheWxvYWRzKSwgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZW0gb3IgbWl4aW5nIHRoZW0gd2l0aCByZWFkYWJsZSBmcmFnbWVudHMuIFRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIGtlcm5lbCBwYWdlIGZhdWx0cyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyB0byBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaW52YWxpZCBhY2Nlc3NlcyB0byB1bm1hcHBlZCBvciB1bnJlYWRhYmxlIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTg3NjRhOGY5MzljY2Q5ZmJmYWRiZTZjZjE3Yjc3MGIyYzAwNDAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMjA6MDY6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3MCw3ICszODcwLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xuICAqXHRSZXR1cm4gdmFsdWU6XG4gICpcdDA6IGV2ZXJ5dGhpbmcgaXMgT0tcbiAgKlx0LUVOT01FTTogY291bGRuJ3Qgb3JwaGFuIGZyYWdzIG9mIEBmcm9tIGR1ZSB0byBsYWNrIG9mIG1lbW9yeVxuLSAqXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5XG4rICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcbisgKiAgICAgIHBheWxvYWQgd291bGQgYmUgbWl4ZWQgd2l0aCB1bnJlYWRhYmxlIGZyYWdzLlxuICAqL1xuIGludFxuIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbkBAIC0zOTA1LDEwICszOTA2LDE3IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXHUwMDI2XHUwMDI2IGogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbikge1xuK1x0XHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVx1MDAzZWhlYWQpKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4gXHRza2JfbGVuX2FkZCh0bywgbGVuICsgcGxlbik7XG4gXG4gXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcbiBcdFx0c2tiX3R4X2Vycm9yKGZyb20pO1xuK1x0XHRpZiAoaiBcdTAwM2UgMClcbitcdFx0XHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVx1MDAzZWhlYWQpKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xuQEAgLTM5MjgsNiArMzkzNiw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcdH1cbiBcdHNrYl9zaGluZm8odG8pLVx1MDAzZW5yX2ZyYWdzID0gajtcbiBcbitcdGlmIChpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBmcm9tLVx1MDAzZXVucmVhZGFibGUpXG4rXHRcdHRvLVx1MDAzZXVucmVhZGFibGUgPSAxO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uMTg2YTM2YzY5ODc5OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTEyNzgsNiArMTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0aWYgKGNvcHkgXHUwMDNlIG1zZ19kYXRhX2xlZnQobXNnKSlcbiBcdFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFxuK1x0XHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpKSB7XG4rXHRcdFx0dGNwX21hcmtfcHVzaCh0cCwgc2tiKTtcbitcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuK1x0XHR9XG4rXG4gXHRcdGlmICh6YyA9PSAwKSB7XG4gXHRcdFx0Ym9vbCBtZXJnZSA9IHRydWU7XG4gXHRcdFx0aW50IGkgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTQ2Nyw2ICs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghZHBfaWZpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuc2tiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MjYuNjE2ODc0ODk3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQzMDUzMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFVucmVhZGFibGUgU0tCIEZyYWdtZW50cyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgY3J1Y2lhbCBjaGFuZ2VzIGFyb3VuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGBza2JgIGZyYWdtZW50cywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNjZW5hcmlvcyB3aGVyZSB0aGVzZSBmcmFnbWVudHMgYXJlIFwidW5yZWFkYWJsZS5cIiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcGF0Y2ggdG91Y2hlcyBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSBkZXZpY2UgbWVtb3J5IFRDUCBvciBwb3RlbnRpYWxseSBzaW1pbGFyIGZlYXR1cmVzIHdoZXJlIGBza2JgIGZyYWdzIG1pZ2h0IGJlIHBvaW50aW5nIHRvIG1lbW9yeSB0aGF0IHRoZSBDUFUgY2FuJ3QgZGlyZWN0bHkgcmVhZCwgbGlrZSBETUEgYnVmZmVycyBvciBkZXZpY2UgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgdXNpbmcgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGFjY2VzcyB0aG9zZSB1bnJlYWRhYmxlIGZyYWdtZW50cywgd2hpY2ggd291bGQgbGVhZCB0byBhIGNyYXNoIG9yIGEga2VybmVsIGZhdWx0LiBGb3IgZXhhbXBsZSwgaW4gYHNrYl96ZXJvY29weWAsIGl0J3MgYWRkaW5nIGEgY2hlY2s6XG5cbmBgYGNcbitcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbitcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuYGBgXG5cbmFuZCBlbnN1cmluZyB0aGF0IGlmIHRoZXJlIGFyZSB1bnJlYWRhYmxlIGZyYWdzLCBgdG8tXHUwMDNldW5yZWFkYWJsZWAgaXMgc2V0IGFwcHJvcHJpYXRlbHksIHByZXNlcnZpbmcgdGhlIHVucmVhZGFibGUgc3RhdGUuIEluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGl0IGp1bXBzIHRvIGEgbmV3IHNlZ21lbnQuIFRoZSBmaXggaW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGlzIGEgYml0IG1vcmUgc3RyYWlnaHQgZm9yd2FyZCBhbmQganVzdCByZXR1cm5zIC1FRkFVTFQuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXNuJ3QgYWJvdXQgS01TQU4g4oCTIGl0J3Mgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGV2ZW4gYXR0ZW1wdGluZyB0byByZWFkIG1lbW9yeSBpdCdzICpub3QgYWxsb3dlZCogdG8gcmVhZC4gVGhlIHJvb3QgY2F1c2UgaXMgYSBzaXR1YXRpb24gd2hlcmUgeW91IG1pZ2h0IGhhdmUgcmVhZGFibGUgYW5kIHVucmVhZGFibGUgZnJhZ21lbnRzLCBvciBtb3JlIHNwZWNpZmljYWxseSwgaW52YWxpZCBwb2ludGVycy4gSWYgdGhlIGNvZGUgZGlkIHRyeSB0byByZWFkIGZyb20gYW4gdW5yZWFkYWJsZSBmcmFnLCBpdCdkIGNhdXNlIGEgcGFnZSBmYXVsdCwgd2hpY2ggaXMgYSBiaWcgcHJvYmxlbS4gS0FTQU4gd291bGQgcHJvYmFibHkgY2F0Y2ggc29tZSBvZiB0aGVzZSBhcyBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlLCBidXQgYSBzaW1wbGUgdW5yZWFkYWJsZSBtZW1vcnkgYWNjZXNzIGlzIGdvaW5nIHRvIGZhdWx0IHRoZSBwYWdlLCBzbyBLTVNBTiBpc24ndCB0aGUgY29uY2Vybi5cblxuU28sIEkgdGhpbmsgSSd2ZSBnb3QgdGhpcy4gYHNrYl9mcmFnc19yZWFkYWJsZWAgaXMgcmVhbGx5IGp1c3QgYSBzYWZlZ3VhcmQgYWdhaW5zdCBhY2Nlc3NpbmcgdGhvc2UgQ1BVLWluYWNjZXNzaWJsZSBmcmFnbWVudHMuIFNpbmNlIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgYnV0IHdpdGggbWVtb3J5IHRoYXQncyBsaXRlcmFsbHkgKnVucmVhZGFibGUqIGJ5IHRoZSBDUFUsIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGlzIGNvcnJlY3QuIFRoZSBwYXRjaCBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdW5yZWFkYWJsZSBtZW1vcnkgKGUuZy4sIGZyb20gZGV2bWVtIFRDUCksIGF2b2lkaW5nIHBhZ2UgZmF1bHRzLCBhbmQgcHJldmVudGluZyBtaXhpbmcgb2YgcmVhZGFibGUgYW5kIHVucmVhZGFibGUgZnJhZ3MuIFRoZSBrZXJuZWwncyBwYWdlIGZhdWx0IGhhbmRsZXIsIGFsb25nIHdpdGggS0FTQU4sIHdpbGwgc3RpbGwgZnVuY3Rpb24gYXMgZXhwZWN0ZWQgYW5kIGRlYWwgd2l0aCBjYXNlcyB3aGVyZSBtZW1vcnkgaXMgaW1wcm9wZXJseSBhY2Nlc3NlZC4gSSdsbCBzdW1tYXJpemUgdGhlIHJhdGlvbmFsZSB3aXRoIHRoZXNlIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowODozNy43NTk5MzE3MzJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgd2l0aCB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGUuZy4sIGRldmljZSBtZW1vcnkgVENQIHBheWxvYWRzKSwgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZW0gb3IgbWl4aW5nIHRoZW0gd2l0aCByZWFkYWJsZSBmcmFnbWVudHMuIFRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIGtlcm5lbCBwYWdlIGZhdWx0cyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyB0byBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaW52YWxpZCBhY2Nlc3NlcyB0byB1bm1hcHBlZCBvciB1bnJlYWRhYmxlIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaXNzdWVzIHdpdGggdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChlLmcuLCBkZXZpY2UgbWVtb3J5IFRDUCBwYXlsb2FkcyksIHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGVtIG9yIG1peGluZyB0aGVtIHdpdGggcmVhZGFibGUgZnJhZ21lbnRzLiBUaGlzIGlzIHJlbGF0ZWQgdG8gcHJldmVudGluZyBrZXJuZWwgcGFnZSBmYXVsdHMgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgdG8gZGV2aWNlIG1lbW9yeSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIG5vdCB0aGUgZm9jdXMgb2YgdGhpcyBwYXRjaC4gU3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGludmFsaWQgYWNjZXNzZXMgdG8gdW5tYXBwZWQgb3IgdW5yZWFkYWJsZSBtZW1vcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 20:04:35 +0000 UTC FinishedAt: 2026-08-11 20:08:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "ad81e5d2-1b5b-46c2-8506-8e07e022e46d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_zerocopy", "tcp_sendmsg_locked", "ovs_dp_upcall" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5ODc2NGE4ZjkzOWNjZDlmYmZhZGJlNmNmMTdiNzcwYjJjMDA0MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMDowNjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XG4tICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnlcbiYjNDM7ICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcbiYjNDM7ICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXHUwMDI2XHUwMDI2IGogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbikge1xuJiM0MztcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuIFx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4mIzQzO1x0XHRpZiAoaiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgJiM0MzszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0fVxuIFx0c2tiX3NoaW5mbyh0byktXHUwMDNlbnJfZnJhZ3MgPSBqO1xuIFxuJiM0MztcdGlmIChpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBmcm9tLVx1MDAzZXVucmVhZGFibGUpXG4mIzQzO1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li4xODZhMzZjNjk4Nzk4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTI3OCw2ICYjNDM7MTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0aWYgKGNvcHkgXHUwMDNlIG1zZ19kYXRhX2xlZnQobXNnKSlcbiBcdFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFxuJiM0MztcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSkge1xuJiM0MztcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuJiM0MztcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKHpjID09IDApIHtcbiBcdFx0XHRib29sIG1lcmdlID0gdHJ1ZTtcbiBcdFx0XHRpbnQgaSA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5pbmRleCBhZTY5YjJjYWJhYjllLi40ODI4OTNhNWY2N2RjIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5AQCAtNDY3LDYgJiM0Mzs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghZHBfaWZpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiBcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3VwY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5ODc2NGE4ZjkzOWNjZDlmYmZhZGJlNmNmMTdiNzcwYjJjMDA0MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAyMDowNjoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTM4NzAsNyAmIzQzOzM4NzAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7CiAgKglSZXR1cm4gdmFsdWU6CiAgKgkwOiBldmVyeXRoaW5nIGlzIE9LCiAgKgktRU5PTUVNOiBjb3VsZG4mIzM5O3Qgb3JwaGFuIGZyYWdzIG9mIEBmcm9tIGR1ZSB0byBsYWNrIG9mIG1lbW9yeQotICoJLUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeQomIzQzOyAqCS1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWQKJiM0MzsgKiAgICAgIHBheWxvYWQgd291bGQgYmUgbWl4ZWQgd2l0aCB1bnJlYWRhYmxlIGZyYWdzLgogICovCiBpbnQKIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbikKQEAgLTM5MDUsMTAgJiM0MzszOTA2LDE3IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbikKIAkJfQogCX0KIAomIzQzOwlpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSAmYW1wOyZhbXA7IGogJmd0OyAwICZhbXA7JmFtcDsgbGVuKSB7CiYjNDM7CQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwogCXNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7CiAKIAlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHsKIAkJc2tiX3R4X2Vycm9yKGZyb20pOwomIzQzOwkJaWYgKGogJmd0OyAwKQomIzQzOwkJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tJmd0O2hlYWQpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CkBAIC0zOTI4LDYgJiM0MzszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCX0KIAlza2Jfc2hpbmZvKHRvKS0mZ3Q7bnJfZnJhZ3MgPSBqOwogCiYjNDM7CWlmIChpICZndDsgMCAmYW1wOyZhbXA7IGZyb20tJmd0O3VucmVhZGFibGUpCiYjNDM7CQl0by0mZ3Q7dW5yZWFkYWJsZSA9IDE7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA0NTU0NDFmMWI2OTQ5Li4xODZhMzZjNjk4Nzk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTI3OCw2ICYjNDM7MTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJaWYgKGNvcHkgJmd0OyBtc2dfZGF0YV9sZWZ0KG1zZykpCiAJCQljb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpOwogCiYjNDM7CQlpZiAoemMgIT0gTVNHX1pFUk9DT1BZICZhbXA7JmFtcDsgdW5saWtlbHkoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSkgewomIzQzOwkJCXRjcF9tYXJrX3B1c2godHAsIHNrYik7CiYjNDM7CQkJZ290byBuZXdfc2VnbWVudDsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKHpjID09IDApIHsKIAkJCWJvb2wgbWVyZ2UgPSB0cnVlOwogCQkJaW50IGkgPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBhZTY5YjJjYWJhYjllLi40ODI4OTNhNWY2N2RjIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtNDY3LDYgJiM0Mzs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIWRwX2lmaW5kZXgpCiAJCXJldHVybiAtRU5PREVWOwogCiYjNDM7CWlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKIAlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAJCWlmICghbnNrYikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOZXcgTmV0d29yayBDb2RlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrOiBgc2tidWZmLmNgLCBgdGNwLmNgLCBhbmQgdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBjb2RlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1ha2luZyBmdW5jdGlvbmFsIGNoYW5nZXMsIHNwZWNpZmljYWxseSBhZGRpbmcgY2hlY2tzIGZvciBgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGluIGZ1bmN0aW9ucyBsaWtlIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gR2l2ZW4gdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb24gY29yZSBuZXR3b3JraW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyAqZnV6emluZyouIFdlICpuZWVkKiB0byBmdXp6IHRoaXMuIEl0JiMzOTtzIHRvbyBpbXBvcnRhbnQgdG8gbGVhdmUgdW50ZXN0ZWQuCgpNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgc2xpZ2h0IGh1cmRsZSwgYnV0IHdlIGNhbiBwcm9iYWJseSB0cmFjZSBkb3duIGl0cyBjYWxsZXIgdG8gZ2V0IGNvbnRleHQuIE5vdywgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSB1c2FnZXMgb2YgYHNrYl96ZXJvY29weWAgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTktXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1MDogKiB3aGljaCBjYWxscyB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlLlxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTUzLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTgtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEwLVx0XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdDtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMi1cdFx0XHRpZiAoeGVudmlmX2hhbmRsZV9mcmFnX2xpc3QocXVldWUsIHNrYikpIHtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cdFx0XHRcdFx0XHQgICBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSB0byBjb25zb2xpZGF0ZSBmcmFnX2xpc3QhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2Olx0XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTctXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzMy1cdFx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3Mi1cdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykge1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfc2VudCYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTEyODM9c3RhdGljIHZvaWQgeGVudmlmX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjY5PXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzA6dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNzItXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTgxMj1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNDpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM0PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3Mi1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTEyOmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTYxLVxubmV0L2NvcmUvc2tidWZmLmM6MTk2MjpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI0OS1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTA6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTEtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMC0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODMyLSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzQtICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzNTogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzYtICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODM3PXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Mzkte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1NTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU2LVxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTg6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Njc6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3Nzpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODc4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIxLVx0fVxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDMtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzk0NDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjQyPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNDktXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjUxLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3ODg9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxubmV0L2NvcmUvc2tidWZmLmM6NTAxMjpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDEzLVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTg6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAxOS1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2NS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyNjY6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzNDMtXG5uZXQvaXB2NC90Y3AuYzoxMzQ0Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQ1LVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxODMyOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc2OS1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTU0Olx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1NS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTE9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVx0aWYgKGRwLVx1MDAzZXVzZXJfZmVhdHVyZXMgXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMTpcdFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAyLVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4Ny1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDA4LVxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTA5Mi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTA5MzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTEwOTQtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEkga25vdyB0aGF0IGBza2JfemVyb2NvcHlgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSSYjMzk7dmUgc2VlbiBpdCB1c2VkIGluIHBsYWNlcyBsaWtlIHRoZSBOZXRmaWx0ZXIgTkZORVRMSU5LIHF1ZXVlIGltcGxlbWVudGF0aW9uIChgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY2ApIGFuZCB3aXRoaW4gT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoIGNvZGUgKGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2ApLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBjb21wb25lbnRzIGxldmVyYWdlIHplcm8tY29weSBtZWNoYW5pc21zLgoKYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHRoYXQmIzM5O3MgdGhlIGJyZWFkLWFuZC1idXR0ZXIgb2YgVENQIHNlbmQgb3BlcmF0aW9ucy4gQW55IGNoYW5nZSB0aGVyZSBpcyBwb3RlbnRpYWxseSBmYXItcmVhY2hpbmcsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBpbnRlcmFjdGlvbnMgY2FyZWZ1bGx5LgoKVGhlbiB0aGVyZeKAmXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIHdoaWNoLCBhZ2Fpbiwgc2hvd3MgdXAgaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aC4gU28sIGxldOKAmXMgbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoZXNlIHRocmVlOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYXMgSSBkaWcgZGVlcGVyLgoKSGFuZyBvbiBhIHNlY29uZOKApiBJIGp1c3QgcmVjYWxsZWQgdGhhdCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFN0aWxsLCBpZiBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGxlcnMgd2l0aGluIHRoYXQgbW9kdWxlLiBJdCYjMzk7cyBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoLCBidXQgc3RpbGwgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBpdHMgY2FsbGVycyB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1ZXVlX3VzZXJzcGFjZV9wYWNrZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzAtXHRcdFx0ICAgICB1aW50MzJfdCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0zMjk9aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDUtXHRpZiAoIXNrYl9pc19nc28oc2tiKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM0NjpcdFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ3LVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTM2Nj1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzk2LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mzk3Olx0XHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTgtXHRcdGlmIChlcnIpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQxPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTAtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTItXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBJbnF1aXJ5KioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIGEgc3BlY2lmaWMgYXJlYS4gYG92c19kcF91cGNhbGxgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlIGJlY2F1c2UgaXQgZGlyZWN0bHkgY2FsbHMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIGZsb3cgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2guCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoYXQmIzM5O3MgdXNpbmcgYHNrYl96ZXJvY29weWAuICBBIHF1aWNrIHNjYW4gcmV2ZWFscyBpdCYjMzk7cyBjYWxsZWQgYnkgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBieSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXRzZWxmIGluIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggY29kZS4gSW50ZXJlc3RpbmcuCgpUaGVuLCBmb3IgY29udHJhc3QsIEkmIzM5O20gY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwgdG8gVENQLCBhbmQgSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBzdGFuZGFyZCBgdGNwX3NlbmRtc2dgLCBgdGNwX3NlbmRwYWdlX2xvY2tlZGAsIGFuZCBvdGhlciBjb3JlIFRDUCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgZm9yIGNvbXBhcmlzb24uCgpTbywgdG8gc3VtbWFyaXplIG15IGtleSBmb2N1cyBzeW1ib2xzIHJpZ2h0IG5vdywgSSBoYXZlOgoKKiAgIGBza2JfemVyb2NvcHlgCiogICBgdGNwX3NlbmRtc2dfbG9ja2VkYAoqICAgYG92c19kcF91cGNhbGxgCgpCYXNlZCBvbiB0aGlzIHBhdGgsIHRoZSBjb25maWd1cmF0aW9ucyBvZiBpbnRlcmVzdCBhcmUgcHJldHR5IGNsZWFybHk6CgoqICAgYE9QRU5WU1dJVENIYAoqICAgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYAoKSSBzaG91bGQgcmVhbGx5IHF1aWNrbHkgbG9vayBhdCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGluIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgb24gdGhhdCBmcm9udC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBPcGVuIHZTd2l0Y2ggaW4gdGhlIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24gaW4gdGhlIEtjb25maWcgZmlsZXMuIEkga25vdyB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgdHlwaWNhbCBsb2NhdGlvbnMgd2hlcmUgbmV0d29yayBkZXZpY2UgZHJpdmVycyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgcmVzaWRlIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgT3BlbiB2U3dpdGNoIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIGFzIGEgbW9kdWxlLiBJ4oCZbSB0aGlua2luZyBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG5ldHdvcmsgc3RhY2tzIG9yIGZlYXR1cmVzLCBsaWtlIGJyaWRnaW5nIG9yIFZMQU4gc3VwcG9ydCwgYW5kIGhvdyB0aG9zZSBtaWdodCBiZSBjb25maWd1cmVkIGluIHJlbGF0aW9uIHRvIHRoZSBPVlMgZW50cnkuIENoZWNraW5nIHRoZSBLY29uZmlnIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNvbXBvbmVudCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBpbWFnZSwgb3IgaWYgaXQmIzM5O3MgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbnRleHQgYXQgYWxsLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgYmFzZSBzdGF0ZSBvZiBPcGVuIHZTd2l0Y2ggd2l0aGluIHRoZSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGNvcnJlY3RseSBzZXQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIEJlZm9yZSBJIGRpdmUgZGVlcGVyLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGUga2VybmVsIGV4cG9ydHMgdGhlIGBza2JfemVyb2NvcHlgIHN5bWJvbCwgZXNwZWNpYWxseSBpZiB0aGUgY29kZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBtaWdodCByZWx5IG9uIGl0LiBIbW0sIGxvb2tzIGdvb2QuIGBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO2AgaXMgaW5kZWVkIHByZXNlbnQsIHNvIG5vIGltbWVkaWF0ZSBjb25jZXJucyB0aGVyZS4gTmV4dCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoaXMgc3ltYm9sIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDQ4LX1cbm5ldC9pcHY0L3RjcC5jOjE0NDk6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTE0NTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQ5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbml0aWFsIEFmZmlybWF0aW9uIGFuZCBWZXJpZmljYXRpb24qKgoKWWVzLiBPa2F5LCB0aGF0IGZlZWxzIHJpZ2h0IGluIHByaW5jaXBsZS4gQnV0IGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIGBvdnNfZHBfdXBjYWxsYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBjb21wb25lbnQgYW5kIGl0cyBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBzcGVjaWZpYyBkZXRhaWxzLiBKdXN0IGEgcXVpY2sgcmV2aWV3IHdpbGwgZW5zdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBteSBtZW50YWwgbW9kZWwgb2YgdGhhdCBhc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qb3ZzX2RwX3VwY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzI1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIFRoaXMgZGF0YSBpc24mIzM5O3QgKmV4cG9ydGVkKiwgc28gaXQmIzM5O3Mgbm90IGEgc2ltcGxlIHZhcmlhYmxlIEkgY2FuIGVhc2lseSBhY2Nlc3MuIEJ1dCwgaXQmIzM5O3MgYWxzbyBub3Qgc3RhdGljYWxseSBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgZHluYW1pY2FsbHkuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCB0YWtlcyBtZS4gSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiBob3cgdGhpcyBub24tZXhwb3J0ZWQsIG5vbi1zdGF0aWMgZGF0YSBpcyBtYW5hZ2VkLCB0byBkZXRlcm1pbmUgaG93IEkgY2FuIGFjY2VzcyBpdC4gUmlnaHQsIEkgdGhpbmsgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBtYW5pcHVsYXRpb24gaXMgdGhlIGBvdnNfZHBfdXBjYWxsYCBmdW5jdGlvbi4gTm93LCB3aGVyZSBpcyBpdCwgYWggeWVzLi4uIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb3ZzX2RwX3VwY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzI4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzI5OmludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zMzAtXHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzIxPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMyMjppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKiwgc3RydWN0IHNrX2J1ZmYgKixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMyMy1cdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgY29uc3Qgc3RydWN0IGRwX3VwY2FsbF9pbmZvICosXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzcyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoaXMgbm9uLXN0YXRpYyBlbGVtZW50IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXRzIGR5bmFtaWMgbmF0dXJlIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGFzIGEgZ29vZCBmb2N1cyBzeW1ib2wsIHN1Z2dlc3RpbmcgcG90ZW50aWFsIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgY29udHJvbCBvciBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBleGFjdGx5IGhvdy4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQWgsIGhlcmUgd2UgZ28sIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX05FVExJTktgLiBNYWtlcyBzZW5zZSwgdGhlIHF1ZXVlIGxpa2VseSBsZXZlcmFnZXMgdGhlIG5ldGxpbmsgaW5mcmFzdHJ1Y3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjb21tdW5pY2F0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGxpbmsgaW4gdGhlIGNoYWluLCBzbyB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0YW50IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgd2lsbCB3b3JrIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipORVRGSUxURVJfTkVUTElOSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODgtXHRkZXBlbmRzIG9uIE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODk6XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzkwOlx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzkxLVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwMC1cdGRlZmF1bHQgblxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwMTpcdGRlcGVuZHMgb24gKE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIHx8IE5FVEZJTFRFUl9ORVRMSU5LX0xPRykgXHUwMDI2XHUwMDI2IE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDItXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTU2NT1jb25maWcgTkZUX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTY2Olx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU2Ny1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgcXVldWUgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gTkVURklMVEVSX05FVExJTktfUVVFVUUqKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGp1c3QgcXVpY2tseSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIEkgbmVlZCB0byBzb2xpZGlmeSB0aGF0IGNvbmNlcHQgaW4gbXkgbWluZC4gTm90IGEgY3JpdGljYWwgaXNzdWUgYnkgYW55IG1lYW5zLCBidXQgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNjdXNzaW9uIGlmIEkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEkmIzM5O2xsIGp1c3QgY2hlY2sgdGhlIHN0YW5kYXJkIGRvY3VtZW50YXRpb24sIEkgaGF2ZSBpdCBzb21ld2hlcmUuLi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNwb3Qgb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJJiMzOTttIHN1cmUgSSYjMzk7bGwgZmluZCBpdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgbGluZSA1NCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBsaW5lIHByb2JhYmx5IGNvbnRhaW5zIGEgdG9wLWxldmVsIGBjb25maWdgIG9wdGlvbiBvciBhIG1vZHVsZSBkZWZpbml0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIHVzdWFsbHkgYmVnaW4uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIHNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGtleSBuZXRmaWx0ZXIgZmVhdHVyZXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3ZlIG9yZ2FuaXplZCB0aGUgb3B0aW9ucyBjb25jZXB0dWFsbHkg4oCTIGlzIGl0IGJhc2VkIG9uIHByb3RvY29sLCBmdW5jdGlvbmFsaXR5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIEhvcGVmdWxseSwgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDQzOlx0XHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXG4gIDQ0Olx0XHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNDk6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDUyOlx0XHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4gIDU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDU3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA2MDpcdFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbiAgNjM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDY0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNjU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDY4Olx0XHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEZXBlbmRlbmNpZXMgYW5kIE9wZW4gdlN3aXRjaDogQSBRdWljayBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGZlYXR1cmUuIEl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gT2theSwgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gaW1wbGljYXRpb25zLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aXRoIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuCgpOb3csIHdoaWxlIEkmIzM5O20gaW4gdGhlIG5laWdoYm9yaG9vZCwgaXQgd291bGRuJiMzOTt0IGh1cnQgdG8gZ2l2ZSBgT1BFTlZTV0lUQ0hgIGEgcXVpY2sgbG9vay1vdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGhlYWQgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBTb21ldGltZXMgcmVsYXRlZCBjb21wb25lbnRzIGhhdmUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIG9yIGNvbmZpZyBvcHRpb25zLCBhbmQgaXQmIzM5O3MgdXNlZnVsIHRvIGtlZXAgdGhhdCBpbiBtaW5kLCBqdXN0IGluIGNhc2UuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0IHVzZXMgb3IgcmVsYXRlcyB0byBOZXRmaWx0ZXIsIHJpZ2h0PyBTbywgbGV0JiMzOTtzIHNlZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBPcGVuIHZTd2l0Y2gsIGFuZCBpdCYjMzk7cyBjbGVhciBpdCBsZWFucyBvbiB0aGUgSU5FVCBzdGFjay4gUmlnaHQsIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gaXQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIE9wZW4gdlN3aXRjaCwgbmF0dXJhbGx5LCBidXQgYWxzbyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIHF1aWNrbHkgcmVtZW1iZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgdHlwaWNhbGx5IHRha2VuIGNhcmUgb2Ygb25lIHdheSBvciBhbm90aGVyLCBzbyBJJiMzOTtsbCBqdXN0IG1lbnRpb24gdGhlIGZpcnN0IHR3byBmb3Igbm93LiBMZXQmIzM5O3Mga2VlcCBpdCBzaW1wbGUgYW5kIHRvIHRoZSBwb2ludC4gT2gsIGJlZm9yZSBJIGZvcmdldCwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgc2tiX3plcm9jb3B5YCBpcyB1dGlsaXplZCBhbnl3aGVyZSBlbHNlOyBtaWdodCBiZSB1c2VmdWwgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzA9dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNzItXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzgyOD1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzE6ICpcdHNrYl96ZXJvY29weV9oZWFkbGVuIC0gQ2FsY3VsYXRlIGhlYWRyb29tIG5lZWRlZCBmb3Igc2tiX3plcm9jb3B5KClcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICYjMzk7dG8mIzM5OyBza2IgcGFzc2VkXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXHRpbnRvIHNrYl96ZXJvY29weSgpLlxubmV0L2NvcmUvc2tidWZmLmMtMzgzNi0gKi9cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3Nzpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODc4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwNT1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk1NDpcdFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTUtXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4Ny1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDA4LVxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTA5Mi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTA5MzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTEwOTQtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IEtlcm5lbCBQYXRjaCAtIFNLQiBGcmFnIFJlYWRhYmlsaXR5IENoZWNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHNvbWVvbmUmIzM5O3MgaW50cm9kdWNlZCBhIHNlcmllcyBvZiBjaGVja3MgZm9yIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKClgIHdpdGhpbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiB0aGVzZSBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgY29udGV4dHMgb2YgYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgb3ZzX2RwX3VwY2FsbGAgaW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLCBhcyBJIGtub3cgdGhvc2UgYXJlYXMgd2VsbCBmcm9tIG15IHdvcmsuCgpTcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBPcGVuIHZTd2l0Y2ggY29udGV4dCB3aXRoIHRoZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgZnVuY3Rpb24sIHRoaXMgZmVlbHMgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgZGF0YSBjb3JydXB0aW9uIG9yIGFjY2VzcyBpc3N1ZSB3aXRoIGZyYWdtZW50ZWQgc2ticy4gQW5kIHRoZSBtZW50aW9uIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgY29udGV4dCBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBhIHJlbGF0aW9uc2hpcCB0byBOZXRmaWx0ZXImIzM5O3MgdXNlcnNwYWNlIHF1ZXVlaW5nIG1lY2hhbmlzbSBvciBPcGVuIHZTd2l0Y2gmIzM5O3MgbmV0d29yayBkYXRhcGF0aC4KCkxldCYjMzk7cyBzZWU6IGBza2JfemVyb2NvcHlg4oCmIHJpZ2h0LCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGludm9sdmVkIGluIHplcm8tY29weSBvcGVyYXRpb25zLiAqQWgsIGludGVyZXN0aW5nKiwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgZ2l2ZW4gdGhlIGNvbnRleHQgYXJvdW5kIG5ldHdvcmtpbmcsIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBmcmFnbWVudCBoYW5kbGluZy4gSXMgYHNrYl96ZXJvY29weWAgY2FsbGVkIGZyb20gYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYD8gTGV0IG1lIHF1aWNrbHkgY2hlY2suLi4gWWVzLCBpdCBpcy4gQW5kIEkgYXNzdW1lIGBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZWAgaXMgZXhwb3J0ZWQg4oCTIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGF0JiMzOTtzIHJlbGV2YW50LiBJZiB0aG9zZSBmcmFnbWVudHMgYXJlIG5vdCByZWFkYWJsZSBpbiB0aGUgTkZRVUVVRSBjb250ZXh0IGFuZCBwb3RlbnRpYWxseSBjb3BpZWQgZnJvbSBrZXJuZWwgdG8gdXNlcnNwYWNlIGFuZCBiYWNrIHRvIGtlcm5lbCBhZ2Fpbiwgc29tZXRoaW5nIG11c3QgYmUgYXQgc3Rha2UgaWYgdGhleSBhcmVuJiMzOTt0IHJlYWRhYmxlIGluIHRoZSBwcm9jZXNzLgoKT2theSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBwYXRjaCBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hlY2sgaXMgYmVpbmcgYWRkZWQsIGFuZCBwcmVjaXNlbHkgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBgc2tiX2ZyYWdzX3JlYWRhYmxlYCBmdW5jdGlvbiBpcyBmYWlsaW5nLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNrYiBmcmFnbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgdGhyb3VnaG91dCB0aGUgdmFyaW91cyBwYXRocywgaW5jbHVkaW5nIE9wZW4gdlN3aXRjaCwgTmV0ZmlsdGVyIGFuZCBUQ1Agc3RhY2tzLiBUaGVyZSBtaWdodCBiZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgb3Igc29tZSBmcmFnbWVudGVkIGJ1ZmZlciBoYW5kbGluZywgcGVyaGFwcyB3aXRoIERNQSBvciBzaGFyZWQgbWVtb3J5IGNvbnNpZGVyYXRpb25zLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg3MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgdGhvdWdodCBwcm9jZXNzLiBMZXQmIzM5O3MgZ2V0IHRoaXMgZG9uZS4KKioqCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGNvcmUgcXVlc3Rpb24gc2VlbXMgdG8gYmUgd2hldGhlciB0aGUgc2l0dWF0aW9uIGlzIHN0YXRpYyBvciBkeW5hbWljLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQsIGlzbiYjMzk7dCBpdD8gSXQgZGljdGF0ZXMgZXZlcnl0aGluZyB0aGF0IGZvbGxvd3MuIElmIGl0JiMzOTtzIHN0YXRpYywgdGhlbiB0aGUgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgYWJvdXQgc3RhYmlsaXphdGlvbiwgY29udHJvbCwgYW5kIGEgZm9jdXMgb24gbWluaW1pemluZyBkZXZpYXRpb24gZnJvbSB0aGUgZXN0YWJsaXNoZWQgc3RhdGUuIEVzc2VudGlhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGludmFyaWFudHMsIHRoaW5ncyB0aGF0ICp3b24mIzM5O3QqIGNoYW5nZSwgYW5kIGxldmVyYWdlIHRoZW0uIEhvd2V2ZXIsIGlmIGl0IGlzbiYjMzk7dCBzdGF0aWMsIGl0IG1lYW5zIGNoYW5nZSBpcyBpbmhlcmVudCBpbiB0aGUgc3lzdGVtLiBUaGUgYXBwcm9hY2ggd2lsbCBuZWNlc3NhcmlseSByZXZvbHZlIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBmb3JjZXMgZHJpdmluZyB0aGF0IGNoYW5nZSwgcHJlZGljdGluZyBpdHMgZGlyZWN0aW9uLCBhbmQgYWRhcHRpbmcgYWNjb3JkaW5nbHkuIFN0YWJpbGl0eSBiZWNvbWVzIGEgbW92aW5nIHRhcmdldCwgYW5kIHJlc2lsaWVuY2UgYW5kIGFnaWxpdHkgYmVjb21lIHBhcmFtb3VudC4gU28sIHllcywgdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGNsYXNzaWZ5IHdoZXRoZXIgdGhlIHNpdHVhdGlvbiBpcyBzdGFibGUsIG9yIGluIGZsdXguIFRoYXQgZGlzdGluY3Rpb24gZGV0ZXJtaW5lcyB0aGUgcmlnaHQgcGF0aCBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3MDU6bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03MDYtXHRcdFx0ICAgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3ND1fX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4MS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTgyOlx0bnNrYiA9IG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKG5ldCwgcXVldWUsIGVudHJ5LCBcdTAwMjZwYWNrZXRfaWRfcHRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTgzLVx0aWYgKG5za2IgPT0gTlVMTCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqU3RhdGljIEZ1bmN0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgaGl0dGluZyBtZTogYF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRgLiBUaGlzIGZ1bmN0aW9uLi4uIGl0JiMzOTtzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIHNuYWdnaW5nIG15IGF0dGVudGlvbi4gQSBzdGF0aWMgZnVuY3Rpb24gaXMsIGJ5IGRlZmluaXRpb24sIGZpbGUtc2NvcGUgb25seS4gSXQmIzM5O3Mgbm90IHZpc2libGUgb3V0c2lkZSBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGdvaW5nIHRvIGltcGFjdCBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIElzIGl0IHN1cHBvc2VkIHRvIGJlIHN0YXRpYz8gSXMgdGhpcyBpbnRlbnRpb25hbCwgb3IgZGlkIHNvbWVvbmUgb3Zlcmxvb2sgc29tZXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHNwZWNpZmljIG1vZHVsZSBhbmQgaG93IGl0cyBlbmNhcHN1bGF0aW9uIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aGluIHRoaXMgY29udGV4dC4gTm93IEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLCBhbmQgaXRzIHN0YXRpYyBuYXR1cmUsIGltcGFjdHMgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBpbnRlbmRlZCBmbG93LiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mcW5sX2VucXVldWVfcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9OTczPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTc0Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzUtXHRcdFx0c3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNzY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDc3Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA3OC1cdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4Ny1cdFx0ZW50cnktXHUwMDNlc2tiID0gc2tiO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDg4Olx0XHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4OS1cdFx0aWYgKHJldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwOTgtXHRcdGVudHJ5X3NlZy1cdTAwM2Vza2IgPSBza2I7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwOTk6XHRcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnlfc2VnKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTEwMC1cdFx0aWYgKHJldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTExMDc9bmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc29fc2N0cChza2IpKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcdFx0cmV0dXJuIF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3NS1cdFx0aWYgKGVyciA9PSAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTc2Olx0XHRcdGVyciA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKG5ldCwgcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXHRcdFx0XHRcdFx0XHRzZWdzLCBlbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbjogYG5mcW5sX2VucXVldWVfcGFja2V0YCoqCgpPa2F5LCBzbyB0aGUgZmFjdCB0aGF0IGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgZmV3IGZsYWdzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4gVGhhdCBpbXBsaWVzIGEgZmV3IGtleSB0aGluZ3MgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHRyYW5zbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gVGhpcyBzY3JlYW1zICYjMzQ7QVBJIGZ1bmN0aW9uJiMzNDsgb3IgJiMzNDtwYXJ0IG9mIGEgYnJvYWRlciBsaWJyYXJ5L21vZHVsZSYjMzQ7IOKAkyBzb21ldGhpbmcgaW50ZW5kZWQgZm9yIHJldXNlIGFuZCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIG5ldGZpbHRlciBxdWV1ZSBpbXBsZW1lbnRhdGlvbiBvciBldmVuIGV4dGVybmFsIGNvZGUuCgpUaGlzIGNvbnRyYXN0cyBzdHJvbmdseSB3aXRoIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCB3b3VsZCBiZSBzY29wZWQgcHVyZWx5IHdpdGhpbiBhIHNpbmdsZSAuYyBmaWxlLiBJbiB0aGF0IHNjZW5hcmlvLCBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIsIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IG1lYW50IGZvciBkaXJlY3QsIGV4dGVybmFsIGFjY2Vzcy4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIHdlIGhhdmUgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNyb3NzLW1vZHVsZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBpbmNsdWRlIGZpbGVzIHRoYXQgd291bGQgYWxsb3cgYW5vdGhlciBtb2R1bGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCgpJdCBhbHNvIG1lYW5zIHRoYXQgdGhlIGxpbmtlciBuZWVkcyB0byBiZSBhd2FyZSBvZiB0aGlzIGZ1bmN0aW9uLCBuZWVkaW5nIHRoZSByaWdodCBkZWNsYXJhdGlvbiB0byBnZXQgdGhlIGV4dGVybmFsIHN5bWJvbHMgY29ubmVjdGVkLiBXZSBuZWVkIHRvIGJlIHdhcnkgb2YgYW55IHBvdGVudGlhbCBuYW1lIGNsYXNoZXMsIHRvbyDigJMgYWx0aG91Z2ggaW4gYSB3ZWxsLXN0cnVjdHVyZWQgc3lzdGVtLCB3ZSYjMzk7ZCBiZSB1c2luZyBuYW1lc3BhY2VzIGFuZCBjYXJlZnVsbHkgbmFtZWQgZnVuY3Rpb25zIHRvIG1pbmltaXplIHN1Y2ggcmlza3MuIFRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBoYXMgaW1wbGljYXRpb25zIGZvciBzeW1ib2wgcmVzb2x1dGlvbiBhbmQsIHRoZXJlZm9yZSwgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGxpbmtpbmcgc3RyYXRlZ3kuIEl0IHNoYXBlcyBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIHdob2xlIHN5c3RlbS4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5mcW5sX2VucXVldWVfcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYG5mcW5sX2VucXVldWVfcGFja2V0YCBDb251bmRydW0qKgoKQWxyaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZyBpbW1lZGlhdGVseS4gVHlwaWNhbGx5LCBpZiBhIGZ1bmN0aW9uIGlzIGJlaW5nICp1c2VkKiBpbiBhIG1vZHVsYXIgb3IgZXh0ZXJuYWwgY29udGV4dCwgaXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQsIHJpZ2h0PyBPdGhlcndpc2UsIHlvdSYjMzk7bGwgYmUgc3RhcmluZyBkb3duIGxpbmtlciBlcnJvcnMgb3IgdW5kZWZpbmVkIHN5bWJvbCBpc3N1ZXMuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGl0ICppcyogYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgbWVtYmVyLCBvciBtYXliZSBldmVuIGJlaW5nIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcHV6emxlIGhlcmUuCgpTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGZ1bmN0aW9uIGlzIGJlaW5nIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIElzIGl0IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlIGFuZCBoaWRkZW4gdmlhIHN0YXRpYyBpbmxpbmU/IElzIGl0IGFjY2Vzc2VkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyPyBPciBpcyB0aGVyZSBzb21ldGhpbmcgZWxzZSBnb2luZyBvbj8gSSBzdXNwZWN0IHRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBtYXliZSBzb21lIHN5bWJvbCB0YWJsZSBhbmFseXNpcyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgJiMzNDtoaWRkZW4mIzM0OyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBHb3R0YSBkaWcgaW50byB0aGUgYnVpbGQgcHJvY2VzcywgdGhlIGxpbmtlciBzY3JpcHRzLCBhbmQgcG90ZW50aWFsbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSBzb3VyY2UgZmlsZXMuIFRoaXMgY291bGQgYmUgYSBzbmVha3kgYml0IG9mIGtlcm5lbCB0cmlja2VyeSwgb3IganVzdCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9lbnF1ZXVlX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk3NDpfX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVx0XHRcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMDc2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNzgtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXHRcdGVudHJ5LVx1MDAzZXNrYiA9IHNrYjtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA4ODpcdFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODktXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDk4LVx0XHRlbnRyeV9zZWctXHUwMDNlc2tiID0gc2tiO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5Olx0XHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5X3NlZyk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMTA2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTEwNzpuZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc29fc2N0cChza2IpKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcdFx0cmV0dXJuIF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3NS1cdFx0aWYgKGVyciA9PSAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTc2Olx0XHRcdGVyciA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKG5ldCwgcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXHRcdFx0XHRcdFx0XHRzZWdzLCBlbnRyeSk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciBuZnFoID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlx0Lm91dGZuXHRcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MDItXHQubmZfaG9va19kcm9wXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZSwgYnV0IHRoZSBgbmZfcXVldWVfaGFuZGxlciBuZnFoYCBzdHJ1Y3QgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggdGVsbHMgbWUgdGhlIG5ldGZpbHRlciBxdWV1ZSBpcyBhY3RpdmUuIFRoaXMgbWVhbnMgdGhhdCBmb2N1c2luZyBvbiBgc2tiX3plcm9jb3B5YCBpcyBzdGlsbCBhIHZhbGlkIGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBhIGNvdXBsZSBvZiBvdGhlciBrZXkgZnVuY3Rpb25zIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBhbHNvIHJlbGV2YW50LiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBleHBvcnRlZCwgZ29vZC4gQW5kLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGNoZWNraW5nIGBvdnNfZHBfdXBjYWxsYCBhbmQgaXQmIzM5O3MgY29uZmlybWVkLCBpdCBpcyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGEgY2FuZGlkYXRlIGFzIHdlbGwuCgpUaGVyZWZvcmUsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYW5hbHl6ZSBhcmU6CgoqICAgYHNrYl96ZXJvY29weWAKKiAgIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgCiogICBgb3ZzX2RwX3VwY2FsbGAKCkJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gdGhpcyBjb2RlOgoKKiAgIGBPUEVOVlNXSVRDSGAKKiAgIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAKCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4KCmBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gSG1tbS4uLiB1c3VhbGx5LCBpZiBgTkVURklMVEVSX0FEVkFOQ0VEYCBkZWZhdWx0cyB0byAmIzM0O3kmIzM0OyB0aGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBpdC4gQnV0IGl0JiMzOTtzIGJldHRlciB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBgTkVURklMVEVSX0FEVkFOQ0VEYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBjdXJyZW50IGxpbmUgb2YgdGhpbmtpbmcsIG15IGd1dCB0ZWxscyBtZSB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCBpbiBvbmUgb2YgdGhlIGJhc2UgS2NvbmZpZyBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9LY29uZmlnYCDigJMgaXQmIzM5O3MgYSBjcml0aWNhbCBmaWxlIGZvciBuZXR3b3JrLXJlbGF0ZWQgc2V0dGluZ3MsIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBmaXJzdCBzdG9wLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMjIwLCBhcyB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBiYXNlIG5ldHdvcmtpbmcgZmVhdHVyZXMgYXJlIHBsYWNlZC4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBjdXJyZW50IHByb2JsZW0gYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBicmFuY2hpbmcgbG9naWMgYW5kIHdoZXJlIG15IHNwZWNpZmljIHNldHRpbmcgbWlnaHQgYmUgaW50ZXJmZXJpbmcgd2l0aCBhIGJhc2UgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE1Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlIHVuZGVyIFwmIzM0O2lwdGFibGVzXCYjMzQ7IGZvciB0aGUgbG9jYXRpb24gb2ZcbiAyMTY6XHRcdCAgdGhlc2UgcGFja2FnZXMuXG4gMjE3Olx0XG4gMjE4Olx0aWYgTkVURklMVEVSXG4gMjE5Olx0XG4gMjIwOlx0Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIyMTpcdFx0Ym9vbCBcJiMzNDtBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblwmIzM0O1xuIDIyMjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcbiAyMjM6XHRcdGRlZmF1bHQgeVxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgY2FuIHNlbGVjdCBiZXR3ZWVuIGFsbCB0aGUgbmV0ZmlsdGVyIG1vZHVsZXMuXG4gMjI2Olx0XHQgIElmIHlvdSBzYXkgTiB0aGUgbW9yZSB1bnVzdWFsIG9uZXMgd2lsbCBub3QgYmUgc2hvd24gYW5kIHRoZVxuIDIyNzpcdFx0ICBiYXNpYyBvbmVzIG5lZWRlZCBieSBtb3N0IHBlb3BsZSB3aWxsIGRlZmF1bHQgdG8gJiMzOTtNJiMzOTsuXG4gMjI4Olx0XG4gMjI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMjMwOlx0XG4gMjMxOlx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbiAyMzI6XHRcdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4gMjMzOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuIDIzNDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjkKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMTM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29yZSBQYXRjaCBmb3IgWmVyby1Db3B5IE9wZXJhdGlvbnMqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZm9jdXMgaGVyZSBpcyBhIHBhdGNoIGludHJvZHVjaW5nIGBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIHdhcnJhbnRzIGEgZGVlcCBkaXZlIGJlY2F1c2UgaXQgYWZmZWN0cyBrZXkgbmV0d29yayBkYXRhIHBhdGggb3BlcmF0aW9ucy4gIFRoZSBmdW5jdGlvbnMgdGhhdCBjYXVnaHQgbXkgYXR0ZW50aW9uIGFyZSBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIGFsbCBvZiB3aGljaCBub3cgaW5jbHVkZSB0aGlzIG5ldyBjaGVjay4gIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O2Z1enppbmcmIzM0Oy4gIFRoaXMgaXMgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgY2FuIGV4cG9zZSBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIGludGVncml0eSwgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggemVyby1jb3B5IG9wZXJhdGlvbnMuCgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gIGBza2JfemVyb2NvcHlgIGlzIGEgY29yZSBmdW5jdGlvbiwgc28gdGhpcyBjb3VsZCBpbXBhY3QgYSB3aWRlIHJhbmdlIG9mIG5ldHdvcmsgZmxvd3MuICBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBlcXVhbGx5IGNydWNpYWwsIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCwgbWVhbmluZyB0aGVyZSYjMzk7cyBhIGhpZ2hlciBjaGFuY2Ugb2YgdGhpcyBpbXBhY3RpbmcgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgaW5jbHVzaW9uIGluIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBzdWdnZXN0cyBvcGVudnN3aXRjaCBpcyBhbHNvIGluIHRoZSBwaWN0dXJlLCBhbmQgSSB0aGluayB0aGF0JiMzOTtzIHdoeSB0aGlzIGlzIG1vcmUgc2lnbmlmaWNhbnQuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBpc3N1ZXMgd2hlcmUgZnJhZ21lbnRlZCBza19idWZmcyAobmV0d29yayBidWZmZXJzKSBhcmUgaW52b2x2ZWQuICBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHdpdGhpbiB0aGVzZSBmcmFnbWVudHMgaXMgYWNjZXNzaWJsZSBiZWZvcmUgemVyby1jb3B5IG9wZXJhdGlvbnMgb3IgdXNlcnNwYWNlIGludGVyYWN0aW9ucyBvY2N1ci4gSSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IHVucmVhZGFibGUgb3IgaW5jb25zaXN0ZW50IGRhdGEgZnJvbSBiZWluZyBwYXNzZWQgYXJvdW5kLiAgSWYgeW91IHRyeSB0byBjb3B5IGZyYWdtZW50cyBpbnRvIGEgYnVmZmVyLCBidXQgdGhleSYjMzk7cmUgbm90IHJlYWRhYmxlLCB0aGF0JiMzOTtzIGEgcHJvYmxlbS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIGJ1dCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/ICBgT1BFTlZTV0lUQ0hgIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBmb3IgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiAgQW5kLCBmb3IgdGhlIHJlc3QsIGFmdGVyIGEgcXVpY2sgY2hlY2ssIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQsIGxpa2UgYElORVRgLCB1bmxlc3MgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZy4gYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBsb29rcyByZWxldmFudCBiZWNhdXNlIHRoaXMgaXMgYSBuZXcgY2hlY2sgYW5kIG1heSBleHBvc2Ugc29tZXRoaW5nLgoKQWxyaWdodCwgd2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIG5lZWQgdG8gZGV2ZWxvcCBmdXp6aW5nIHN0cmF0ZWdpZXMuIEkgd2lsbCBmb2N1cyBvbiB6ZXJvLWNvcHkgc2NlbmFyaW9zIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHNvbWUgdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3VwY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O292c19kcF91cGNhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyAoYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgKSBhbmQgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIChgcXVldWVfdXNlcnNwYWNlX3BhY2tldGApIHRvIGFkZCBjaGVja3MgZm9yIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoYHNrYl9mcmFnc19yZWFkYWJsZWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdW5yZWFkYWJsZSBmcmFnbWVudHMgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIwOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOTg3NjRhOGY5MzljY2Q5ZmJmYWRiZTZjZjE3Yjc3MGIyYzAwNDAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMjA6MDY6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLmQyMWFmNjgxNTY5NTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0zODcwLDcgJiM0MzszODcwLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pOwogICoJUmV0dXJuIHZhbHVlOgogICoJMDogZXZlcnl0aGluZyBpcyBPSwogICoJLUVOT01FTTogY291bGRuJiMzOTt0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnkKLSAqCS1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnkKJiM0MzsgKgktRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5LCBvciByZWFkYWJsZSBoZWFkCiYjNDM7ICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy4KICAqLwogaW50CiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCkBAIC0zOTA1LDEwICYjNDM7MzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAJCX0KIAl9CiAKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgJmFtcDsmYW1wOyBqICZndDsgMCAmYW1wOyZhbXA7IGxlbikgewomIzQzOwkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsKIAlza2JfbGVuX2FkZCh0bywgbGVuICYjNDM7IHBsZW4pOwogCiAJaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7CiAJCXNrYl90eF9lcnJvcihmcm9tKTsKJiM0MzsJCWlmIChqICZndDsgMCkKJiM0MzsJCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpOwpAQCAtMzkyOCw2ICYjNDM7MzkzNiw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbikKIAl9CiAJc2tiX3NoaW5mbyh0byktJmd0O25yX2ZyYWdzID0gajsKIAomIzQzOwlpZiAoaSAmZ3Q7IDAgJmFtcDsmYW1wOyBmcm9tLSZndDt1bnJlYWRhYmxlKQomIzQzOwkJdG8tJmd0O3VucmVhZGFibGUgPSAxOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNDU1NDQxZjFiNjk0OS4uMTg2YTM2YzY5ODc5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTEyNzgsNiAmIzQzOzEyNzgsMTEgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCWlmIChjb3B5ICZndDsgbXNnX2RhdGFfbGVmdChtc2cpKQogCQkJY29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTsKIAomIzQzOwkJaWYgKHpjICE9IE1TR19aRVJPQ09QWSAmYW1wOyZhbXA7IHVubGlrZWx5KCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpIHsKJiM0MzsJCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOwomIzQzOwkJCWdvdG8gbmV3X3NlZ21lbnQ7CiYjNDM7CQl9CiYjNDM7CiAJCWlmICh6YyA9PSAwKSB7CiAJCQlib29sIG1lcmdlID0gdHJ1ZTsKIAkJCWludCBpID0gc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTQ2Nyw2ICYjNDM7NDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFkcF9pZmluZGV4KQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiAJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoIW5za2IpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDY0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBVbnJlYWRhYmxlIFNLQiBGcmFnbWVudHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIGNydWNpYWwgY2hhbmdlcyBhcm91bmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBgc2tiYCBmcmFnbWVudHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzY2VuYXJpb3Mgd2hlcmUgdGhlc2UgZnJhZ21lbnRzIGFyZSAmIzM0O3VucmVhZGFibGUuJiMzNDsgRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIHBhdGNoIHRvdWNoZXMgYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpbmdzIGxpa2UgZGV2aWNlIG1lbW9yeSBUQ1Agb3IgcG90ZW50aWFsbHkgc2ltaWxhciBmZWF0dXJlcyB3aGVyZSBgc2tiYCBmcmFncyBtaWdodCBiZSBwb2ludGluZyB0byBtZW1vcnkgdGhhdCB0aGUgQ1BVIGNhbiYjMzk7dCBkaXJlY3RseSByZWFkLCBsaWtlIERNQSBidWZmZXJzIG9yIGRldmljZSBtZW1vcnkuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgdXNpbmcgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IHRyeSB0byBhY2Nlc3MgdGhvc2UgdW5yZWFkYWJsZSBmcmFnbWVudHMsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYSBjcmFzaCBvciBhIGtlcm5lbCBmYXVsdC4gRm9yIGV4YW1wbGUsIGluIGBza2JfemVyb2NvcHlgLCBpdCYjMzk7cyBhZGRpbmcgYSBjaGVjazoKCmBgYGMKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgJmFtcDsmYW1wOyBqICZndDsgMCAmYW1wOyZhbXA7IGxlbikgewomIzQzOwkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KYGBgCgphbmQgZW5zdXJpbmcgdGhhdCBpZiB0aGVyZSBhcmUgdW5yZWFkYWJsZSBmcmFncywgYHRvLSZndDt1bnJlYWRhYmxlYCBpcyBzZXQgYXBwcm9wcmlhdGVseSwgcHJlc2VydmluZyB0aGUgdW5yZWFkYWJsZSBzdGF0ZS4gSW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXQganVtcHMgdG8gYSBuZXcgc2VnbWVudC4gVGhlIGZpeCBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgYSBiaXQgbW9yZSBzdHJhaWdodCBmb3J3YXJkIGFuZCBqdXN0IHJldHVybnMgLUVGQVVMVC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXNuJiMzOTt0IGFib3V0IEtNU0FOIOKAkyBpdCYjMzk7cyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGV2ZW4gYXR0ZW1wdGluZyB0byByZWFkIG1lbW9yeSBpdCYjMzk7cyAqbm90IGFsbG93ZWQqIHRvIHJlYWQuIFRoZSByb290IGNhdXNlIGlzIGEgc2l0dWF0aW9uIHdoZXJlIHlvdSBtaWdodCBoYXZlIHJlYWRhYmxlIGFuZCB1bnJlYWRhYmxlIGZyYWdtZW50cywgb3IgbW9yZSBzcGVjaWZpY2FsbHksIGludmFsaWQgcG9pbnRlcnMuIElmIHRoZSBjb2RlIGRpZCB0cnkgdG8gcmVhZCBmcm9tIGFuIHVucmVhZGFibGUgZnJhZywgaXQmIzM5O2QgY2F1c2UgYSBwYWdlIGZhdWx0LCB3aGljaCBpcyBhIGJpZyBwcm9ibGVtLiBLQVNBTiB3b3VsZCBwcm9iYWJseSBjYXRjaCBzb21lIG9mIHRoZXNlIGFzIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUsIGJ1dCBhIHNpbXBsZSB1bnJlYWRhYmxlIG1lbW9yeSBhY2Nlc3MgaXMgZ29pbmcgdG8gZmF1bHQgdGhlIHBhZ2UsIHNvIEtNU0FOIGlzbiYjMzk7dCB0aGUgY29uY2Vybi4KClNvLCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGlzLiBgc2tiX2ZyYWdzX3JlYWRhYmxlYCBpcyByZWFsbHkganVzdCBhIHNhZmVndWFyZCBhZ2FpbnN0IGFjY2Vzc2luZyB0aG9zZSBDUFUtaW5hY2Nlc3NpYmxlIGZyYWdtZW50cy4gU2luY2Ugd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgYnV0IHdpdGggbWVtb3J5IHRoYXQmIzM5O3MgbGl0ZXJhbGx5ICp1bnJlYWRhYmxlKiBieSB0aGUgQ1BVLCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyBjb3JyZWN0LiBUaGUgcGF0Y2ggaXMgYWJvdXQgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHVucmVhZGFibGUgbWVtb3J5IChlLmcuLCBmcm9tIGRldm1lbSBUQ1ApLCBhdm9pZGluZyBwYWdlIGZhdWx0cywgYW5kIHByZXZlbnRpbmcgbWl4aW5nIG9mIHJlYWRhYmxlIGFuZCB1bnJlYWRhYmxlIGZyYWdzLiBUaGUga2VybmVsJiMzOTtzIHBhZ2UgZmF1bHQgaGFuZGxlciwgYWxvbmcgd2l0aCBLQVNBTiwgd2lsbCBzdGlsbCBmdW5jdGlvbiBhcyBleHBlY3RlZCBhbmQgZGVhbCB3aXRoIGNhc2VzIHdoZXJlIG1lbW9yeSBpcyBpbXByb3Blcmx5IGFjY2Vzc2VkLiBJJiMzOTtsbCBzdW1tYXJpemUgdGhlIHJhdGlvbmFsZSB3aXRoIHRoZXNlIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyB3aXRoIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoZS5nLiwgZGV2aWNlIG1lbW9yeSBUQ1AgcGF5bG9hZHMpLCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlbSBvciBtaXhpbmcgdGhlbSB3aXRoIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyByZWxhdGVkIHRvIHByZXZlbnRpbmcga2VybmVsIHBhZ2UgZmF1bHRzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHRvIGRldmljZSBtZW1vcnksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBub3QgdGhlIGZvY3VzIG9mIHRoaXMgcGF0Y2guIFN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHVubWFwcGVkIG9yIHVucmVhZGFibGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjoxNS40MDc3NzY4NzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIzNTIxODkzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcIm92c19kcF91cGNhbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgd2l0aCB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGUuZy4sIGRldmljZSBtZW1vcnkgVENQIHBheWxvYWRzKSwgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZW0gb3IgbWl4aW5nIHRoZW0gd2l0aCByZWFkYWJsZSBmcmFnbWVudHMuIFRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIGtlcm5lbCBwYWdlIGZhdWx0cyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyB0byBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaW52YWxpZCBhY2Nlc3NlcyB0byB1bm1hcHBlZCBvciB1bnJlYWRhYmxlIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDY6MTUuNDA3NzgyOTMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzNTc2MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk4NzY0YThmOTM5Y2NkOWZiZmFkYmU2Y2YxN2I3NzBiMmMwMDQwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMDowNjoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuQEAgLTM4NzAsNyArMzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcXG4gICpcXHRSZXR1cm4gdmFsdWU6XFxuICAqXFx0MDogZXZlcnl0aGluZyBpcyBPS1xcbiAgKlxcdC1FTk9NRU06IGNvdWxkbid0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnlcXG4tICpcXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5XFxuKyAqXFx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZFxcbisgKiAgICAgIHBheWxvYWQgd291bGQgYmUgbWl4ZWQgd2l0aCB1bnJlYWRhYmxlIGZyYWdzLlxcbiAgKi9cXG4gaW50XFxuIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG5AQCAtMzkwNSwxMCArMzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXFx1MDAyNlxcdTAwMjYgaiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGVuKSB7XFxuK1xcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXFx1MDAzZWhlYWQpKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuIFxcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xcbiBcXHRcXHRza2JfdHhfZXJyb3IoZnJvbSk7XFxuK1xcdFxcdGlmIChqIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cXHUwMDNlaGVhZCkpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbkBAIC0zOTI4LDYgKzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxuIFxcdH1cXG4gXFx0c2tiX3NoaW5mbyh0byktXFx1MDAzZW5yX2ZyYWdzID0gajtcXG4gXFxuK1xcdGlmIChpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBmcm9tLVxcdTAwM2V1bnJlYWRhYmxlKVxcbitcXHRcXHR0by1cXHUwMDNldW5yZWFkYWJsZSA9IDE7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXFxuaW5kZXggNDU1NDQxZjFiNjk0OS4uMTg2YTM2YzY5ODc5OCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcC5jXFxuQEAgLTEyNzgsNiArMTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0aWYgKGNvcHkgXFx1MDAzZSBtc2dfZGF0YV9sZWZ0KG1zZykpXFxuIFxcdFxcdFxcdGNvcHkgPSBtc2dfZGF0YV9sZWZ0KG1zZyk7XFxuIFxcbitcXHRcXHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpIHtcXG4rXFx0XFx0XFx0dGNwX21hcmtfcHVzaCh0cCwgc2tiKTtcXG4rXFx0XFx0XFx0Z290byBuZXdfc2VnbWVudDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKHpjID09IDApIHtcXG4gXFx0XFx0XFx0Ym9vbCBtZXJnZSA9IHRydWU7XFxuIFxcdFxcdFxcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbkBAIC00NjcsNiArNDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghZHBfaWZpbmRleClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuIFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuIFxcdFxcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFuc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjoxNi43NzIyOTA4NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjk4NDQwMzg1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcIm92c19kcF91cGNhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGApIGFuZCBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggKGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCkgdG8gYWRkIGNoZWNrcyBmb3IgdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChgc2tiX2ZyYWdzX3JlYWRhYmxlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB1bnJlYWRhYmxlIGZyYWdtZW50cyBjb3JyZWN0bHkgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzk4NzY0YThmOTM5Y2NkOWZiZmFkYmU2Y2YxN2I3NzBiMmMwMDQwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIwOjA2OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4NzAsNyArMzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbid0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnlcbi0gKlx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeVxuKyAqXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5LCBvciByZWFkYWJsZSBoZWFkXG4rICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCArMzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbitcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4gXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbitcdFx0aWYgKGogXHUwMDNlIDApXG4rXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgKzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHR9XG4gXHRza2Jfc2hpbmZvKHRvKS1cdTAwM2Vucl9mcmFncyA9IGo7XG4gXG4rXHRpZiAoaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgZnJvbS1cdTAwM2V1bnJlYWRhYmxlKVxuK1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLjE4NmEzNmM2OTg3OTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0xMjc4LDYgKzEyNzgsMTEgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGlmIChjb3B5IFx1MDAzZSBtc2dfZGF0YV9sZWZ0KG1zZykpXG4gXHRcdFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcbiBcbitcdFx0aWYgKHpjICE9IE1TR19aRVJPQ09QWSBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSkge1xuK1x0XHRcdHRjcF9tYXJrX3B1c2godHAsIHNrYik7XG4rXHRcdFx0Z290byBuZXdfc2VnbWVudDtcbitcdFx0fVxuK1xuIFx0XHRpZiAoemMgPT0gMCkge1xuIFx0XHRcdGJvb2wgbWVyZ2UgPSB0cnVlO1xuIFx0XHRcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzO1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC00NjcsNiArNDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWRwX2lmaW5kZXgpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuIFx0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghbnNrYilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjE2Ljc3MjI5Mjg4OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTY3ODk5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTmV3IE5ldHdvcmsgQ29kZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2s6IGBza2J1ZmYuY2AsIGB0Y3AuY2AsIGFuZCB0aGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGFkZGluZyBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgaW4gZnVuY3Rpb25zIGxpa2UgYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBHaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCBvbiBjb3JlIG5ldHdvcmtpbmcsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICpmdXp6aW5nKi4gV2UgKm5lZWQqIHRvIGZ1enogdGhpcy4gSXQncyB0b28gaW1wb3J0YW50IHRvIGxlYXZlIHVudGVzdGVkLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgc2xpZ2h0IGh1cmRsZSwgYnV0IHdlIGNhbiBwcm9iYWJseSB0cmFjZSBkb3duIGl0cyBjYWxsZXIgdG8gZ2V0IGNvbnRleHQuIE5vdywgSSdsbCBkaXZlIGludG8gdGhlIHVzYWdlcyBvZiBgc2tiX3plcm9jb3B5YCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjIxLjY4OTA4Njc5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwODU4MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaD00MTM9ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9uZXRiYWNrX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxNjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxODp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTQ5LSAqIGNvdW50ZXIgYmVjYXVzZSBjb3JlIGRyaXZlciBjYWxscyBpbnRvIHhlbnZpZl96ZXJvY29weV9jYWxsYmFja1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTI6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNjAte1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdDtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIxMTpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIG5za2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVxcdFxcdFxcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjM0OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjc0LVxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50Kys7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE0LVxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9mYWlsKys7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XFx0eGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI2OT12b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjcyLVxcdFxcdCBpbnQgbGVuLCBpbnQgaGxlbik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4MTQ6c3RhdGljIGJvb2wgc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxvLCB1MTYgbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgzND1zdGF0aWMgdm9pZCBfX21zZ196ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjICp1YXJnKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cXHRpZiAoIXRhaWwgfHwgU0tCX0VYVF9FUlIodGFpbCktXFx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlxcdCAgICAhc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQodGFpbCwgbG8sIGxlbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTk2MS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNDktXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjUwOlxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjUxLVxcdFxcdFxcdGtmcmVlX3NrYihuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXFx0c2tiX3plcm9jb3B5X2hlYWRsZW4gLSBDYWxjdWxhdGUgaGVhZHJvb20gbmVlZGVkIGZvciBza2JfemVyb2NvcHkoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcXHRAZnJvbTogc291cmNlIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlxcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAndG8nIHNrYiBwYXNzZWRcXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXFx0aW50byBza2JfemVyb2NvcHkoKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG5uZXQvY29yZS9za2J1ZmYuYy0zODM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTU6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODU4OiAqXFx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXFx0QHRvOiBkZXN0aW5hdGlvbiBidWZmZXJcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcXG5uZXQvY29yZS9za2J1ZmYuYzozODY3OiAqXFx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcXHRoZWFkcm9vbSBpbiB0aGUgYHRvYCBidWZmZXIuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkyMS1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00MjQ5LVxcdHNrYl9zaGluZm8oc2tiMSktXFx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB6Y19mbGFncztcXG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlxcdHNrYl96ZXJvY29weV9jbG9uZShza2IxLCBza2IsIDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0aWYgKGxlbiBcXHUwMDNjIHBvcylcXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzg4PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTI6XFx0XFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MobGlzdF9za2IsIEdGUF9BVE9NSUMpIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcXHRcXHRcXHRcXHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTM0My1cXG5uZXQvaXB2NC90Y3AuYzoxMzQ0OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVxcdGlmIChkcC1cXHUwMDNldXNlcl9mZWF0dXJlcyBcXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1MDE6XFx0XFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUwMi1cXHRlbHNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01ODctXFx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4OlxcdCAqIGluIHNrYl96ZXJvY29weSgpICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVxcdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XFx0ZXJyID0gc2tiX3plcm9jb3B5KHVzZXJfc2tiLCBza2IsIHNrYl9sZW4sIGhsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAwOC1cXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA4NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTA5Mi1cXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG5uZXQveGRwL3hzay5jOjEwOTM6XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMDk0LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjoyMy45NTk5NDk0MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ3NTE0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gSSBrbm93IHRoYXQgYHNrYl96ZXJvY29weWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJJ3ZlIHNlZW4gaXQgdXNlZCBpbiBwbGFjZXMgbGlrZSB0aGUgTmV0ZmlsdGVyIE5GTkVUTElOSyBxdWV1ZSBpbXBsZW1lbnRhdGlvbiAoYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgKSBhbmQgd2l0aGluIE9wZW4gdlN3aXRjaCdzIGRhdGFwYXRoIGNvZGUgKGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2ApLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBjb21wb25lbnRzIGxldmVyYWdlIHplcm8tY29weSBtZWNoYW5pc21zLlxuXG5gdGNwX3NlbmRtc2dfbG9ja2VkYCwgdGhhdCdzIHRoZSBicmVhZC1hbmQtYnV0dGVyIG9mIFRDUCBzZW5kIG9wZXJhdGlvbnMuIEFueSBjaGFuZ2UgdGhlcmUgaXMgcG90ZW50aWFsbHkgZmFyLXJlYWNoaW5nLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgaW50ZXJhY3Rpb25zIGNhcmVmdWxseS5cblxuVGhlbiB0aGVyZeKAmXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIHdoaWNoLCBhZ2Fpbiwgc2hvd3MgdXAgaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aC4gU28sIGxldOKAmXMgbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoZXNlIHRocmVlOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEknbSBnb2luZyB0byBmb2N1cyBvbiBhcyBJIGRpZyBkZWVwZXIuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgSSBqdXN0IHJlY2FsbGVkIHRoYXQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFN0aWxsLCBpZiBpdCdzIGJlaW5nIG1vZGlmaWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbGVycyB3aXRoaW4gdGhhdCBtb2R1bGUuIEl0J3MgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCwgYnV0IHN0aWxsIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBpdHMgY2FsbGVycyB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTc3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjI4LjYwNzQ2NzE4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUyNzE3MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMC1cXHRcXHRcXHQgICAgIHVpbnQzMl90IGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzI5PWludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDUtXFx0aWYgKCFza2JfaXNfZ3NvKHNrYikpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzQ2OlxcdFxcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDctXFx0ZWxzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY2PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozOTc6XFx0XFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQxPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDUyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjMwLjI2MDE5MTI3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTQ3NzcyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiBhIHNwZWNpZmljIGFyZWEuIGBvdnNfZHBfdXBjYWxsYCBpcyBhIGtleSBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZSBiZWNhdXNlIGl0IGRpcmVjdGx5IGNhbGxzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIGZsb3cgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2guXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgd2hhdCdzIHVzaW5nIGBza2JfemVyb2NvcHlgLiAgQSBxdWljayBzY2FuIHJldmVhbHMgaXQncyBjYWxsZWQgYnkgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBieSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXRzZWxmIGluIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggY29kZS4gSW50ZXJlc3RpbmcuXG5cblRoZW4sIGZvciBjb250cmFzdCwgSSdtIGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIFRDUCwgYW5kIEknbSBzZWVpbmcgaXQncyBjYWxsZWQgYnkgdGhlIHN0YW5kYXJkIGB0Y3Bfc2VuZG1zZ2AsIGB0Y3Bfc2VuZHBhZ2VfbG9ja2VkYCwgYW5kIG90aGVyIGNvcmUgVENQIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCBmb3IgY29tcGFyaXNvbi5cblxuU28sIHRvIHN1bW1hcml6ZSBteSBrZXkgZm9jdXMgc3ltYm9scyByaWdodCBub3csIEkgaGF2ZTpcblxuKiAgIGBza2JfemVyb2NvcHlgXG4qICAgYHRjcF9zZW5kbXNnX2xvY2tlZGBcbiogICBgb3ZzX2RwX3VwY2FsbGBcblxuQmFzZWQgb24gdGhpcyBwYXRoLCB0aGUgY29uZmlndXJhdGlvbnMgb2YgaW50ZXJlc3QgYXJlIHByZXR0eSBjbGVhcmx5OlxuXG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWBcblxuSSBzaG91bGQgcmVhbGx5IHF1aWNrbHkgbG9vayBhdCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGluIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBvbiB0aGF0IGZyb250LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjI5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjM1Ljk1NDk3MTYxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExOTIyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjM3LjQ2Njg5OTgwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODU5ODQ0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBPcGVuIHZTd2l0Y2ggaW4gdGhlIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYE9QRU5WU1dJVENIYCBjb25maWd1cmF0aW9uIGluIHRoZSBLY29uZmlnIGZpbGVzLiBJIGtub3cgdGhlIGdlbmVyYWwgc3RydWN0dXJlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHR5cGljYWwgbG9jYXRpb25zIHdoZXJlIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzIHJlc2lkZSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIE9wZW4gdlN3aXRjaCBpcyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZmlndXJlZCBhcyBhIG1vZHVsZS4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JrIHN0YWNrcyBvciBmZWF0dXJlcywgbGlrZSBicmlkZ2luZyBvciBWTEFOIHN1cHBvcnQsIGFuZCBob3cgdGhvc2UgbWlnaHQgYmUgY29uZmlndXJlZCBpbiByZWxhdGlvbiB0byB0aGUgT1ZTIGVudHJ5LiBDaGVja2luZyB0aGUgS2NvbmZpZyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBjb21wb25lbnQgaXMgYWN0dWFsbHkgYnVpbHQgaW50byB0aGUgaW1hZ2UsIG9yIGlmIGl0J3MgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbnRleHQgYXQgYWxsLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgYmFzZSBzdGF0ZSBvZiBPcGVuIHZTd2l0Y2ggd2l0aGluIHRoZSBzeXN0ZW0gSSdtIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjQxLjM1Mjg4Njg3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDUwMDUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjQyLjgyNzM5NjExNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ0ODY4MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uczogYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGNvcnJlY3RseSBzZXQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIEJlZm9yZSBJIGRpdmUgZGVlcGVyLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGUga2VybmVsIGV4cG9ydHMgdGhlIGBza2JfemVyb2NvcHlgIHN5bWJvbCwgZXNwZWNpYWxseSBpZiB0aGUgY29kZSBJJ20gd29ya2luZyB3aXRoIG1pZ2h0IHJlbHkgb24gaXQuIEhtbSwgbG9va3MgZ29vZC4gYEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7YCBpcyBpbmRlZWQgcHJlc2VudCwgc28gbm8gaW1tZWRpYXRlIGNvbmNlcm5zIHRoZXJlLiBOZXh0LCBsZXQncyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIHN5bWJvbCBtaWdodCBiZSByZXF1aXJlZCBmb3IgbXkgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA2OjQ2LjM3MjI2NjgyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MTAzNjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0Y3Bfc2VuZG1zZ19sb2NrZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NDgtfVxcbm5ldC9pcHY0L3RjcC5jOjE0NDk6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjo0OC40NjMzMDkxNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwOTY3ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbml0aWFsIEFmZmlybWF0aW9uIGFuZCBWZXJpZmljYXRpb24qKlxuXG5ZZXMuIE9rYXksIHRoYXQgZmVlbHMgcmlnaHQgaW4gcHJpbmNpcGxlLiBCdXQgYmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgYG92c19kcF91cGNhbGxgLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGNvbXBvbmVudCBhbmQgaXRzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIHNwZWNpZmljIGRldGFpbHMuIEp1c3QgYSBxdWljayByZXZpZXcgd2lsbCBlbnN1cmUgSSdtIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBteSBtZW50YWwgbW9kZWwgb2YgdGhhdCBhc3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTQ5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDY6NTMuMDcyOTkwMDQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM0Mzc0NDAyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipvdnNfZHBfdXBjYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjo1NS4xMDczNzIxNDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2MTc2MjIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBUaGlzIGRhdGEgaXNuJ3QgKmV4cG9ydGVkKiwgc28gaXQncyBub3QgYSBzaW1wbGUgdmFyaWFibGUgSSBjYW4gZWFzaWx5IGFjY2Vzcy4gQnV0LCBpdCdzIGFsc28gbm90IHN0YXRpY2FsbHkgZGVmaW5lZCwgd2hpY2ggaW1wbGllcyBpdCdzIGJlaW5nIGhhbmRsZWQgZHluYW1pY2FsbHkuIEFscmlnaHQsIGxldCdzIHNlZSB3aGVyZSB0aGF0IHRha2VzIG1lLiBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIGhvdyB0aGlzIG5vbi1leHBvcnRlZCwgbm9uLXN0YXRpYyBkYXRhIGlzIG1hbmFnZWQsIHRvIGRldGVybWluZSBob3cgSSBjYW4gYWNjZXNzIGl0LiBSaWdodCwgSSB0aGluayB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIG1hbmlwdWxhdGlvbiBpcyB0aGUgYG92c19kcF91cGNhbGxgIGZ1bmN0aW9uLiBOb3csIHdoZXJlIGlzIGl0LCBhaCB5ZXMuLi4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gTGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMjUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNjo1OC45NjkxMzY5MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTEwNTMyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG92c19kcF91cGNhbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzI4LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMyOTppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzMC1cXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzIxPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjI6aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICosIHN0cnVjdCBza19idWZmICosXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIzLVxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIGNvbnN0IHN0cnVjdCBkcF91cGNhbGxfaW5mbyAqLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzowMC41NjAxOTQ4NzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyODg3OTIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhpcyBub24tc3RhdGljIGVsZW1lbnQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdHMgZHluYW1pYyBuYXR1cmUgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgYXMgYSBnb29kIGZvY3VzIHN5bWJvbCwgc3VnZ2VzdGluZyBwb3RlbnRpYWwgZm9yIG1vcmUgc29waGlzdGljYXRlZCBjb250cm9sIG9yIGludGVyYWN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSBob3cuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCBoZXJlIHdlIGdvLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9ORVRMSU5LYC4gTWFrZXMgc2Vuc2UsIHRoZSBxdWV1ZSBsaWtlbHkgbGV2ZXJhZ2VzIHRoZSBuZXRsaW5rIGluZnJhc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY29tbXVuaWNhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGxpbmsgaW4gdGhlIGNoYWluLCBzbyB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0YW50IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgd2lsbCB3b3JrIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjA0Ljg4OTA3NjM2N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzEzNjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipORVRGSUxURVJfTkVUTElOS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4OC1cXHRkZXBlbmRzIG9uIE5GX0NUX05FVExJTktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg5OlxcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzkwOlxcdGRlcGVuZHMgb24gTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTEtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDAtXFx0ZGVmYXVsdCBuXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwMTpcXHRkZXBlbmRzIG9uIChORVRGSUxURVJfTkVUTElOS19RVUVVRSB8fCBORVRGSUxURVJfTkVUTElOS19MT0cpIFxcdTAwMjZcXHUwMDI2IE5GX0NUX05FVExJTktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDAyLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01NjU9Y29uZmlnIE5GVF9RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NjY6XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NjctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgcXVldWUgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzowNy4wNjIyMjA0MTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyODc3MDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gTkVURklMVEVSX05FVExJTktfUVVFVUUqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEknbSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHJlY2FsbCB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIG5lZWQgdG8gc29saWRpZnkgdGhhdCBjb25jZXB0IGluIG15IG1pbmQuIE5vdCBhIGNyaXRpY2FsIGlzc3VlIGJ5IGFueSBtZWFucywgYnV0IEknbSB0aGlua2luZyBJJ2xsIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCBvZiB0aGlzIGRpc2N1c3Npb24gaWYgSSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIGp1c3QgY2hlY2sgdGhlIHN0YW5kYXJkIGRvY3VtZW50YXRpb24sIEkgaGF2ZSBpdCBzb21ld2hlcmUuLi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNwb3Qgb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJJ20gc3VyZSBJJ2xsIGZpbmQgaXQgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzoxMC43OTA5OTM5OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQ5ODI0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MTIuMzE1OTgxODE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDQwMDM5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQsIGFuZCBsaW5lIDU0IGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGdyYXNwIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSBwcm9iYWJseSBjb250YWlucyBhIHRvcC1sZXZlbCBgY29uZmlnYCBvcHRpb24gb3IgYSBtb2R1bGUgZGVmaW5pdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyB1c3VhbGx5IGJlZ2luLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgYW5kIG1heWJlIHNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGtleSBuZXRmaWx0ZXIgZmVhdHVyZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSd2ZSBvcmdhbml6ZWQgdGhlIG9wdGlvbnMgY29uY2VwdHVhbGx5IOKAkyBpcyBpdCBiYXNlZCBvbiBwcm90b2NvbCwgZnVuY3Rpb25hbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjE1Ljc1OTk4ODY1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA0MzpcXHRcXHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXFxuICA0NDpcXHRcXHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDQ5OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA1MjpcXHRcXHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAgNTU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjA6XFx0XFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA2NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDY1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA2ODpcXHRcXHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzoxNS43NjAwOTE1ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NTE3OTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBPcGVuIHZTd2l0Y2g6IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBmZWF0dXJlLiBJdCdzIG1ha2luZyBtZSB3b25kZXIgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gT2theSwgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBpbXBsaWNhdGlvbnMuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggd2l0aCBkZXBlbmRlbmNpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIHdoaWxlIEknbSBpbiB0aGUgbmVpZ2hib3Job29kLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGdpdmUgYE9QRU5WU1dJVENIYCBhIHF1aWNrIGxvb2stb3Zlci4gSSdsbCBuZWVkIHRvIGhlYWQgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLiBTb21ldGltZXMgcmVsYXRlZCBjb21wb25lbnRzIGhhdmUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIG9yIGNvbmZpZyBvcHRpb25zLCBhbmQgaXQncyB1c2VmdWwgdG8ga2VlcCB0aGF0IGluIG1pbmQsIGp1c3QgaW4gY2FzZS4gSXQncyBsaWtlbHkgdGhhdCBpdCB1c2VzIG9yIHJlbGF0ZXMgdG8gTmV0ZmlsdGVyLCByaWdodD8gU28sIGxldCdzIHNlZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MjEuMjA1Mjc1MTU4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzoyMS4yMDUzMzQyOThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MTg1MjQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBPcGVuIHZTd2l0Y2gsIGFuZCBpdCdzIGNsZWFyIGl0IGxlYW5zIG9uIHRoZSBJTkVUIHN0YWNrLiBSaWdodCwgdGhhdCdzIGZ1bmRhbWVudGFsLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIE9wZW4gdlN3aXRjaCwgbmF0dXJhbGx5LCBidXQgYWxzbyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJIHF1aWNrbHkgcmVtZW1iZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgdHlwaWNhbGx5IHRha2VuIGNhcmUgb2Ygb25lIHdheSBvciBhbm90aGVyLCBzbyBJJ2xsIGp1c3QgbWVudGlvbiB0aGUgZmlyc3QgdHdvIGZvciBub3cuIExldCdzIGtlZXAgaXQgc2ltcGxlIGFuZCB0byB0aGUgcG9pbnQuIE9oLCBiZWZvcmUgSSBmb3JnZXQsIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHNrYl96ZXJvY29weWAgaXMgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZTsgbWlnaHQgYmUgdXNlZnVsIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjI0Ljg1NzE4OTM0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMjA2NTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfemVyb2NvcHlcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzA9dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzE6aW50IHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3Mi1cXHRcXHQgaW50IGxlbiwgaW50IGhsZW4pO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzgyOD1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzAtIC8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzE6ICpcXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzMi0gKlxcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM0LSAqXFx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICd0bycgc2tiIHBhc3NlZFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzU6ICpcXHRpbnRvIHNrYl96ZXJvY29weSgpLlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzYtICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg3LVxcdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjU4ODpcXHQgKiBpbiBza2JfemVyb2NvcHkoKSAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cXHRpZiAoIShubGEgPSBubGFfcmVzZXJ2ZSh1c2VyX3NrYiwgT1ZTX1BBQ0tFVF9BVFRSX1BBQ0tFVCwgMCkpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTk1OlxcdGVyciA9IHNrYl96ZXJvY29weSh1c2VyX3NrYiwgc2tiLCBza2JfbGVuLCBobGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXFxuLS1cXG5uZXQveGRwL3hzay5jLTEwMDgtXFxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtMTAxMC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jPTEwODU9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTEwOTItXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMDkzOlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTA5NC1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MjcuMDY5MjYwNjM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5Mzk5ODA4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgUGF0Y2ggLSBTS0IgRnJhZyBSZWFkYWJpbGl0eSBDaGVja3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugc29tZW9uZSdzIGludHJvZHVjZWQgYSBzZXJpZXMgb2YgY2hlY2tzIGZvciBgIXNrYl9mcmFnc19yZWFkYWJsZSgpYCB3aXRoaW4gYSBmZXcga2V5IGZ1bmN0aW9uczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBmb2N1c2luZyBvbiB0aGVzZSBpcyBpbnRlcmVzdGluZy4gSSdtIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjb250ZXh0cyBvZiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGBvdnNfZHBfdXBjYWxsYCBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIGFzIEkga25vdyB0aG9zZSBhcmVhcyB3ZWxsIGZyb20gbXkgd29yay5cblxuU3BlY2lmaWNhbGx5LCBnaXZlbiB0aGUgT3BlbiB2U3dpdGNoIGNvbnRleHQgd2l0aCB0aGUgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGZ1bmN0aW9uLCB0aGlzIGZlZWxzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgZGF0YSBjb3JydXB0aW9uIG9yIGFjY2VzcyBpc3N1ZSB3aXRoIGZyYWdtZW50ZWQgc2ticy4gQW5kIHRoZSBtZW50aW9uIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgY29udGV4dCBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBhIHJlbGF0aW9uc2hpcCB0byBOZXRmaWx0ZXIncyB1c2Vyc3BhY2UgcXVldWVpbmcgbWVjaGFuaXNtIG9yIE9wZW4gdlN3aXRjaCdzIG5ldHdvcmsgZGF0YXBhdGguXG5cbkxldCdzIHNlZTogYHNrYl96ZXJvY29weWDigKYgcmlnaHQsIHRoYXQncyBwb3RlbnRpYWxseSBpbnZvbHZlZCBpbiB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gKkFoLCBpbnRlcmVzdGluZyosIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGdpdmVuIHRoZSBjb250ZXh0IGFyb3VuZCBuZXR3b3JraW5nLCB0aGlzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnQgaGFuZGxpbmcuIElzIGBza2JfemVyb2NvcHlgIGNhbGxlZCBmcm9tIGBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZWA/IExldCBtZSBxdWlja2x5IGNoZWNrLi4uIFllcywgaXQgaXMuIEFuZCBJIGFzc3VtZSBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgIGlzIGV4cG9ydGVkIOKAkyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGF0J3MgcmVsZXZhbnQuIElmIHRob3NlIGZyYWdtZW50cyBhcmUgbm90IHJlYWRhYmxlIGluIHRoZSBORlFVRVVFIGNvbnRleHQgYW5kIHBvdGVudGlhbGx5IGNvcGllZCBmcm9tIGtlcm5lbCB0byB1c2Vyc3BhY2UgYW5kIGJhY2sgdG8ga2VybmVsIGFnYWluLCBzb21ldGhpbmcgbXVzdCBiZSBhdCBzdGFrZSBpZiB0aGV5IGFyZW4ndCByZWFkYWJsZSBpbiB0aGUgcHJvY2Vzcy5cblxuT2theSwgSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIHBhdGNoIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGVjayBpcyBiZWluZyBhZGRlZCwgYW5kIHByZWNpc2VseSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhlIGBza2JfZnJhZ3NfcmVhZGFibGVgIGZ1bmN0aW9uIGlzIGZhaWxpbmcuIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc2tiIGZyYWdtZW50cyBhcmUgYmVpbmcgaGFuZGxlZCB0aHJvdWdob3V0IHRoZSB2YXJpb3VzIHBhdGhzLCBpbmNsdWRpbmcgT3BlbiB2U3dpdGNoLCBOZXRmaWx0ZXIgYW5kIFRDUCBzdGFja3MuIFRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uLCBvciBzb21lIGZyYWdtZW50ZWQgYnVmZmVyIGhhbmRsaW5nLCBwZXJoYXBzIHdpdGggRE1BIG9yIHNoYXJlZCBtZW1vcnkgY29uc2lkZXJhdGlvbnMsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6MzUuMDA5MjQzODdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM0OTAyMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzozNy4wNjI3NTI2NjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MDIyOTU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRob3VnaHQgcHJvY2Vzcy4gTGV0J3MgZ2V0IHRoaXMgZG9uZS5cbioqKlxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIHNlZW1zIHRvIGJlIHdoZXRoZXIgdGhlIHNpdHVhdGlvbiBpcyBzdGF0aWMgb3IgZHluYW1pYy4gVGhhdCdzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQsIGlzbid0IGl0PyBJdCBkaWN0YXRlcyBldmVyeXRoaW5nIHRoYXQgZm9sbG93cy4gSWYgaXQncyBzdGF0aWMsIHRoZW4gdGhlIGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIGFib3V0IHN0YWJpbGl6YXRpb24sIGNvbnRyb2wsIGFuZCBhIGZvY3VzIG9uIG1pbmltaXppbmcgZGV2aWF0aW9uIGZyb20gdGhlIGVzdGFibGlzaGVkIHN0YXRlLiBFc3NlbnRpYWxseSwgSSdtIGxvb2tpbmcgZm9yIGludmFyaWFudHMsIHRoaW5ncyB0aGF0ICp3b24ndCogY2hhbmdlLCBhbmQgbGV2ZXJhZ2UgdGhlbS4gSG93ZXZlciwgaWYgaXQgaXNuJ3Qgc3RhdGljLCBpdCBtZWFucyBjaGFuZ2UgaXMgaW5oZXJlbnQgaW4gdGhlIHN5c3RlbS4gVGhlIGFwcHJvYWNoIHdpbGwgbmVjZXNzYXJpbHkgcmV2b2x2ZSBhcm91bmQgdW5kZXJzdGFuZGluZyB0aGUgZm9yY2VzIGRyaXZpbmcgdGhhdCBjaGFuZ2UsIHByZWRpY3RpbmcgaXRzIGRpcmVjdGlvbiwgYW5kIGFkYXB0aW5nIGFjY29yZGluZ2x5LiBTdGFiaWxpdHkgYmVjb21lcyBhIG1vdmluZyB0YXJnZXQsIGFuZCByZXNpbGllbmNlIGFuZCBhZ2lsaXR5IGJlY29tZSBwYXJhbW91bnQuIFNvLCB5ZXMsIHRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBjbGFzc2lmeSB3aGV0aGVyIHRoZSBzaXR1YXRpb24gaXMgc3RhYmxlLCBvciBpbiBmbHV4LiBUaGF0IGRpc3RpbmN0aW9uIGRldGVybWluZXMgdGhlIHJpZ2h0IHBhdGggZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NzAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjQwLjAzMjk4NDQ3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODAxMjg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzA1Om5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTcwNi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzQ9X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4MS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk4MjpcXHRuc2tiID0gbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2UobmV0LCBxdWV1ZSwgZW50cnksIFxcdTAwMjZwYWNrZXRfaWRfcHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4My1cXHRpZiAobnNrYiA9PSBOVUxMKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjQxLjU2MTAwNDE0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIzMTUyMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGhpdHRpbmcgbWU6IGBfX25mcW5sX2VucXVldWVfcGFja2V0YC4gVGhpcyBmdW5jdGlvbi4uLiBpdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCdzIHdoYXQncyBzbmFnZ2luZyBteSBhdHRlbnRpb24uIEEgc3RhdGljIGZ1bmN0aW9uIGlzLCBieSBkZWZpbml0aW9uLCBmaWxlLXNjb3BlIG9ubHkuIEl0J3Mgbm90IHZpc2libGUgb3V0c2lkZSBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBpdCdzIGRlZmluZWQgaW4uIFRoYXQncyBpbW1lZGlhdGVseSBnb2luZyB0byBpbXBhY3QgaG93IEknbSB0aGlua2luZyBhYm91dCBpdHMgdXNhZ2UgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIElzIGl0IHN1cHBvc2VkIHRvIGJlIHN0YXRpYz8gSXMgdGhpcyBpbnRlbnRpb25hbCwgb3IgZGlkIHNvbWVvbmUgb3Zlcmxvb2sgc29tZXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHNwZWNpZmljIG1vZHVsZSBhbmQgaG93IGl0cyBlbmNhcHN1bGF0aW9uIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aGluIHRoaXMgY29udGV4dC4gTm93IEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uJ3Mgc2NvcGUsIGFuZCBpdHMgc3RhdGljIG5hdHVyZSwgaW1wYWN0cyB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGludGVuZGVkIGZsb3cuIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzo0NC44ODQxNTk5ODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDY1MzI0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZnFubF9lbnF1ZXVlX3BhY2tldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3Mz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzQ6X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzUtXFx0XFx0XFx0c3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA3Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDc3Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNzgtXFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4Ny1cXHRcXHRlbnRyeS1cXHUwMDNlc2tiID0gc2tiO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA4ODpcXHRcXHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODktXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA5OC1cXHRcXHRlbnRyeV9zZWctXFx1MDAzZXNrYiA9IHNrYjtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwOTk6XFx0XFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeV9zZWcpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTEwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMTA3PW5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cXHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAoKHF1ZXVlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcXHUwMDI2XFx1MDAyNiAhc2tiX2lzX2dzb19zY3RwKHNrYikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcXHRcXHRyZXR1cm4gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTc1LVxcdFxcdGlmIChlcnIgPT0gMClcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjExNzY6XFx0XFx0XFx0ZXJyID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28obmV0LCBxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0c2VncywgZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzo0Ni4zOTA2OTcxNjJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2ODY3MDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbjogYG5mcW5sX2VucXVldWVfcGFja2V0YCoqXG5cbk9rYXksIHNvIHRoZSBmYWN0IHRoYXQgYG5mcW5sX2VucXVldWVfcGFja2V0YCBpcyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBmZXcgZmxhZ3MuIFdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbiB3aXRoIGV4dGVybmFsIGxpbmthZ2UuIFRoYXQgaW1wbGllcyBhIGZldyBrZXkgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0LiBJdCdzIGRlc2lnbmVkIHRvIGJlIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHRyYW5zbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBUaGlzIHNjcmVhbXMgXCJBUEkgZnVuY3Rpb25cIiBvciBcInBhcnQgb2YgYSBicm9hZGVyIGxpYnJhcnkvbW9kdWxlXCIg4oCTIHNvbWV0aGluZyBpbnRlbmRlZCBmb3IgcmV1c2UgYW5kIGludGVyYWN0aW9uIHdpdGggb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgbmV0ZmlsdGVyIHF1ZXVlIGltcGxlbWVudGF0aW9uIG9yIGV2ZW4gZXh0ZXJuYWwgY29kZS5cblxuVGhpcyBjb250cmFzdHMgc3Ryb25nbHkgd2l0aCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggd291bGQgYmUgc2NvcGVkIHB1cmVseSB3aXRoaW4gYSBzaW5nbGUgLmMgZmlsZS4gSW4gdGhhdCBzY2VuYXJpbywgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIsIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IG1lYW50IGZvciBkaXJlY3QsIGV4dGVybmFsIGFjY2Vzcy4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIHdlIGhhdmUgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNyb3NzLW1vZHVsZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBpbmNsdWRlIGZpbGVzIHRoYXQgd291bGQgYWxsb3cgYW5vdGhlciBtb2R1bGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG5cbkl0IGFsc28gbWVhbnMgdGhhdCB0aGUgbGlua2VyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHRoaXMgZnVuY3Rpb24sIG5lZWRpbmcgdGhlIHJpZ2h0IGRlY2xhcmF0aW9uIHRvIGdldCB0aGUgZXh0ZXJuYWwgc3ltYm9scyBjb25uZWN0ZWQuIFdlIG5lZWQgdG8gYmUgd2FyeSBvZiBhbnkgcG90ZW50aWFsIG5hbWUgY2xhc2hlcywgdG9vIOKAkyBhbHRob3VnaCBpbiBhIHdlbGwtc3RydWN0dXJlZCBzeXN0ZW0sIHdlJ2QgYmUgdXNpbmcgbmFtZXNwYWNlcyBhbmQgY2FyZWZ1bGx5IG5hbWVkIGZ1bmN0aW9ucyB0byBtaW5pbWl6ZSBzdWNoIHJpc2tzLiBUaGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaGFzIGltcGxpY2F0aW9ucyBmb3Igc3ltYm9sIHJlc29sdXRpb24gYW5kLCB0aGVyZWZvcmUsIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBsaW5raW5nIHN0cmF0ZWd5LiBJdCBzaGFwZXMgb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoZSB3aG9sZSBzeXN0ZW0uIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjUwLjQ1OTM3MDUyN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NDQwODM2MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbmZxbmxfZW5xdWV1ZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA3OjUyLjUwMzc4NzYzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTgwNTk0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgQ29udW5kcnVtKipcblxuQWxyaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIHNlZWluZyB0aGF0IGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgaXNuJ3Qgc2hvd2luZyB1cCBhcyBhbiBleHBvcnRlZCBzeW1ib2wuIFRoYXQgcmFpc2VzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuIFR5cGljYWxseSwgaWYgYSBmdW5jdGlvbiBpcyBiZWluZyAqdXNlZCogaW4gYSBtb2R1bGFyIG9yIGV4dGVybmFsIGNvbnRleHQsIGl0IG5lZWRzIHRvIGJlIGV4cG9ydGVkLCByaWdodD8gT3RoZXJ3aXNlLCB5b3UnbGwgYmUgc3RhcmluZyBkb3duIGxpbmtlciBlcnJvcnMgb3IgdW5kZWZpbmVkIHN5bWJvbCBpc3N1ZXMuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGl0ICppcyogYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgbWVtYmVyLCBvciBtYXliZSBldmVuIGJlaW5nIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQncyB0aGUgcmVhbCBwdXp6bGUgaGVyZS5cblxuU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYG5mcW5sX2VucXVldWVfcGFja2V0YCBmdW5jdGlvbiBpcyBiZWluZyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBJcyBpdCBkZWZpbmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgaGlkZGVuIHZpYSBzdGF0aWMgaW5saW5lPyBJcyBpdCBhY2Nlc3NlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcj8gT3IgaXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgZ29pbmcgb24/IEkgc3VzcGVjdCB0aGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgbWF5YmUgc29tZSBzeW1ib2wgdGFibGUgYW5hbHlzaXMgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIFwiaGlkZGVuXCIgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgaW52b2tlZC4gR290dGEgZGlnIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MsIHRoZSBsaW5rZXIgc2NyaXB0cywgYW5kIHBvdGVudGlhbGx5IGNyb3NzLXJlZmVyZW5jZSB0aGUgc291cmNlIGZpbGVzLiBUaGlzIGNvdWxkIGJlIGEgc25lYWt5IGJpdCBvZiBrZXJuZWwgdHJpY2tlcnksIG9yIGp1c3QgYSBidWlsZCBjb25maWd1cmF0aW9uIGlzc3VlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowNzo1Ny45NjE4NTA3NTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTg3MTkzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfZW5xdWV1ZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTc0Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVxcdFxcdFxcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNzY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDc4LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXFx0XFx0ZW50cnktXFx1MDAzZXNrYiA9IHNrYjtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwODg6XFx0XFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg5LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwOTgtXFx0XFx0ZW50cnlfc2VnLVxcdTAwM2Vza2IgPSBza2I7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5OlxcdFxcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnlfc2VnKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTEwNj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTA3Om5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvX3NjdHAoc2tiKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2OlxcdFxcdHJldHVybiBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzUtXFx0XFx0aWYgKGVyciA9PSAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE3NjpcXHRcXHRcXHRlcnIgPSBfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhuZXQsIHF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWdzLCBlbnRyeSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE4MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyIG5mcWggPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlxcdC5vdXRmblxcdFxcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODAyLVxcdC5uZl9ob29rX2Ryb3BcXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDc6NTkuNDYwNTc0NjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3ODkxNjg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBiaXQgb2YgYSB3cmlua2xlLCBidXQgdGhlIGBuZl9xdWV1ZV9oYW5kbGVyIG5mcWhgIHN0cnVjdCBpcyByZWdpc3RlcmVkLCB3aGljaCB0ZWxscyBtZSB0aGUgbmV0ZmlsdGVyIHF1ZXVlIGlzIGFjdGl2ZS4gVGhpcyBtZWFucyB0aGF0IGZvY3VzaW5nIG9uIGBza2JfemVyb2NvcHlgIGlzIHN0aWxsIGEgdmFsaWQgYXBwcm9hY2guXG5cbk5vdywgbGV0J3MgbG9vayBhdCBhIGNvdXBsZSBvZiBvdGhlciBrZXkgZnVuY3Rpb25zIHRvIHNlZSBpZiB0aGV5J3JlIGFsc28gcmVsZXZhbnQuIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIGV4cG9ydGVkLCBnb29kLiBBbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBjaGVja2luZyBgb3ZzX2RwX3VwY2FsbGAgYW5kIGl0J3MgY29uZmlybWVkLCBpdCBpcyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0J3MgYSBjYW5kaWRhdGUgYXMgd2VsbC5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBuZWVkIHRvIGFuYWx5emUgYXJlOlxuXG4qICAgYHNrYl96ZXJvY29weWBcbiogICBgdGNwX3NlbmRtc2dfbG9ja2VkYFxuKiAgIGBvdnNfZHBfdXBjYWxsYFxuXG5CYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gdGhpcyBjb2RlOlxuXG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWBcblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuXG5cbmBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gSG1tbS4uLiB1c3VhbGx5LCBpZiBgTkVURklMVEVSX0FEVkFOQ0VEYCBkZWZhdWx0cyB0byBcInlcIiB0aGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBpdC4gQnV0IGl0J3MgYmV0dGVyIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYE5FVEZJTFRFUl9BRFZBTkNFRGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MDUuMTM5NDkzNDIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2Mjg1Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIxOS1cXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MDYuNjg1Nzg1NjY4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDk5MDEzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBjdXJyZW50IGxpbmUgb2YgdGhpbmtpbmcsIG15IGd1dCB0ZWxscyBtZSB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCBpbiBvbmUgb2YgdGhlIGJhc2UgS2NvbmZpZyBkZWZpbml0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L0tjb25maWdgIOKAkyBpdCdzIGEgY3JpdGljYWwgZmlsZSBmb3IgbmV0d29yay1yZWxhdGVkIHNldHRpbmdzLCBzbyBpdCdzIGEgbG9naWNhbCBmaXJzdCBzdG9wLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAyMjAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgYmFzZSBuZXR3b3JraW5nIGZlYXR1cmVzIGFyZSBwbGFjZWQuIEknbGwgZm9jdXMgb24gd2hhdCdzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG15IGN1cnJlbnQgcHJvYmxlbSBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgYnJhbmNoaW5nIGxvZ2ljIGFuZCB3aGVyZSBteSBzcGVjaWZpYyBzZXR0aW5nIG1pZ2h0IGJlIGludGVyZmVyaW5nIHdpdGggYSBiYXNlIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MTAuOTk1Njg5NDcxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNTpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1xcdTAwM2UgdW5kZXIgXFxcImlwdGFibGVzXFxcIiBmb3IgdGhlIGxvY2F0aW9uIG9mXFxuIDIxNjpcXHRcXHQgIHRoZXNlIHBhY2thZ2VzLlxcbiAyMTc6XFx0XFxuIDIxODpcXHRpZiBORVRGSUxURVJcXG4gMjE5OlxcdFxcbiAyMjA6XFx0Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyMjE6XFx0XFx0Ym9vbCBcXFwiQWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cXFwiXFxuIDIyMjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxcbiAyMjM6XFx0XFx0ZGVmYXVsdCB5XFxuIDIyNDpcXHRcXHRoZWxwXFxuIDIyNTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBjYW4gc2VsZWN0IGJldHdlZW4gYWxsIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcy5cXG4gMjI2OlxcdFxcdCAgSWYgeW91IHNheSBOIHRoZSBtb3JlIHVudXN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlXFxuIDIyNzpcXHRcXHQgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAnTScuXFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMjMwOlxcdFxcbiAyMzE6XFx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4gMjMyOlxcdFxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4gMjMzOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuIDIzNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA4OjEwLjk5NTc2MTU0MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU0NzAyNjM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29yZSBQYXRjaCBmb3IgWmVyby1Db3B5IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGEgcGF0Y2ggaW50cm9kdWNpbmcgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHNpZ25pZmljYW50LCBhbmQgd2FycmFudHMgYSBkZWVwIGRpdmUgYmVjYXVzZSBpdCBhZmZlY3RzIGtleSBuZXR3b3JrIGRhdGEgcGF0aCBvcGVyYXRpb25zLiAgVGhlIGZ1bmN0aW9ucyB0aGF0IGNhdWdodCBteSBhdHRlbnRpb24gYXJlIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCwgYWxsIG9mIHdoaWNoIG5vdyBpbmNsdWRlIHRoaXMgbmV3IGNoZWNrLiAgSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgXCJmdXp6aW5nXCIuICBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IGNhbiBleHBvc2Ugc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgZGF0YSBpbnRlZ3JpdHksIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHplcm8tY29weSBvcGVyYXRpb25zLlxuXG5MZXQncyBicmVhayBpdCBkb3duLiAgYHNrYl96ZXJvY29weWAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyB0aGlzIGNvdWxkIGltcGFjdCBhIHdpZGUgcmFuZ2Ugb2YgbmV0d29yayBmbG93cy4gIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIGVxdWFsbHkgY3J1Y2lhbCwgaXQncyBhIGNyaXRpY2FsIHBhdGgsIG1lYW5pbmcgdGhlcmUncyBhIGhpZ2hlciBjaGFuY2Ugb2YgdGhpcyBpbXBhY3RpbmcgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgaW5jbHVzaW9uIGluIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBzdWdnZXN0cyBvcGVudnN3aXRjaCBpcyBhbHNvIGluIHRoZSBwaWN0dXJlLCBhbmQgSSB0aGluayB0aGF0J3Mgd2h5IHRoaXMgaXMgbW9yZSBzaWduaWZpY2FudC5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgaXNzdWVzIHdoZXJlIGZyYWdtZW50ZWQgc2tfYnVmZnMgKG5ldHdvcmsgYnVmZmVycykgYXJlIGludm9sdmVkLiAgVGhlIGdvYWwgYXBwZWFycyB0byBiZSB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSB3aXRoaW4gdGhlc2UgZnJhZ21lbnRzIGlzIGFjY2Vzc2libGUgYmVmb3JlIHplcm8tY29weSBvcGVyYXRpb25zIG9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgb2NjdXIuIEkgc3VzcGVjdCB0aGlzIGlzIHJlbGF0ZWQgdG8gcHJldmVudGluZyBwb3RlbnRpYWxseSB1bnJlYWRhYmxlIG9yIGluY29uc2lzdGVudCBkYXRhIGZyb20gYmVpbmcgcGFzc2VkIGFyb3VuZC4gIElmIHlvdSB0cnkgdG8gY29weSBmcmFnbWVudHMgaW50byBhIGJ1ZmZlciwgYnV0IHRoZXkncmUgbm90IHJlYWRhYmxlLCB0aGF0J3MgYSBwcm9ibGVtLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIGJ1dCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/ICBgT1BFTlZTV0lUQ0hgIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBmb3IgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiAgQW5kLCBmb3IgdGhlIHJlc3QsIGFmdGVyIGEgcXVpY2sgY2hlY2ssIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQsIGxpa2UgYElORVRgLCB1bmxlc3MgSSdtIG1pc3Npbmcgc29tZXRoaW5nLiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGxvb2tzIHJlbGV2YW50IGJlY2F1c2UgdGhpcyBpcyBhIG5ldyBjaGVjayBhbmQgbWF5IGV4cG9zZSBzb21ldGhpbmcuXG5cbkFscmlnaHQsIHdpdGggdGhpcyB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBmdXp6aW5nIHN0cmF0ZWdpZXMuIEkgd2lsbCBmb2N1cyBvbiB6ZXJvLWNvcHkgc2NlbmFyaW9zIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBzZXQgc29tZSB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MjksIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA4OjI2LjU0Mjc5MDE1OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTM2NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICAgIFwib3ZzX2RwX3VwY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgKGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCkgYW5kIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCAoYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgKSB0byBhZGQgY2hlY2tzIGZvciB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGBza2JfZnJhZ3NfcmVhZGFibGVgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHVucmVhZGFibGUgZnJhZ21lbnRzIGNvcnJlY3RseSB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyAoYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgKSBhbmQgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIChgcXVldWVfdXNlcnNwYWNlX3BhY2tldGApIHRvIGFkZCBjaGVja3MgZm9yIHVucmVhZGFibGUgc2tiIGZyYWdtZW50cyAoYHNrYl9mcmFnc19yZWFkYWJsZWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdW5yZWFkYWJsZSBmcmFnbWVudHMgY29ycmVjdGx5IHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIwOjA4OjI2LjYxNjMzMzgwOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNDM2MjIwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowODoyNi42MTY4NzM3NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExNDMwNzcxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgd2l0aCB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGUuZy4sIGRldmljZSBtZW1vcnkgVENQIHBheWxvYWRzKSwgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZW0gb3IgbWl4aW5nIHRoZW0gd2l0aCByZWFkYWJsZSBmcmFnbWVudHMuIFRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIGtlcm5lbCBwYWdlIGZhdWx0cyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyB0byBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaW52YWxpZCBhY2Nlc3NlcyB0byB1bm1hcHBlZCBvciB1bnJlYWRhYmxlIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTg3NjRhOGY5MzljY2Q5ZmJmYWRiZTZjZjE3Yjc3MGIyYzAwNDAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMjA6MDY6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3MCw3ICszODcwLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xuICAqXHRSZXR1cm4gdmFsdWU6XG4gICpcdDA6IGV2ZXJ5dGhpbmcgaXMgT0tcbiAgKlx0LUVOT01FTTogY291bGRuJ3Qgb3JwaGFuIGZyYWdzIG9mIEBmcm9tIGR1ZSB0byBsYWNrIG9mIG1lbW9yeVxuLSAqXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5XG4rICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcbisgKiAgICAgIHBheWxvYWQgd291bGQgYmUgbWl4ZWQgd2l0aCB1bnJlYWRhYmxlIGZyYWdzLlxuICAqL1xuIGludFxuIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbkBAIC0zOTA1LDEwICszOTA2LDE3IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXHUwMDI2XHUwMDI2IGogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbikge1xuK1x0XHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVx1MDAzZWhlYWQpKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4gXHRza2JfbGVuX2FkZCh0bywgbGVuICsgcGxlbik7XG4gXG4gXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcbiBcdFx0c2tiX3R4X2Vycm9yKGZyb20pO1xuK1x0XHRpZiAoaiBcdTAwM2UgMClcbitcdFx0XHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVx1MDAzZWhlYWQpKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xuQEAgLTM5MjgsNiArMzkzNiw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcdH1cbiBcdHNrYl9zaGluZm8odG8pLVx1MDAzZW5yX2ZyYWdzID0gajtcbiBcbitcdGlmIChpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBmcm9tLVx1MDAzZXVucmVhZGFibGUpXG4rXHRcdHRvLVx1MDAzZXVucmVhZGFibGUgPSAxO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uMTg2YTM2YzY5ODc5OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTEyNzgsNiArMTI3OCwxMSBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0aWYgKGNvcHkgXHUwMDNlIG1zZ19kYXRhX2xlZnQobXNnKSlcbiBcdFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFxuK1x0XHRpZiAoemMgIT0gTVNHX1pFUk9DT1BZIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpKSB7XG4rXHRcdFx0dGNwX21hcmtfcHVzaCh0cCwgc2tiKTtcbitcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuK1x0XHR9XG4rXG4gXHRcdGlmICh6YyA9PSAwKSB7XG4gXHRcdFx0Ym9vbCBtZXJnZSA9IHRydWU7XG4gXHRcdFx0aW50IGkgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTQ2Nyw2ICs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghZHBfaWZpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuc2tiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjA6MDg6MjYuNjE2ODc0ODk3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQzMDUzMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFVucmVhZGFibGUgU0tCIEZyYWdtZW50cyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgY3J1Y2lhbCBjaGFuZ2VzIGFyb3VuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGBza2JgIGZyYWdtZW50cywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNjZW5hcmlvcyB3aGVyZSB0aGVzZSBmcmFnbWVudHMgYXJlIFwidW5yZWFkYWJsZS5cIiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcGF0Y2ggdG91Y2hlcyBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSBkZXZpY2UgbWVtb3J5IFRDUCBvciBwb3RlbnRpYWxseSBzaW1pbGFyIGZlYXR1cmVzIHdoZXJlIGBza2JgIGZyYWdzIG1pZ2h0IGJlIHBvaW50aW5nIHRvIG1lbW9yeSB0aGF0IHRoZSBDUFUgY2FuJ3QgZGlyZWN0bHkgcmVhZCwgbGlrZSBETUEgYnVmZmVycyBvciBkZXZpY2UgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgdXNpbmcgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGFjY2VzcyB0aG9zZSB1bnJlYWRhYmxlIGZyYWdtZW50cywgd2hpY2ggd291bGQgbGVhZCB0byBhIGNyYXNoIG9yIGEga2VybmVsIGZhdWx0LiBGb3IgZXhhbXBsZSwgaW4gYHNrYl96ZXJvY29weWAsIGl0J3MgYWRkaW5nIGEgY2hlY2s6XG5cbmBgYGNcbitcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbitcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuYGBgXG5cbmFuZCBlbnN1cmluZyB0aGF0IGlmIHRoZXJlIGFyZSB1bnJlYWRhYmxlIGZyYWdzLCBgdG8tXHUwMDNldW5yZWFkYWJsZWAgaXMgc2V0IGFwcHJvcHJpYXRlbHksIHByZXNlcnZpbmcgdGhlIHVucmVhZGFibGUgc3RhdGUuIEluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGl0IGp1bXBzIHRvIGEgbmV3IHNlZ21lbnQuIFRoZSBmaXggaW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGlzIGEgYml0IG1vcmUgc3RyYWlnaHQgZm9yd2FyZCBhbmQganVzdCByZXR1cm5zIC1FRkFVTFQuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXNuJ3QgYWJvdXQgS01TQU4g4oCTIGl0J3Mgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGV2ZW4gYXR0ZW1wdGluZyB0byByZWFkIG1lbW9yeSBpdCdzICpub3QgYWxsb3dlZCogdG8gcmVhZC4gVGhlIHJvb3QgY2F1c2UgaXMgYSBzaXR1YXRpb24gd2hlcmUgeW91IG1pZ2h0IGhhdmUgcmVhZGFibGUgYW5kIHVucmVhZGFibGUgZnJhZ21lbnRzLCBvciBtb3JlIHNwZWNpZmljYWxseSwgaW52YWxpZCBwb2ludGVycy4gSWYgdGhlIGNvZGUgZGlkIHRyeSB0byByZWFkIGZyb20gYW4gdW5yZWFkYWJsZSBmcmFnLCBpdCdkIGNhdXNlIGEgcGFnZSBmYXVsdCwgd2hpY2ggaXMgYSBiaWcgcHJvYmxlbS4gS0FTQU4gd291bGQgcHJvYmFibHkgY2F0Y2ggc29tZSBvZiB0aGVzZSBhcyBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlLCBidXQgYSBzaW1wbGUgdW5yZWFkYWJsZSBtZW1vcnkgYWNjZXNzIGlzIGdvaW5nIHRvIGZhdWx0IHRoZSBwYWdlLCBzbyBLTVNBTiBpc24ndCB0aGUgY29uY2Vybi5cblxuU28sIEkgdGhpbmsgSSd2ZSBnb3QgdGhpcy4gYHNrYl9mcmFnc19yZWFkYWJsZWAgaXMgcmVhbGx5IGp1c3QgYSBzYWZlZ3VhcmQgYWdhaW5zdCBhY2Nlc3NpbmcgdGhvc2UgQ1BVLWluYWNjZXNzaWJsZSBmcmFnbWVudHMuIFNpbmNlIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgYnV0IHdpdGggbWVtb3J5IHRoYXQncyBsaXRlcmFsbHkgKnVucmVhZGFibGUqIGJ5IHRoZSBDUFUsIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGlzIGNvcnJlY3QuIFRoZSBwYXRjaCBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdW5yZWFkYWJsZSBtZW1vcnkgKGUuZy4sIGZyb20gZGV2bWVtIFRDUCksIGF2b2lkaW5nIHBhZ2UgZmF1bHRzLCBhbmQgcHJldmVudGluZyBtaXhpbmcgb2YgcmVhZGFibGUgYW5kIHVucmVhZGFibGUgZnJhZ3MuIFRoZSBrZXJuZWwncyBwYWdlIGZhdWx0IGhhbmRsZXIsIGFsb25nIHdpdGggS0FTQU4sIHdpbGwgc3RpbGwgZnVuY3Rpb24gYXMgZXhwZWN0ZWQgYW5kIGRlYWwgd2l0aCBjYXNlcyB3aGVyZSBtZW1vcnkgaXMgaW1wcm9wZXJseSBhY2Nlc3NlZC4gSSdsbCBzdW1tYXJpemUgdGhlIHJhdGlvbmFsZSB3aXRoIHRoZXNlIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMDowODozNy43NTk5MzE3MzJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgd2l0aCB1bnJlYWRhYmxlIHNrYiBmcmFnbWVudHMgKGUuZy4sIGRldmljZSBtZW1vcnkgVENQIHBheWxvYWRzKSwgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZW0gb3IgbWl4aW5nIHRoZW0gd2l0aCByZWFkYWJsZSBmcmFnbWVudHMuIFRoaXMgaXMgcmVsYXRlZCB0byBwcmV2ZW50aW5nIGtlcm5lbCBwYWdlIGZhdWx0cyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyB0byBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHRoZSBmb2N1cyBvZiB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaW52YWxpZCBhY2Nlc3NlcyB0byB1bm1hcHBlZCBvciB1bnJlYWRhYmxlIG1lbW9yeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaXNzdWVzIHdpdGggdW5yZWFkYWJsZSBza2IgZnJhZ21lbnRzIChlLmcuLCBkZXZpY2UgbWVtb3J5IFRDUCBwYXlsb2FkcyksIHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGVtIG9yIG1peGluZyB0aGVtIHdpdGggcmVhZGFibGUgZnJhZ21lbnRzLiBUaGlzIGlzIHJlbGF0ZWQgdG8gcHJldmVudGluZyBrZXJuZWwgcGFnZSBmYXVsdHMgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgdG8gZGV2aWNlIG1lbW9yeSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIG5vdCB0aGUgZm9jdXMgb2YgdGhpcyBwYXRjaC4gU3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGludmFsaWQgYWNjZXNzZXMgdG8gdW5tYXBwZWQgb3IgdW5yZWFkYWJsZSBtZW1vcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[1] Phase: Succeeded StartedAt: 2026-08-11 20:08:48 +0000 UTC FinishedAt: 2026-08-11 20:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 20:08:48 +0000 UTC FinishedAt: 2026-08-11 20:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2] Phase: Succeeded StartedAt: 2026-08-11 20:08:48 +0000 UTC FinishedAt: 2026-08-11 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 20:08:48 +0000 UTC FinishedAt: 2026-08-11 23:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 20:08:48 +0000 UTC FinishedAt: 2026-08-11 20:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 20:08:48 +0000 UTC FinishedAt: 2026-08-11 20:08:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjtwsf/series-workflowjtwsf-convert-artifact-3556095586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 20:08:59 +0000 UTC FinishedAt: 2026-08-11 20:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 20:08:59 +0000 UTC FinishedAt: 2026-08-11 20:25:15 +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:*a1acffc6-f5c1-4f3c-87f7-6db15c415b0d,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-workflowjtwsf/series-workflowjtwsf-convert-artifact-3556095586/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": "b5c62a45-2cc6-427d-800a-45413adff2e5", "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-workflowjtwsf/series-workflowjtwsf-build-action-3814788640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 20:08:59 +0000 UTC FinishedAt: 2026-08-11 20:25:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a1acffc6-f5c1-4f3c-87f7-6db15c415b0d,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-workflowjtwsf/series-workflowjtwsf-convert-artifact-3556095586/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": "b5c62a45-2cc6-427d-800a-45413adff2e5", "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-workflowjtwsf/series-workflowjtwsf-build-action-3814788640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 20:25:15 +0000 UTC FinishedAt: 2026-08-11 20:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 20:25:15 +0000 UTC FinishedAt: 2026-08-11 20:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 20:25:15 +0000 UTC FinishedAt: 2026-08-11 20:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 20:25:15 +0000 UTC FinishedAt: 2026-08-11 20:25:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjtwsf/series-workflowjtwsf-convert-artifact-479851197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 20:25:25 +0000 UTC FinishedAt: 2026-08-11 20:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 20:25:25 +0000 UTC FinishedAt: 2026-08-11 20:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5c62a45-2cc6-427d-800a-45413adff2e5,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-workflowjtwsf/series-workflowjtwsf-build-action-3814788640/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-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 20:27:17 +0000 UTC FinishedAt: 2026-08-11 20:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 20:27:17 +0000 UTC FinishedAt: 2026-08-11 20:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 20:27:17 +0000 UTC FinishedAt: 2026-08-11 20:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 20:27:17 +0000 UTC FinishedAt: 2026-08-11 20:43:42 +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:*a1acffc6-f5c1-4f3c-87f7-6db15c415b0d,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-workflowjtwsf/series-workflowjtwsf-convert-artifact-479851197/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": "8be132f1-58af-4614-9f5c-742fc984b7c2", "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-workflowjtwsf/series-workflowjtwsf-build-action-1902678553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 20:27:17 +0000 UTC FinishedAt: 2026-08-11 20:43:32 +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:*a1acffc6-f5c1-4f3c-87f7-6db15c415b0d,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-workflowjtwsf/series-workflowjtwsf-convert-artifact-479851197/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": "8be132f1-58af-4614-9f5c-742fc984b7c2", "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-workflowjtwsf/series-workflowjtwsf-build-action-1902678553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 20:43:42 +0000 UTC FinishedAt: 2026-08-11 20:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 20:43:42 +0000 UTC FinishedAt: 2026-08-11 20:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 20:43:42 +0000 UTC FinishedAt: 2026-08-11 20:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 20:43:42 +0000 UTC FinishedAt: 2026-08-11 20:45:37 +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:*8be132f1-58af-4614-9f5c-742fc984b7c2,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-workflowjtwsf/series-workflowjtwsf-build-action-1902678553/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-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 20:45:47 +0000 UTC FinishedAt: 2026-08-11 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 20:45:47 +0000 UTC FinishedAt: 2026-08-11 23:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"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:*b5c62a45-2cc6-427d-800a-45413adff2e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8be132f1-58af-4614-9f5c-742fc984b7c2,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-workflowjtwsf/series-workflowjtwsf-build-action-3814788640/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-workflowjtwsf/series-workflowjtwsf-build-action-1902678553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 20:45:47 +0000 UTC FinishedAt: 2026-08-11 20:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 20:45:47 +0000 UTC FinishedAt: 2026-08-11 20:45:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"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-workflowjtwsf/series-workflowjtwsf-convert-artifact-1119521090/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 20:45:47 +0000 UTC FinishedAt: 2026-08-11 20:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 20:45:47 +0000 UTC FinishedAt: 2026-08-11 20:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 20:45:48 +0000 UTC FinishedAt: 2026-08-11 20:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 20:45:58 +0000 UTC FinishedAt: 2026-08-11 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtwsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"ad81e5d2-1b5b-46c2-8506-8e07e022e46d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 20:45:58 +0000 UTC FinishedAt: 2026-08-11 23:49:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5c62a45-2cc6-427d-800a-45413adff2e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8be132f1-58af-4614-9f5c-742fc984b7c2,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-workflowjtwsf/series-workflowjtwsf-build-action-3814788640/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-workflowjtwsf/series-workflowjtwsf-build-action-1902678553/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-workflowjtwsf/series-workflowjtwsf-convert-artifact-1119521090/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,}