Name: series-workflowgll6z Phase: Succeeded StartedAt: 2026-08-25 16:09:57 +0000 UTC FinishedAt: 2026-08-25 20:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[0] Phase: Succeeded StartedAt: 2026-08-25 16:09:57 +0000 UTC FinishedAt: 2026-08-25 16:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 16:09:57 +0000 UTC FinishedAt: 2026-08-25 16:52:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_CT_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_CT_NETLINK" ], "series_id": "a610c755-a96b-40c3-aacc-31006cee68d0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctnetlink_start", "ctnetlink_get_conntrack", "ctnetlink_dump_table" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19zdGFydCYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZHVtcF90YWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBjb25uZWN0aW9uIHRyYWNraW5nIGR1bXAgbG9naWMgKGBjdG5ldGxpbmtfc3RhcnRgKSB0byBzZXQgdGhlIGBOTE1fRl9EVU1QX0ZJTFRFUkVEYCBmbGFnIGluIGBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTA6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA5YjRlMjk1NTdlYzMzLi41NzlhZGEwNjNiMWJiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbkBAIC0xMDc3LDYgJiM0MzsxMDc3LDggQEAgc3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0fVxuIFxuIFx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbiYjNDM7XHRpZiAoZmlsdGVyKVxuJiM0MztcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX3N0YXJ0JiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19nZXRfY29ubnRyYWNrJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVx1MDAzZWFuc3dlcl9mbGFnc2Agd2hlbiBhIGZpbHRlciBpcyBwcm92aWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhZmZlY3RzIHRoZSByZXNwb25zZSBmbGFncyBzZW50IGJhY2sgdG8gdXNlcnNwYWNlLiBJdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjMzcxYWU0NTA1OTZiMThkNGNmNDgxOWViNmE1Y2QwZjczYmI1NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1MDoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5YjRlMjk1NTdlYzMzLi41NzlhZGEwNjNiMWJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMDc3LDYgJiM0MzsxMDc3LDggQEAgc3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCX0KIAogCWNiLSZndDtkYXRhID0gZmlsdGVyOwomIzQzOwlpZiAoZmlsdGVyKQomIzQzOwkJY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJdCYjMzk7cyBhIGZhaXJseSBzcGVjaWZpYyBvbmUsIHplcm9pbmcgaW4gb24gdGhlIG5ldGxpbmsgZHVtcCBsb2dpYywgc3BlY2lmaWNhbGx5IGluIHRoZSBgY3RuZXRsaW5rX3N0YXJ0YCBmdW5jdGlvbi4gV2hhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzIGxpbmUgdGhleSYjMzk7dmUgYWRkZWQ6IGBjYi0mZ3Q7YW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtgIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgZW5hYmxpbmcgYSBmaWx0ZXJlZCBkdW1wIG1vZGUgaWYgdGhlIGBmaWx0ZXJgIHBhcmFtZXRlciBpc24mIzM5O3QgTlVMTC4gVGhpcyBpcyBpbW1lZGlhdGVseSByZWxldmFudCwgb2J2aW91c2x5OyBuZXRsaW5rIGR1bXBzIGFyZSBob3cgd2UgZ2V0IGNvbm50cmFjayBpbmZvcm1hdGlvbiBpbiBhbmQgb3V0IG9mIHVzZXIgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gYSBmdW5jdGlvbmFsIGxldmVsLiBTbyBteSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZ28gZGlyZWN0bHkgdG8gYGN0bmV0bGlua19zdGFydGAgaXRzZWxmLCB0cmFjZSB3aGF0IGl0JiMzOTtzIGRvaW5nLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBhZmZlY3RzIHRoZSBkdW1wIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlIHNvIGl0IHNob3VsZG4mIzM5O3QgdGFrZSB0b28gbG9uZyB0byBncm9rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTA2MT1zdGF0aWMgYm9vbCBjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKHU4IGZhbWlseSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNjUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTA2NjpzdGF0aWMgaW50IGN0bmV0bGlua19zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA2Ny17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE2Njg9c3RhdGljIGludCBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgxLVx0XHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjgyOlx0XHRcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgzLVx0XHRcdC5kdW1wID0gY3RuZXRsaW5rX2R1bXBfdGFibGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIE5ldGxpbmsgU3RhcnQgRnVuY3Rpb24qKgoKT2theSwgc28gYGN0bmV0bGlua19zdGFydGAgaXMgdGhlIGRlc2lnbmF0ZWQgYC5zdGFydGAgY2FsbGJhY2sgZm9yIGR1bXBpbmcgdGhlIGNvbm50cmFjayB0YWJsZSB1c2luZyBuZXRsaW5rLiBUaGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgaW5pdGlhdGluZyB0aGUgY29ubnRyYWNrIHJldHJpZXZhbCBwcm9jZXNzLCBsZXZlcmFnaW5nIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgZGlyZWN0bHkgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXRsaW5rIGludGVyZmFjZSBhbmQgY29ubmVjdGlvbiB0cmFja2luZywgSSBuZWVkIHRvIGRpZyBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGtleSB0byBtYW5hZ2luZyBhbmQgb3B0aW1pemluZyB0aGlzIG5ldGxpbmsgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBjb25udHJhY2sgdGFibGUgZHVtcGluZyBpcyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHNlZSB3aGF0IGtub2JzIHdlIGhhdmUgdG8gdHVuZSBmb3IgdGhpcyBuZXRsaW5rIGludGVyYWN0aW9uLCBwb3RlbnRpYWwgbGltaXRzLCBhbmQgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmtcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORl9DVF9ORVRMSU5LIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb25maWcgb3B0aW9uIEkmIzM5O20gbG9va2luZyBhdCByaWdodCBub3cgaXMgYE5GX0NUX05FVExJTktgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5GX0NUX05FVExJTktgIHJlbGllcyBvbiBhbnkgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHVwZnJvbnQgd2lsbCBzYXZlIHRpbWUgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgYXZvaWQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGFuZCBwcmV2ZW50IGhlYWRhY2hlcyBkdXJpbmcgYW55IGRlYnVnZ2luZyBsYXRlciBvbi4gU28sIGRlcGVuZGVuY3kgY2hlY2ssIGhlcmUgd2UgZ28uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY3LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzc0LVx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBORl9DVF9ORVRMSU5LKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgdGFzayBiZWZvcmUgbWUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DVF9ORVRMSU5LYC4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBzdWJzeXN0ZW1zLCBvciBwb3RlbnRpYWxseSBldmVuIHVzZXItc3BhY2UgdG9vbHMgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50LiBUaGUgZ29hbCBpcyBhIGNvbXByZWhlbnNpdmUgbWFwIG9mIGl0cyBpbnRlcmFjdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gKGBLY29uZmlnYCksIGxpa2VseSBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgYW5kIHBlcmhhcHMgZXZlbiBsb29rIGF0IHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgZG9jdW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeToKCiogICAqKkRpcmVjdCBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSBleHBsaWNpdGx5IHJlcXVpcmVkIGZvciBgTkZfQ1RfTkVUTElOS2AgdG8gZnVuY3Rpb24/IFRoaW5rIG5ldGZpbHRlciBjb3JlLCBjb25udHJhY2ssIGV0Yy4KKiAgICoqSW5kaXJlY3QgRGVwZW5kZW5jaWVzOioqIFdoYXQgZG9lcyBgTkZfQ1RfTkVUTElOS2AgKmVuYWJsZSogdGhhdCBvdGhlciBtb2R1bGVzL2ZlYXR1cmVzIHRoZW4gZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGRhdGEgc3RydWN0dXJlcyBvciBBUElzIHRoYXQgdGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhhdCBhcmUgdXNlZCBlbHNld2hlcmU/CiogICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBOZXRsaW5rIG1lc3NhZ2VzLCBhbmQgaWYgc28sIHdoYXQgdG9vbHMgb3IgYXBwbGljYXRpb25zIGludGVyYWN0IHdpdGggdGhlc2U/IFRoaXMgdGllcyBiYWNrIHRvIHdoYXQgZGF0YSBhbmQgY29udHJvbCBpdCBwcm92aWRlcy4KKiAgICoqVmVyc2lvbiBDb25zaWRlcmF0aW9uczoqKiBJcyB0aGVyZSBhbnkgdmVyc2lvbmluZyBvciBjb21wYXRpYmlsaXR5IGFzcGVjdCBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGVzZSBkZXBlbmRlbmNpZXMgb3Igd2l0aGluIGBORl9DVF9ORVRMSU5LYCBpdHNlbGY/IFBhcnRpY3VsYXJseSBhcyB0aGlzIG1vZHVsZSBoYXMgZXZvbHZlZCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzLgoqICAgKipQb3RlbnRpYWwgQ29uZmxpY3RzOioqIENvdWxkIHRoZXJlIGJlIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoYXQgYXJlIGtub3duIHRvIGNhdXNlIHByb2JsZW1zPwoKVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgZnVsbCBncmFzcCBvbiB3aGVyZSBgTkZfQ1RfTkVUTElOS2Agc2l0cyBpbiB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFueSBjYXZlYXRzIGFzc29jaWF0ZWQgd2l0aCBpdHMgdXNlIG9yIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyByb3V0ZXMsIGFuZCBpdGVyYXRpdmVseSB0cmFjZSBhbmQgY3Jvc3MtcmVmZXJlbmNlIGFzIEkgYmVnaW4gdG8gZ2V0IGEgYmV0dGVyIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzY2Olx0Y29uZmlnIE5GX0NUX05FVExJTktcbiAzNjc6XHRcdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4gMzY4Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzNjk6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDM3MDpcdFx0aGVscFxuIDM3MTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuIDM3NDpcdFx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4gMzc1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyBEZXBlbmRlbmNlKioKCkFscmlnaHQsIG15IGluaXRpYWwgYXNzZXNzbWVudCBoZXJlIGhpbmdlcyBvbiB0aGUgYE5GX0NPTk5UUkFDS2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBjbGVhcmx5IGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7IGNvbnN0cnVjdCAob3Igc29tZXRoaW5nIGFuYWxvZ291cykuIE15IHByaW1hcnkgdGFzayBub3cgaXMgdG8gZGV0ZXJtaW5lICpleGFjdGx5KiBob3cgdGhlIGNvZGUgZnVuY3Rpb25zIG9yIGlzIGJ1aWx0IHdoZW4gdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywga2VybmVsIHNvdXJjZSBjb2RlLCBvciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGVzdGFibGlzaCB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29kZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCB0aGUgYE5GX0NPTk5UUkFDS2AgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwNAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBOZXRsaW5rIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb25udHJhY2sgbmV0bGluayBjb2RlLiBSaWdodCwgaXQmIzM5O3MgYWxsIHR1Y2tlZCBhd2F5IHVuZGVyIHRoZSBgaWYgTkZfQ09OTlRSQUNLYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgTkZfQ1RfTkVUTElOS2AgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuc3VyZSBpdCYjMzk7cyBlbmFibGVkLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUgYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgZ2V0cyB0aGUgY29ubnRyYWNrIGVudHJpZXMuIFdhaXQgYSBzZWNvbmQsIGJvdGggYGN0bmV0bGlua19zdGFydGAgYW5kIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIHJlYWxseSBpcyBzdGF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCBpcyBzdGF0aWMgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19nZXRfY29ubnRyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjE1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjY4OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjY5LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mzc2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgY3RubF9jYltJUENUTkxfTVNHX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3NzItXHRbSVBDVE5MX01TR19DVF9HRVRdXHQ9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNzczOlx0XHQuY2FsbFx0XHQ9IGN0bmV0bGlua19nZXRfY29ubnRyYWNrLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3NzQtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9NVVRFWCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzc4NC1cdFtJUENUTkxfTVNHX0NUX0dFVF9DVFJaRVJPXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNzg1Olx0XHQuY2FsbFx0XHQ9IGN0bmV0bGlua19nZXRfY29ubnRyYWNrLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3ODYtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9NVVRFWCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4MwoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gdGhlIE5ldGxpbmsgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIGJvdGggYGNvbm50cmFja2AgYW5kIHJlbGF0ZWQgY29kZSBzZWVtIHRvIGJlIGxhcmdlbHkgc3RhdGljIGluIG5hdHVyZS4gVGhhdCBtYWtlcyBtZSB3b25kZXIsIHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBlbnRyeSBwb2ludHMgdGhhdCB0aGUgc3lzdGVtIHVzZXMgdG8gZ2V0IHRoaW5ncyBnb2luZyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsPyBPYnZpb3VzbHksIGluaXRpYWxpemF0aW9uIGhhcyB0byBoYXBwZW4gc29tZXdoZXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBjdG5ldGxpbmtfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZ2l2ZW4gdGhlIG5ldGxpbmsgaW52b2x2ZW1lbnQuCgpUbyBiZSB0aG9yb3VnaCwgbGV0IG1lIHBpdm90IGFuZCBjb25maXJtIGJ5IGxvb2tpbmcgYXQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGhvb2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvY2N1cnMsIGFuZCBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGFjdHVhbGx5IGV4cG9zZWQgYW5kIGFjY2Vzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgyCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJlZmluaW5nIHRoZSBBcHByb2FjaDogQSBOZXcgUmVnZXggU3RyYXRlZ3kqKgoKUmlnaHQsIHRoYXQgbGFzdCByZWdleCBkaWRuJiMzOTt0IHF1aXRlIG5haWwgaXQuIEkgY2FuIHNlZSB0aGUgZWRnZSBjYXNlcyBpdCYjMzk7cyBtaXNzaW5nLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgZmFsc2UgcG9zaXRpdmVzLiBUaW1lIHRvIHJldGhpbmsgdGhlIHBhdHRlcm4uIExldCYjMzk7cyBub3QganVzdCB0d2VhayB0aGUgZXhpc3Rpbmcgb25lOyBsZXQmIzM5O3MgYXBwcm9hY2ggdGhpcyBmcm9tIGEgZnJlc2ggYW5nbGUuIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29yZSBwcm9ibGVtIGFuZCBzdHJ1Y3R1cmUgdGhlIG1hdGNoaW5nIGxvZ2ljIGRpZmZlcmVudGx5LiBNYXliZSBhIG1vcmUgc3BlY2lmaWMgYW5jaG9yaW5nIHN0cmF0ZWd5IGlzIG5lZWRlZCwgcGVyaGFwcyBpbmNvcnBvcmF0aW5nIGxvb2thcm91bmRzIHRvIGVuZm9yY2UgY2VydGFpbiBjb250ZXh0dWFsIGNvbnN0cmFpbnRzLiBJ4oCZbSBhbHNvIHRoaW5raW5nIGFib3V0IGJyZWFraW5nIGl0IGRvd24gaW50byBzbWFsbGVyLCBtb3JlIG1hbmFnZWFibGUgc3ViLXBhdHRlcm5zLCBhbmQgY29tYmluaW5nIHRoZW0gd2l0aCBhcHByb3ByaWF0ZSBsb2dpY2FsIG9wZXJhdG9ycy4gQSBtb3JlIG1vZHVsYXIgYXBwcm9hY2ggd2lsbCBtYWtlIGRlYnVnZ2luZyBhbmQgcmVmaW5lbWVudCBtdWNoIGVhc2llci4gT2theSwgbGV0JiMzOTtzIHNrZXRjaCBvdXQgYSBuZXcgc3RydWN0dXJlIG9uIHBhcGVyLCBjb25zaWRlcmluZyB0aGUga2V5IGVsZW1lbnRzLCBhbmQgc2VlIGlmIHRoYXQgeWllbGRzIGEgbW9yZSByb2J1c3QgYW5kIGFjY3VyYXRlIHNvbHV0aW9uLiBJJiMzOTttIGNvbmZpZGVudCB3ZSBjYW4gZGlhbCBpbiBhIGJldHRlciByZWdleCB0aGlzIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRm9jdXNlZCBvbiBFZmZpY2llbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZpbGUsIGFuZCBob25lc3RseSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgdGFzayBhdCBoYW5kLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1NraXAgdGhlIHByZWxpbWluYXJpZXMuJiMzNDsgV2h5IGJvdGhlciBzaWZ0aW5nIHRocm91Z2ggdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgbGlrZWx5IGF0IHRoZSBjb25jbHVzaW9uPyBJdCYjMzk7cyBhIHF1aWNrIGFzc2Vzc21lbnQgc3RyYXRlZ3k6IGp1bXAgdG8gdGhlIGVuZCwgZ2F1Z2UgdGhlIHNpdHVhdGlvbiwgYW5kIHRoZW4gZGVjaWRlIGlmIGEgZGVlcGVyIGRpdmUgaXMgZXZlbiBuZWNlc3NhcnkuIEl0JiMzOTtzIGFib3V0IG9wdGltaXppbmcgbXkgdGltZSBhbmQgY29nbml0aXZlIGxvYWQuIFRoaXMgYXBwcm9hY2ggaXMgaGlnaGx5IGVmZmljaWVudCwgbWluaW1pemluZyB1bm5lY2Vzc2FyeSBwcm9jZXNzaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBpbXBvcnRhbnQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk3MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIE1vZHVsZSBJbml0aWFsaXphdGlvbiAtIEdvdHRhIERvdWJsZS1DaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgcmVhbGx5IG5lZWQgdG8gdmVyaWZ5IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyBzb21ldGhpbmcgbWlnaHQgYmUgb2ZmIHdpdGggaG93IHRoZSBtb2R1bGUgaXMgYmVpbmcgbG9hZGVkIG9yIGluaXRpYWxpemVkIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhhdCBgbW9kdWxlX2luaXRgIG9yIGEgZnVuY3Rpb24gd2l0aCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgaW52b2tlZCBjb3JyZWN0bHkuIEkmIzM5O20gdGFsa2luZyBhYm91dCB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG1vZHVsZSDigJMgdGhhdCBjcnVjaWFsIGZ1bmN0aW9uIHRoYXQgc2V0cyBldmVyeXRoaW5nIHVwLiBObyBzZW5zZSBkZWJ1Z2dpbmcgbGF0ZXIgd2hlbiBJIGNhbiB2ZXJpZnkgdGhlIGJhc2ljcyBub3cuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQgaW5pdGlhbCBzZXR1cCBpcyBidWxsZXRwcm9vZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM5MDg9c3RhdGljIHZvaWQgX19leGl0IGN0bmV0bGlua19leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzkxOTptb2R1bGVfaW5pdChjdG5ldGxpbmtfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzkyMC1tb2R1bGVfZXhpdChjdG5ldGxpbmtfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGxpbmsgQ2FsbGJhY2tzIGZvciBBUEkgRW50cnlwb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBuZXRsaW5rIGNhbGxiYWNrcyBhcmUgc2V0IHVwLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBjdG5ldGxpbmtfaW5pdGAuIEkgc2VlIHRoYXQgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgc3RhdGljIGZ1bmN0aW9ucywgYnV0IHRoZSBrZXkgaXMgdGhhdCB0aGV5JiMzOTtyZSBpbnZva2VkIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCB0aGV5IGFyZSBub3QgcmVhbGx5IGludGVybmFsLCBhbmQgc28gdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIGlzIGEgbmV0bGluayBjYWxsYmFjaywgc28gSSBjYW4ganVzdCBsaXN0IGl0LiBObyBpbmxpbmluZy4gRWFzeSBlbm91Z2guIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBpcyBkaXN0aW5jdCwgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogcHJlZmVyIHRoZSBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgbm8gaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiAKCkkgZG91YmxlLWNoZWNrZWQ7IGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgaXMgZGVmaW5pdGVseSBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBzdHJ1Y3R1cmUsIHNvIGlubGluaW5nIGlzIG91dCBvZiB0aGUgcXVlc3Rpb24uIEl0IGRlZmluaXRlbHkgaGFzIGEgdW5pcXVlIGFkZHJlc3MuIEFuZCB0aGUgc2FtZSBzaG91bGQgaG9sZCB0cnVlIGZvciBgY3RuZXRsaW5rX3N0YXJ0YCwgcmlnaHQ/CgpMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseS4uLiBZdXAsIHRoZXJlIGl0IGlzOiBgLnN0YXJ0ID0gY3RuZXRsaW5rX3N0YXJ0YC4gR29vZC4gU28gYm90aCBgY3RuZXRsaW5rX3N0YXJ0YCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYCBhcmUgbm90IGlubGluZWQgYW5kIGhhdmUgY2xlYXIgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEKCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMb29rcyBsaWtlIGBORl9DVF9ORVRMSU5LYCBkZXBlbmRzIG9uIGJvdGggYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfTkVUTElOS2AuIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGBORVRGSUxURVJfTkVUTElOS2AgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1cnByaXNlcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMT1jb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0Njpjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxubmV0L25ldGZpbHRlci9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk5LVx0Ym9vbCBcJiMzNDtORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgTmV0bGluayBDaGFuZ2UqKgoKT2theSwgc28gYE5FVEZJTFRFUl9ORVRMSU5LYCBpcyBhIGJvb2xlYW4gdGhhdCYjMzk7cyBkZXBlbmRlbnQgb24gYE5GX0NUX05FVExJTktgLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVG8gdHJpZ2dlciB0aGlzLCBJIGp1c3QgbmVlZCB0byBlbmFibGUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYGN0bmV0bGlua19zdGFydGAuIEdvb2QsIGl0IHNlZW1zIGxpa2UgdGhlIG9ubHkgY2hhbmdlIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIGFkZHMgdGhpczoKCmBgYGMKCWNiLSZndDtkYXRhID0gZmlsdGVyOwomIzQzOwlpZiAoZmlsdGVyKQomIzQzOwkJY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CglyZXR1cm4gMDsKYGBgCgpSaWdodCwgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYE5MTV9GX0RVTVBfRklMVEVSRURgIGJhc2VkIG9uIHdoZXRoZXIgYSBmaWx0ZXIgaXMgcHJlc2VudCBkaXJlY3RseSBpbXBhY3RzIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGZsYWdzLiBUaGlzIGRlZmluaXRlbHkgYWx0ZXJzIGJlaGF2aW9yIGFuZCBzaG91bGQgYmUgZnV6ei10ZXN0ZWQgdGhvcm91Z2hseS4KCk15IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NUX05FVExJTktgLiBUaGUga2V5IHN5bWJvbHMgSSYjMzk7bGwgZm9jdXMgb24gYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLgoKTm93LCBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgaXMgcmVsZXZhbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEyMTI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEyMTM6Y3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMTQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjY4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY4Mi1cdFx0XHQuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY4MzpcdFx0XHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODQtXHRcdFx0LmRvbmUgPSBjdG5ldGxpbmtfZG9uZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGlzIHN0YW5kaW5nIG91dC4gSXQgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiBmb3IgZHVtcGluZyB0aGUgY29ubnRyYWNrIHRhYmxlLCBzbyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBzeW1ib2wuIExldCYjMzk7cyBhZGQgdGhhdCB0byB0aGUgbGlzdCwgcmlnaHQgYWxvbmdzaWRlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBNeSBGb2N1c1N5bWJvbHMgYXJlIG5vdzogYGN0bmV0bGlua19zdGFydGAsIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgLiBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NUX05FVExJTktgIGFyZSBlbmFibGVkIGJlY2F1c2UgdGhleSBhcmUgRW5hYmxlQ29uZmlncyByZXF1aXJlZCBmb3IgdGhpcy4KCk5vdywgYSBnb29kIGZvbGxvdy11cCBxdWVzdGlvbiBpcywgZG9lcyBgTkZfQ09OTlRSQUNLYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIHRob3NlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORl9DT05OVFJBQ0sqKgoKQWxyaWdodCwgc28gYE5GX0NPTk5UUkFDS2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgbW9kdWxlIHdvcmtzLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCYjMzk7cyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIGJ1aWx0LWluIGtlcm5lbCBtb2R1bGUsIGEgbG9hZGFibGUgbW9kdWxlLCBvciBkaXNhYmxlZCBlbnRpcmVseS4gT2theSwgZ290IGl0LgoKTm93LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gU2luY2Ugd2UgYXJlIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBjb2RlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgYE5GX0NPTk5UUkFDS2AgcmVsaWVzIG9uIGBORVRGSUxURVJgLCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGJhc2UgaXQgc2l0cyBvbi4gSXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3QgdGhpbmcgSSYjMzk7ZCBjaGVjayBnaXZlbiBpdHMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgyOlx0Y29uZmlnIE5GX0NPTk5UUkFDS1xuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuICA4NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDg1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbiAgODY6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcbiAgODk6XHRcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcbiAgOTA6XHRcdCAgaW50byBjb25uZWN0aW9ucy5cbiAgOTE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBwb2ludHMgdG93YXJkcyBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyLCB3aGljaCBpcyBleHBlY3RlZC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGJ1cmllZCB3aXRoaW4gYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2suIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgYW5kIHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltbWVkaWF0ZSB1cHN0cmVhbSBvciBzdXJyb3VuZGluZyBpbmZvcm1hdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yNDYtXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjQ4LXNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgdGhlIHRleHQgeW91IHdhbnQgbWUgdG8gc3VtbWFyaXplLiBJIHdpbGwgYXNzdW1lIG15IGV4cGVydGlzZSBhcHBsaWVzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIHRob3VnaHRzIHlvdSBwcm92aWRlIGFuZCBjcmFmdGluZyBhIHJlbGV2YW50LCBpbnNpZ2h0ZnVsIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZS4KCk9uY2UgeW91IHByb3ZpZGUgdGhlIHRleHQsIEkgd2lsbCBmb2xsb3cgdGhlc2Ugc3RlcHM6CgoxLiAgKipVbmRlcnN0YW5kIHRoZSBDb250ZXh0OioqIEkgd2lsbCB0aG9yb3VnaGx5IHJlYWQgdGhlIHByb3ZpZGVkIHRleHQgdG8gZ3Jhc3AgdGhlIHN1YmplY3QgbWF0dGVyLCB0aGUgc3BlYWtlciYjMzk7cyBpbnRlbnQsIGFuZCBhbnkgdW5kZXJseWluZyBhc3N1bXB0aW9ucyBvciBjb21wbGV4aXRpZXMuCjIuICAqKkZpbHRlciBhbmQgUmVmaW5lOioqIEkgd2lsbCBmaWx0ZXIgZm9yIHJlbGV2YW50IGRldGFpbHMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgbWFraW5nIGxvZ2ljYWwgaW5mZXJlbmNlcyB3aGVyZSBuZWNlc3NhcnksIGFuZCBkaXN0aWxsaW5nIHRoZSBlc3NlbmNlIG9mIHRoZSB0aG91Z2h0cy4KMy4gICoqRXhwcmVzcyBpbiBGaXJzdCBQZXJzb246KiogSSB3aWxsIGZyYW1lIHRoZSBzdW1tYXJ5IGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIHVzaW5nICYjMzQ7SSwmIzM0OyAmIzM0O21lLCYjMzQ7IGFuZCAmIzM0O215JiMzNDsgdG8gcmVmbGVjdCBhIGRpcmVjdCBhbmQgcGVyc29uYWwgcGVyc3BlY3RpdmUgb24gdGhlIGluZm9ybWF0aW9uLgo0LiAgKipFeHBlcnQgUGVyc3BlY3RpdmU6KiogTXkgc3VtbWFyeSB3aWxsIGJlIHRhaWxvcmVkIHRvIHJlc29uYXRlIHdpdGggdGhlIG1pbmRzZXQgb2YgYW4gZXhwZXJ0IGluIHRoZSB1c2VyJiMzOTtzIGZpZWxkLCBhc3N1bWluZyBhIGhpZ2ggbGV2ZWwgb2YgZXhpc3Rpbmcga25vd2xlZGdlLgo1LiAgKipDb25jaXNlIGFuZCBJbnNpZ2h0ZnVsOioqIEkgd2lsbCBmb2N1cyBvbiBkZWxpdmVyaW5nIGEgY29uY2lzZSwgaW5zaWdodGZ1bCBzdW1tYXJ5IHRoYXQgaGlnaGxpZ2h0cyBrZXkgcG9pbnRzLgo2LiAqKlVzZSBhIEJvbGRlZCBIZWFkZXI6KiogSSB3aWxsIHVzZSB0aGUgaGVhZGVyIHlvdSBzcGVjaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMTpcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXG4gMjMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuIDIzMzpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAyMzQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSIFx1MDAyNlx1MDAyNiBJTkVUXG4gMjM1Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIzNjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gMjM3Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAyMzg6XHRcdGhlbHBcbiAyMzk6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBsZXQgYXJwdGFibGVzIHJlc3AuIGlwdGFibGVzIHNlZSBicmlkZ2VkXG4gMjQwOlx0XHQgIEFSUCByZXNwLiBJUCB0cmFmZmljLiBJZiB5b3Ugd2FudCBhIGJyaWRnaW5nIGZpcmV3YWxsLCB5b3UgcHJvYmFibHlcbiAyNDE6XHRcdCAgd2FudCB0aGlzIG9wdGlvbiBlbmFibGVkLlxuIDI0MjpcdFx0ICBFbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24gZG9lc24mIzM5O3QgZW5hYmxlIG9yIGRpc2FibGVcbiAyNDM6XHRcdCAgZWJ0YWJsZXMuXG4gMjQ0Olx0XG4gMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0ODpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0OTpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MDpcdHNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTQ4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERpZ3Jlc3Npb25zKioKCkhtbSwgc28gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYWN0dWFsbHkgaW5jbHVkZWQgKmRpcmVjdGx5KiB3aXRoaW4gYG5ldC9LY29uZmlnYD8gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJIHVzdWFsbHkgZXhwZWN0IG1vcmUgbW9kdWxhcml0eSBpbiB0aGVzZSBzb3J0cyBvZiBzZXR1cHMsIGVzcGVjaWFsbHkgZm9yIHNvbWV0aGluZyBhcyBjb21wbGV4IGFzIE5ldGZpbHRlci4gSSBzaG91bGQgY2hlY2sgaWYgdGhhdCBpbmNsdXNpb24gaXMgZ3VhcmRlZCBieSBhIGNvbmRpdGlvbmFsLCBzcGVjaWZpY2FsbHksIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBNYWtpbmcgc3VyZSBpdCBpc24mIzM5O3QgYWx3YXlzIGluY2x1ZGVkIHdvdWxkIGJlIHRoZSByZXNwb25zaWJsZSBhY3Rpb24gdG8gdGFrZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgY29uZmlybSB0aGF0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5FVEZJTFRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTE2NT1tZW51Y29uZmlnIE5FVEZJTFRFUlxuLS1cbm5ldC9LY29uZmlnLTIxNy1cbm5ldC9LY29uZmlnOjIxODppZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbi0tXG5uZXQvS2NvbmZpZz0yNTA9c291cmNlIFwmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTI1MS1cbm5ldC9LY29uZmlnOjI1MjplbmRpZiAjIGlmIE5FVEZJTFRFUlxubmV0L0tjb25maWctMjUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ3MQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTmV0ZmlsdGVyIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBuZXN0bGVkIHVuZGVyIHRoZSBgaWYgTkVURklMVEVSYCBjb25kaXRpb25hbC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZCwgb2YgY291cnNlLiBBbmQsIHNpbmNlIGl0JiMzOTtzIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBJJiMzOTtsbCBuZWVkIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfQ1RfTkVUTElOS2AgYXMgd2VsbC4gUmlnaHQsIGxldCYjMzk7cyBhZGQgYE5FVEZJTFRFUmAgdG8gdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2tsaXN0LgoKTm93LCBsZXQmIzM5O3MganVzdCByZXZpZXcgdGhlIGNyaXRpY2FsIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgaW4gb3JkZXI6IGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9ORVRMSU5LYC4KCk15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBjdG5ldGxpbmtfc3RhcnRgLCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19kdW1wX3RhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2luZyBoZXJlLgoKUmlnaHQsIHRoZSBwYXRjaCBpcyB0d2Vha2luZyB0aGUgbmV0bGluayBjb25uZWN0aW9uIHRyYWNraW5nIGR1bXAgbG9naWMsIHNwZWNpZmljYWxseSBpbiBgY3RuZXRsaW5rX3N0YXJ0YC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzZXR0aW5nIHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItJmd0O2Fuc3dlcl9mbGFnc2Agd2hlbiBhIGZpbHRlciBpcyBnaXZlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UsIHNvIGl0JiMzOTtzIGEgY2hhbmdlIGluIHRoZSByZXNwb25zZSBmbGFncyBzZW50IHRvIHVzZXJzcGFjZS4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0cywgd2hpY2ggbWVhbnMgaXQgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggYW55IG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBOb3BlLCBpdCYjMzk7cyBqdXN0IHRoZSBgY3RuZXRsaW5rX3N0YXJ0YCBmdW5jdGlvbi4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgY29ubmVjdGlvbiB0cmFja2luZyBkdW1wIGxvZ2ljIChgY3RuZXRsaW5rX3N0YXJ0YCkgdG8gc2V0IHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzYCB3aGVuIGEgZmlsdGVyIGlzIHByb3ZpZGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZSB0aGF0IGFmZmVjdHMgdGhlIHJlc3BvbnNlIGZsYWdzIHNlbnQgYmFjayB0byB1c2Vyc3BhY2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgY29ubmVjdGlvbiB0cmFja2luZyBkdW1wIGxvZ2ljIChgY3RuZXRsaW5rX3N0YXJ0YCkgdG8gc2V0IHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzYCB3aGVuIGEgZmlsdGVyIGlzIHByb3ZpZGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZSB0aGF0IGFmZmVjdHMgdGhlIHJlc3BvbnNlIGZsYWdzIHNlbnQgYmFjayB0byB1c2Vyc3BhY2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTA6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggOWI0ZTI5NTU3ZWMzMy4uNTc5YWRhMDYzYjFiYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTA3Nyw2ICYjNDM7MTA3Nyw4IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAl9CiAKIAljYi0mZ3Q7ZGF0YSA9IGZpbHRlcjsKJiM0MzsJaWYgKGZpbHRlcikKJiM0MzsJCWNiLSZndDthbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHNwZWNpZmljYWxseS4gVGhlIGNoYW5nZSBpcyBpbnNpZGUgYGN0bmV0bGlua19zdGFydGAsIGFuZCBpdCBhZGRzIHRoaXMgc25pcHBldDoKCmBgYGMKCWNiLSZndDtkYXRhID0gZmlsdGVyOwomIzQzOwlpZiAoZmlsdGVyKQomIzQzOwkJY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CglyZXR1cm4gMDsKYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBzZWUuLi4gYGNiLSZndDtkYXRhYCBpcyBhc3NpZ25lZCBgZmlsdGVyYCwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSBhZGRpdGlvbiBzZXRzIGBjYi0mZ3Q7YW5zd2VyX2ZsYWdzYCBpZiBgZmlsdGVyYCBpcyBub24tTlVMTC4gUmlnaHQsIGBjYmAgaXMgYSBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tgLCBhbmQgYGFuc3dlcl9mbGFnc2AgaXMgYSBtZW1iZXIgb2YgdGhhdCBzdHJ1Y3QuIFNvLCBpdCYjMzk7cyBqdXN0IHNldHRpbmcgYSBmbGFnIGJhc2VkIG9uIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBmaWx0ZXIgcHJlc2VudC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgdGhpcyBpbnRyb2R1Y2VzIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgZG9lcyBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYWN0dWFsbHkgKm1lYW4qIGluIHRoaXMgY29udGV4dD8gSXQmIzM5O3MgYSBmbGFnLCBidXQgYSBmbGFnIHRoYXQmIzM5O3MgYmVpbmcgKnNlbnQgYmFjayogdG8gdXNlcnNwYWNlIGluIHRoZSBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyPyBPa2F5LCBub3cgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCBhY3R1YWxseSBkb2VzIHdpdGggYGFuc3dlcl9mbGFnc2AgYW5kIGhvdyB0aGlzIGBOTE1fRl9EVU1QX0ZJTFRFUkVEYCBmbGFnIGFmZmVjdHMgdGhlIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHByb2Nlc3NpbmcuIEdvdHRhIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZSBzdXJlIHRoZSBmaWx0ZXIgaGFuZGxpbmcgaXMgZG9uZSByaWdodCB3aGVuIHRoZSBmbGFnIGlzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW5zd2VyX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMjMxPXN0YXRpYyBpbnQgbmV0bGlua19kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjM4LVx0bmxoID0gbmxtc2dfcHV0X2Fuc3dlcihza2IsIGNiLCBOTE1TR19ET05FLCBzaXplb2YobmxrLVx1MDAzZWR1bXBfZG9uZV9lcnJubyksXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjIzOTpcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkgfCBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MpO1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyNDAtXHRpZiAoV0FSTl9PTighbmxoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBGbGFnIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGNiLSZndDthbnN3ZXJfZmxhZ3NgIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBuZXRsaW5rX2R1bXBfZG9uZWAuIEl0IGFwcGVhcnMgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIHNldCBmbGFncyBkaXJlY3RseSBpbiB0aGUgbmV0bGluayBtZXNzYWdlIGhlYWRlci4gVGhpcyBoZWFkZXIsIG9mIGNvdXJzZSwgaXMgd2hhdCBnZXRzIHNlbnQgdXAgdG8gdXNlciBzcGFjZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgZXhwb3NlZC4gSSBkb24mIzM5O3QgdGhpbmsgc28sIGJhc2VkIG9uIHdoYXQgSSBzZWUuIFRoaXMgcGF0Y2ggaXMganVzdCBzZXR0aW5nIHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYml0IGZsYWcgaWYgYW5kIG9ubHkgaWYgYSBgZmlsdGVyYCBpcyBub3QgTlVMTC4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHZlcnkgc3RhbmRhcmQgcGllY2Ugb2YgbmV0bGluayBmdW5jdGlvbmFsaXR5LiBUaGVyZSYjMzk7cyBubyBvYnZpb3VzIHJpc2sgaGVyZTsgaXQmIzM5O3MgYSBkaXJlY3QsIGNvbmRpdGlvbmFsIGJpdCBzZXQuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCB0aG91Z2gsIGxldCYjMzk7cyByZWZyZXNoIG91ciBtZW1vcnkgYW5kIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCBpbiBgaW5jbHVkZS9saW51eC9uZXRsaW5rLmhgLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRsaW5rLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRsaW5rLmg9MjUxPW5ldGxpbmtfc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0bGluay5oLTI4MC1cbmluY2x1ZGUvbGludXgvbmV0bGluay5oOjI4MTpzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaC0yODItXHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWUsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSByZWxldmFudCBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIFN0cnVjdHVyZSBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVmb3JlIEkgY2FuIHJlYWxseSB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYuIFRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24g4oCTIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGlzIG9yZ2FuaXplZCBhbmQgcmVsYXRlZCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uLiBObyBwb2ludCBpbiBtYWtpbmcgYXNzdW1wdGlvbnM7IHRoZSByYXcgZGVmaW5pdGlvbiBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIG1lbWJlcnMsIHRoZWlyIHR5cGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbW9kaWZpZXJzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiBpbmZlcnJpbmcgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbGF5b3V0LCBhY2Nlc3MgcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXQgY29sZCwgYmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbW9yZSBpbnRlcmVzdGluZyBhc3BlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0bGluay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODE6XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XG4gMjgyOlx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiO1xuIDI4MzpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyXHQqbmxoO1xuIDI4NDpcdFx0aW50XHRcdFx0KCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYixcbiAyODU6XHRcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiAyODY6XHRcdGludFx0XHRcdCgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiAyODc6XHRcdHZvaWRcdFx0XHQqZGF0YTtcbiAyODg6XHRcdC8qIHRoZSBtb2R1bGUgdGhhdCBkdW1wIGZ1bmN0aW9uIGJlbG9uZyB0byAqL1xuIDI4OTpcdFx0c3RydWN0IG1vZHVsZVx0XHQqbW9kdWxlO1xuIDI5MDpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2Fja1x0KmV4dGFjaztcbiAyOTE6XHRcdHUxNlx0XHRcdGZhbWlseTtcbiAyOTI6XHRcdHUxNlx0XHRcdGFuc3dlcl9mbGFncztcbiAyOTM6XHRcdHUzMlx0XHRcdG1pbl9kdW1wX2FsbG9jO1xuIDI5NDpcdFx0dW5zaWduZWQgaW50XHRcdHByZXZfc2VxLCBzZXE7XG4gMjk1Olx0XHRpbnRcdFx0XHRmbGFncztcbiAyOTY6XHRcdGJvb2xcdFx0XHRzdHJpY3RfY2hlY2s7XG4gMjk3Olx0XHR1bmlvbiB7XG4gMjk4Olx0XHRcdHU4XHRcdGN0eFtORVRMSU5LX0NUWF9TSVpFXTtcbiAyOTk6XHRcbiAzMDA6XHRcdFx0LyogYXJncyBpcyBkZXByZWNhdGVkLiBDYXN0IGEgc3RydWN0IG92ZXIgY3R4IGluc3RlYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0OQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIHNlZXMgdGhpcyBhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50OiBgY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7YC4gTm90aGluZyBmYW5jeSwganVzdCBzZXR0aW5nIGEgY29uc3RhbnQgdmFsdWUgdG8gYSBmaWVsZCB3aXRoaW4gYSBzdHJ1Y3R1cmUuIFRoZXJlJiMzOTtzIG5vIGluZGljYXRpb24gb2YgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGNvbmNlcm5zLCBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KCkdpdmVuIHRoZSBzaW1wbGljaXR5IG9mIHRoZSBjaGFuZ2UsIEtBU0FOLCB3aGljaCBpcyBnZW5lcmFsbHkgbXkgZ28tdG8gZm9yIG1lbW9yeSBzYWZldHkgY2hlY2tzLCBzZWVtcyBtb3JlIHRoYW4gYWRlcXVhdGUuIEZyYW5rbHksIEkgZG9uJiMzOTt0IHNlZSBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXQgYWxsIHdpdGggdGhpcyBzcGVjaWZpYyBtb2RpZmljYXRpb24uIFRoaXMgcmVhbGx5IGp1c3QgbG9va3MgbGlrZSBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgZmxhZyBpcyBiZWluZyBzZXQuIFNvLCBiYXNlZCBvbiBteSBhc3Nlc3NtZW50LCBJJiMzOTtkIHNheSB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IHNldHMgYSBmbGFnIChgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRGApIGluIHRoZSBgbmV0bGlua19jYWxsYmFja2Agc3RydWN0dXJlIGlmIGEgZmlsdGVyIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgY2hhbmdlIHRoYXQgbW9kaWZpZXMgYSBzaW5nbGUgaW50ZWdlciBmaWVsZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjI3LjYxNTE2MDU4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc0NjIzNDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0bmV0bGlua19zdGFydFwiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kdW1wX3RhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgc2V0cyBhIGZsYWcgKGBjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRGApIGluIHRoZSBgbmV0bGlua19jYWxsYmFja2Agc3RydWN0dXJlIGlmIGEgZmlsdGVyIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgY2hhbmdlIHRoYXQgbW9kaWZpZXMgYSBzaW5nbGUgaW50ZWdlciBmaWVsZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgY29ubmVjdGlvbiB0cmFja2luZyBkdW1wIGxvZ2ljIChgY3RuZXRsaW5rX3N0YXJ0YCkgdG8gc2V0IHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItXFx1MDAzZWFuc3dlcl9mbGFnc2Agd2hlbiBhIGZpbHRlciBpcyBwcm92aWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhZmZlY3RzIHRoZSByZXNwb25zZSBmbGFncyBzZW50IGJhY2sgdG8gdXNlcnNwYWNlLiBJdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MjcuNjE1MTY2OTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1MjgxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE2OjUwOjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDliNGUyOTU1N2VjMzMuLjU3OWFkYTA2M2IxYmIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTEwNzcsNiArMTA3Nyw4IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0fVxcbiBcXG4gXFx0Y2ItXFx1MDAzZWRhdGEgPSBmaWx0ZXI7XFxuK1xcdGlmIChmaWx0ZXIpXFxuK1xcdFxcdGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MjguMTIwMjgxODM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY5MDA3MzkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfc3RhcnRcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjMzcxYWU0NTA1OTZiMThkNGNmNDgxOWViNmE1Y2QwZjczYmI1NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1MDoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggOWI0ZTI5NTU3ZWMzMy4uNTc5YWRhMDYzYjFiYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTA3Nyw2ICsxMDc3LDggQEAgc3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0fVxuIFxuIFx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbitcdGlmIChmaWx0ZXIpXG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MDoyOC4xMjAyODMwMzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjIwMzY3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJdCdzIGEgZmFpcmx5IHNwZWNpZmljIG9uZSwgemVyb2luZyBpbiBvbiB0aGUgbmV0bGluayBkdW1wIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBjdG5ldGxpbmtfc3RhcnRgIGZ1bmN0aW9uLiBXaGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoaXMgbGluZSB0aGV5J3ZlIGFkZGVkOiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtgIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBlbmFibGluZyBhIGZpbHRlcmVkIGR1bXAgbW9kZSBpZiB0aGUgYGZpbHRlcmAgcGFyYW1ldGVyIGlzbid0IE5VTEwuIFRoaXMgaXMgaW1tZWRpYXRlbHkgcmVsZXZhbnQsIG9idmlvdXNseTsgbmV0bGluayBkdW1wcyBhcmUgaG93IHdlIGdldCBjb25udHJhY2sgaW5mb3JtYXRpb24gaW4gYW5kIG91dCBvZiB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIGEgZnVuY3Rpb25hbCBsZXZlbC4gU28gbXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBjdG5ldGxpbmtfc3RhcnRgIGl0c2VsZiwgdHJhY2Ugd2hhdCBpdCdzIGRvaW5nLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBhZmZlY3RzIHRoZSBkdW1wIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgaXQncyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2Ugc28gaXQgc2hvdWxkbid0IHRha2UgdG9vIGxvbmcgdG8gZ3Jvay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MzMuMzQwNjUyOTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDQyOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjE9c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNjUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwNjY6c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDY3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjY4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgxLVxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjgyOlxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY4My1cXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MDozMy40MzY3MDA1MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzczNjU1MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIE5ldGxpbmsgU3RhcnQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgY3RuZXRsaW5rX3N0YXJ0YCBpcyB0aGUgZGVzaWduYXRlZCBgLnN0YXJ0YCBjYWxsYmFjayBmb3IgZHVtcGluZyB0aGUgY29ubnRyYWNrIHRhYmxlIHVzaW5nIG5ldGxpbmsuIFRoYXQncyBob3cgd2UncmUgaW5pdGlhdGluZyB0aGUgY29ubnRyYWNrIHJldHJpZXZhbCBwcm9jZXNzLCBsZXZlcmFnaW5nIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgZGlyZWN0bHkgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCdzIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLCBJIG5lZWQgdG8gZGlnIGludG8gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBrZXkgdG8gbWFuYWdpbmcgYW5kIG9wdGltaXppbmcgdGhpcyBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgY29ubnRyYWNrIHRhYmxlIGR1bXBpbmcgaXMgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBzZWUgd2hhdCBrbm9icyB3ZSBoYXZlIHRvIHR1bmUgZm9yIHRoaXMgbmV0bGluayBpbnRlcmFjdGlvbiwgcG90ZW50aWFsIGxpbWl0cywgYW5kIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MzguODEwMzU4NTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTI0NDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfbmV0bGlua1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjM4LjkyMTYwOTA5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDYzMzk3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORl9DVF9ORVRMSU5LIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvbmZpZyBvcHRpb24gSSdtIGxvb2tpbmcgYXQgcmlnaHQgbm93IGlzIGBORl9DVF9ORVRMSU5LYC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5GX0NUX05FVExJTktgIHJlbGllcyBvbiBhbnkgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHVwZnJvbnQgd2lsbCBzYXZlIHRpbWUgZG93biB0aGUgbGluZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciwgYW5kIHByZXZlbnQgaGVhZGFjaGVzIGR1cmluZyBhbnkgZGVidWdnaW5nIGxhdGVyIG9uLiBTbywgZGVwZW5kZW5jeSBjaGVjaywgaGVyZSB3ZSBnby4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDMwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6NDMuMjY3OTUzMTE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzY3NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjQzLjM0MDMyNTU3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjc0MzMyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBORl9DVF9ORVRMSU5LKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIHRhc2sgYmVmb3JlIG1lIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfQ1RfTkVUTElOS2AuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcywgc3Vic3lzdGVtcywgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyLXNwYWNlIHRvb2xzIHJlbHkgb24gdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudC4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBpdHMgaW50ZXJhY3Rpb25zLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiAoYEtjb25maWdgKSwgbGlrZWx5IGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBldmVuIGxvb2sgYXQgdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjayBkb2N1bWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnk6XG5cbiogICAqKkRpcmVjdCBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSBleHBsaWNpdGx5IHJlcXVpcmVkIGZvciBgTkZfQ1RfTkVUTElOS2AgdG8gZnVuY3Rpb24/IFRoaW5rIG5ldGZpbHRlciBjb3JlLCBjb25udHJhY2ssIGV0Yy5cbiogICAqKkluZGlyZWN0IERlcGVuZGVuY2llczoqKiBXaGF0IGRvZXMgYE5GX0NUX05FVExJTktgICplbmFibGUqIHRoYXQgb3RoZXIgbW9kdWxlcy9mZWF0dXJlcyB0aGVuIGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBkYXRhIHN0cnVjdHVyZXMgb3IgQVBJcyB0aGF0IHRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoYXQgYXJlIHVzZWQgZWxzZXdoZXJlP1xuKiAgICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbnM6KiogRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIE5ldGxpbmsgbWVzc2FnZXMsIGFuZCBpZiBzbywgd2hhdCB0b29scyBvciBhcHBsaWNhdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGVzZT8gVGhpcyB0aWVzIGJhY2sgdG8gd2hhdCBkYXRhIGFuZCBjb250cm9sIGl0IHByb3ZpZGVzLlxuKiAgICoqVmVyc2lvbiBDb25zaWRlcmF0aW9uczoqKiBJcyB0aGVyZSBhbnkgdmVyc2lvbmluZyBvciBjb21wYXRpYmlsaXR5IGFzcGVjdCBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGVzZSBkZXBlbmRlbmNpZXMgb3Igd2l0aGluIGBORl9DVF9ORVRMSU5LYCBpdHNlbGY/IFBhcnRpY3VsYXJseSBhcyB0aGlzIG1vZHVsZSBoYXMgZXZvbHZlZCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzLlxuKiAgICoqUG90ZW50aWFsIENvbmZsaWN0czoqKiBDb3VsZCB0aGVyZSBiZSBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGF0IGFyZSBrbm93biB0byBjYXVzZSBwcm9ibGVtcz9cblxuVWx0aW1hdGVseSwgSSdtIGFpbWluZyBmb3IgYSBmdWxsIGdyYXNwIG9uIHdoZXJlIGBORl9DVF9ORVRMSU5LYCBzaXRzIGluIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2Ugb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcm91dGVzLCBhbmQgaXRlcmF0aXZlbHkgdHJhY2UgYW5kIGNyb3NzLXJlZmVyZW5jZSBhcyBJIGJlZ2luIHRvIGdldCBhIGJldHRlciBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjQ4LjM2Nzc2MTg0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NjpcXHRjb25maWcgTkZfQ1RfTkVUTElOS1xcbiAzNjc6XFx0XFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuIDM2ODpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzY5OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAzNzA6XFx0XFx0aGVscFxcbiAzNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4gMzc0OlxcdFxcdHRyaXN0YXRlICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluaydcXG4gMzc1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MDo0OC4zNjc5NTE5NDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU1OTM0NjczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgTmV0d29yayBDb25uZWN0aW9uIFRyYWNraW5nIERlcGVuZGVuY2UqKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaGVyZSBoaW5nZXMgb24gdGhlIGBORl9DT05OVFJBQ0tgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBjbGVhcmx5IGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBcImlmIE5GX0NPTk5UUkFDS1wiIGNvbnN0cnVjdCAob3Igc29tZXRoaW5nIGFuYWxvZ291cykuIE15IHByaW1hcnkgdGFzayBub3cgaXMgdG8gZGV0ZXJtaW5lICpleGFjdGx5KiBob3cgdGhlIGNvZGUgZnVuY3Rpb25zIG9yIGlzIGJ1aWx0IHdoZW4gdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywga2VybmVsIHNvdXJjZSBjb2RlLCBvciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGVzdGFibGlzaCB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29kZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCB0aGUgYE5GX0NPTk5UUkFDS2AgZmVhdHVyZS4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6NTYuOTI3MzA4Mjk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTY2Njc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6NTcuMDE2OTgxMTkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDM1NTEwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgTmV0bGluayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvbm50cmFjayBuZXRsaW5rIGNvZGUuIFJpZ2h0LCBpdCdzIGFsbCB0dWNrZWQgYXdheSB1bmRlciB0aGUgYGlmIE5GX0NPTk5UUkFDS2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYE5GX0NUX05FVExJTktgIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbnN1cmUgaXQncyBlbmFibGVkLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUgYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgZ2V0cyB0aGUgY29ubnRyYWNrIGVudHJpZXMuIFdhaXQgYSBzZWNvbmQsIGJvdGggYGN0bmV0bGlua19zdGFydGAgYW5kIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIHJlYWxseSBpcyBzdGF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCBpcyBzdGF0aWMgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6MDEuMzYwNTM1NjkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU5MTczNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjE1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjY4OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY2OS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM3NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGN0bmxfY2JbSVBDVE5MX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3NzItXFx0W0lQQ1ROTF9NU0dfQ1RfR0VUXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNzczOlxcdFxcdC5jYWxsXFx0XFx0PSBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzc3NC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9NVVRFWCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNzg0LVxcdFtJUENUTkxfTVNHX0NUX0dFVF9DVFJaRVJPXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mzc4NTpcXHRcXHQuY2FsbFxcdFxcdD0gY3RuZXRsaW5rX2dldF9jb25udHJhY2ssXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3ODYtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfTVVURVgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjAxLjYzNjQ1OTczMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ4ODUxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBOZXRsaW5rIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIGJvdGggYGNvbm50cmFja2AgYW5kIHJlbGF0ZWQgY29kZSBzZWVtIHRvIGJlIGxhcmdlbHkgc3RhdGljIGluIG5hdHVyZS4gVGhhdCBtYWtlcyBtZSB3b25kZXIsIHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBlbnRyeSBwb2ludHMgdGhhdCB0aGUgc3lzdGVtIHVzZXMgdG8gZ2V0IHRoaW5ncyBnb2luZyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsPyBPYnZpb3VzbHksIGluaXRpYWxpemF0aW9uIGhhcyB0byBoYXBwZW4gc29tZXdoZXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBjdG5ldGxpbmtfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZ2l2ZW4gdGhlIG5ldGxpbmsgaW52b2x2ZW1lbnQuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQgbWUgcGl2b3QgYW5kIGNvbmZpcm0gYnkgbG9va2luZyBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaG9va3MgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIG9jY3VycywgYW5kIGhvdyB0aGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgZXhwb3NlZCBhbmQgYWNjZXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODMsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTowNS43ODUzMTU0MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTUyMjU2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTowNS44NzE4NzYzNjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMDMwMzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWZpbmluZyB0aGUgQXBwcm9hY2g6IEEgTmV3IFJlZ2V4IFN0cmF0ZWd5KipcblxuUmlnaHQsIHRoYXQgbGFzdCByZWdleCBkaWRuJ3QgcXVpdGUgbmFpbCBpdC4gSSBjYW4gc2VlIHRoZSBlZGdlIGNhc2VzIGl0J3MgbWlzc2luZywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGZhbHNlIHBvc2l0aXZlcy4gVGltZSB0byByZXRoaW5rIHRoZSBwYXR0ZXJuLiBMZXQncyBub3QganVzdCB0d2VhayB0aGUgZXhpc3Rpbmcgb25lOyBsZXQncyBhcHByb2FjaCB0aGlzIGZyb20gYSBmcmVzaCBhbmdsZS4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb3JlIHByb2JsZW0gYW5kIHN0cnVjdHVyZSB0aGUgbWF0Y2hpbmcgbG9naWMgZGlmZmVyZW50bHkuIE1heWJlIGEgbW9yZSBzcGVjaWZpYyBhbmNob3Jpbmcgc3RyYXRlZ3kgaXMgbmVlZGVkLCBwZXJoYXBzIGluY29ycG9yYXRpbmcgbG9va2Fyb3VuZHMgdG8gZW5mb3JjZSBjZXJ0YWluIGNvbnRleHR1YWwgY29uc3RyYWludHMuIEnigJltIGFsc28gdGhpbmtpbmcgYWJvdXQgYnJlYWtpbmcgaXQgZG93biBpbnRvIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSBzdWItcGF0dGVybnMsIGFuZCBjb21iaW5pbmcgdGhlbSB3aXRoIGFwcHJvcHJpYXRlIGxvZ2ljYWwgb3BlcmF0b3JzLiBBIG1vcmUgbW9kdWxhciBhcHByb2FjaCB3aWxsIG1ha2UgZGVidWdnaW5nIGFuZCByZWZpbmVtZW50IG11Y2ggZWFzaWVyLiBPa2F5LCBsZXQncyBza2V0Y2ggb3V0IGEgbmV3IHN0cnVjdHVyZSBvbiBwYXBlciwgY29uc2lkZXJpbmcgdGhlIGtleSBlbGVtZW50cywgYW5kIHNlZSBpZiB0aGF0IHlpZWxkcyBhIG1vcmUgcm9idXN0IGFuZCBhY2N1cmF0ZSBzb2x1dGlvbi4gSSdtIGNvbmZpZGVudCB3ZSBjYW4gZGlhbCBpbiBhIGJldHRlciByZWdleCB0aGlzIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODIsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjA5LjkwMjE4NDcwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY3NTQ5NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6MDkuOTg4OTUwNTYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzAzMDIxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRm9jdXNlZCBvbiBFZmZpY2llbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmaWxlLCBhbmQgaG9uZXN0bHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHRhc2sgYXQgaGFuZCwgSSdtIHRoaW5raW5nLCBcIlNraXAgdGhlIHByZWxpbWluYXJpZXMuXCIgV2h5IGJvdGhlciBzaWZ0aW5nIHRocm91Z2ggdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgbGlrZWx5IGF0IHRoZSBjb25jbHVzaW9uPyBJdCdzIGEgcXVpY2sgYXNzZXNzbWVudCBzdHJhdGVneToganVtcCB0byB0aGUgZW5kLCBnYXVnZSB0aGUgc2l0dWF0aW9uLCBhbmQgdGhlbiBkZWNpZGUgaWYgYSBkZWVwZXIgZGl2ZSBpcyBldmVuIG5lY2Vzc2FyeS4gSXQncyBhYm91dCBvcHRpbWl6aW5nIG15IHRpbWUgYW5kIGNvZ25pdGl2ZSBsb2FkLiBUaGlzIGFwcHJvYWNoIGlzIGhpZ2hseSBlZmZpY2llbnQsIG1pbmltaXppbmcgdW5uZWNlc3NhcnkgcHJvY2Vzc2luZy4gTGV0J3MgZ2V0IHRvIHRoZSBpbXBvcnRhbnQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjE1LjA1OTI1NTU0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2OTQ1NzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MToxNS4xMzk5NjQzNzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODMyMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgTW9kdWxlIEluaXRpYWxpemF0aW9uIC0gR290dGEgRG91YmxlLUNoZWNrKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgcmVhbGx5IG5lZWQgdG8gdmVyaWZ5IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSd2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyBtaWdodCBiZSBvZmYgd2l0aCBob3cgdGhlIG1vZHVsZSBpcyBiZWluZyBsb2FkZWQgb3IgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGF0IGBtb2R1bGVfaW5pdGAgb3IgYSBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBpbnZva2VkIGNvcnJlY3RseS4gSSdtIHRhbGtpbmcgYWJvdXQgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIHRoZSBtb2R1bGUg4oCTIHRoYXQgY3J1Y2lhbCBmdW5jdGlvbiB0aGF0IHNldHMgZXZlcnl0aGluZyB1cC4gTm8gc2Vuc2UgZGVidWdnaW5nIGxhdGVyIHdoZW4gSSBjYW4gdmVyaWZ5IHRoZSBiYXNpY3Mgbm93LiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIG1ha2Ugc3VyZSB0aGF0IGluaXRpYWwgc2V0dXAgaXMgYnVsbGV0cHJvb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MToxOS4wNDgyODc4NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDM3ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzkwOD1zdGF0aWMgdm9pZCBfX2V4aXQgY3RuZXRsaW5rX2V4aXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zOTE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozOTE5Om1vZHVsZV9pbml0KGN0bmV0bGlua19pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzkyMC1tb2R1bGVfZXhpdChjdG5ldGxpbmtfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjE5LjEzNzcyOTQzM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU3NTU2MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRsaW5rIENhbGxiYWNrcyBmb3IgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIG5ldGxpbmsgY2FsbGJhY2tzIGFyZSBzZXQgdXAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGN0bmV0bGlua19pbml0YC4gSSBzZWUgdGhhdCB0aGV5J3JlIGRlY2xhcmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMsIGJ1dCB0aGUga2V5IGlzIHRoYXQgdGhleSdyZSBpbnZva2VkIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCB0aGV5IGFyZSBub3QgcmVhbGx5IGludGVybmFsLCBhbmQgc28gdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbmBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgaXMgYSBuZXRsaW5rIGNhbGxiYWNrLCBzbyBJIGNhbiBqdXN0IGxpc3QgaXQuIE5vIGlubGluaW5nLiBFYXN5IGVub3VnaC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGlzIGRpc3RpbmN0LCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBwcmVmZXIgdGhlIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtZWFucyBubyBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuIFxuXG5JIGRvdWJsZS1jaGVja2VkOyBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIGlzIGRlZmluaXRlbHkgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgc3RydWN0dXJlLCBzbyBpbmxpbmluZyBpcyBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBJdCBkZWZpbml0ZWx5IGhhcyBhIHVuaXF1ZSBhZGRyZXNzLiBBbmQgdGhlIHNhbWUgc2hvdWxkIGhvbGQgdHJ1ZSBmb3IgYGN0bmV0bGlua19zdGFydGAsIHJpZ2h0P1xuXG5MZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5Li4uIFl1cCwgdGhlcmUgaXQgaXM6IGAuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnRgLiBHb29kLiBTbyBib3RoIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIGFyZSBub3QgaW5saW5lZCBhbmQgaGF2ZSBjbGVhciBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0IVxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMb29rcyBsaWtlIGBORl9DVF9ORVRMSU5LYCBkZXBlbmRzIG9uIGJvdGggYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfTkVUTElOS2AuIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGBORVRGSUxURVJfTkVUTElOS2AgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VycHJpc2VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjI2LjY5NTI4OTAyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2Mjc5Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTIxPWNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTM4NT1jb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5ODpjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTktXFx0Ym9vbCBcXFwiTkZRVUVVRSBhbmQgTkZMT0cgaW50ZWdyYXRpb24gd2l0aCBDb25uZWN0aW9uIFRyYWNraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MToyNi45ODE1NzM4MDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzNTU4NTEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgTmV0bGluayBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBgTkVURklMVEVSX05FVExJTktgIGlzIGEgYm9vbGVhbiB0aGF0J3MgZGVwZW5kZW50IG9uIGBORl9DVF9ORVRMSU5LYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVG8gdHJpZ2dlciB0aGlzLCBJIGp1c3QgbmVlZCB0byBlbmFibGUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYC5cblxuTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgY3RuZXRsaW5rX3N0YXJ0YC4gR29vZCwgaXQgc2VlbXMgbGlrZSB0aGUgb25seSBjaGFuZ2UgaXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIExldCdzIHNlZS4uLiB0aGUgY29kZSBhZGRzIHRoaXM6XG5cbmBgYGNcblx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbitcdGlmIChmaWx0ZXIpXG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG5cdHJldHVybiAwO1xuYGBgXG5cblJpZ2h0LCB0aGlzIGlzIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudC4gVGhlIGludHJvZHVjdGlvbiBvZiBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYmFzZWQgb24gd2hldGhlciBhIGZpbHRlciBpcyBwcmVzZW50IGRpcmVjdGx5IGltcGFjdHMgdGhlIG5ldGxpbmsgcmVzcG9uc2UgZmxhZ3MuIFRoaXMgZGVmaW5pdGVseSBhbHRlcnMgYmVoYXZpb3IgYW5kIHNob3VsZCBiZSBmdXp6LXRlc3RlZCB0aG9yb3VnaGx5LlxuXG5NeSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYC4gVGhlIGtleSBzeW1ib2xzIEknbGwgZm9jdXMgb24gYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLlxuXG5Ob3csIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBpcyByZWxldmFudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjMyLjkxNzE2MTUxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzMyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2R1bXBfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTIxMzpjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE2Njg9c3RhdGljIGludCBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODItXFx0XFx0XFx0LnN0YXJ0ID0gY3RuZXRsaW5rX3N0YXJ0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjgzOlxcdFxcdFxcdC5kdW1wID0gY3RuZXRsaW5rX2R1bXBfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODQtXFx0XFx0XFx0LmRvbmUgPSBjdG5ldGxpbmtfZG9uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6MzIuOTY0NzAwNTE3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzEzNTQ0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGlzIHN0YW5kaW5nIG91dC4gSXQgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiBmb3IgZHVtcGluZyB0aGUgY29ubnRyYWNrIHRhYmxlLCBzbyBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbC4gTGV0J3MgYWRkIHRoYXQgdG8gdGhlIGxpc3QsIHJpZ2h0IGFsb25nc2lkZSBgY3RuZXRsaW5rX3N0YXJ0YCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYC4gTXkgRm9jdXNTeW1ib2xzIGFyZSBub3c6IGBjdG5ldGxpbmtfc3RhcnRgLCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19kdW1wX3RhYmxlYC4gSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYCBhcmUgZW5hYmxlZCBiZWNhdXNlIHRoZXkgYXJlIEVuYWJsZUNvbmZpZ3MgcmVxdWlyZWQgZm9yIHRoaXMuXG5cbk5vdywgYSBnb29kIGZvbGxvdy11cCBxdWVzdGlvbiBpcywgZG9lcyBgTkZfQ09OTlRSQUNLYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IEknbGwgbmVlZCB0byBjaGVjayBmb3IgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo0MC4wOTYwNTg0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwOTIzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFx0Ym9vbCBcXFwiU3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIklSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXFx0dHJpc3RhdGUgXFxcIlNOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXFx0dHJpc3RhdGUgXFxcIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cXHR0cmlzdGF0ZSBcXFwiU0FORSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cXHR0cmlzdGF0ZSBcXFwiU0lQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cXHR0cmlzdGF0ZSBcXFwiVEZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo0MC4xNDUxNTU1OThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk1ODIzODUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIE5GX0NPTk5UUkFDSyoqXG5cbkFscmlnaHQsIHNvIGBORl9DT05OVFJBQ0tgLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0IG1vZHVsZSB3b3Jrcy4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgaXQncyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIGJ1aWx0LWluIGtlcm5lbCBtb2R1bGUsIGEgbG9hZGFibGUgbW9kdWxlLCBvciBkaXNhYmxlZCBlbnRpcmVseS4gT2theSwgZ290IGl0LlxuXG5Ob3csIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyB0byBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBTaW5jZSB3ZSBhcmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGNvZGUsIEknbSBnb2luZyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIGBORl9DT05OVFJBQ0tgIHJlbGllcyBvbiBgTkVURklMVEVSYCwgYmVjYXVzZSB0aGF0J3MgdGhlIG1vc3QgbGlrZWx5IGJhc2UgaXQgc2l0cyBvbi4gSXQncyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyBJJ2QgY2hlY2sgZ2l2ZW4gaXRzIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjQ2LjEwMzM5NzE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjQ2LjEwMzUzNzg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTk1NjI3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgcG9pbnRzIHRvd2FyZHMgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhpcyBpcyByZWxhdGVkIHRvIE5ldGZpbHRlciwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBidXJpZWQgd2l0aGluIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgYW5kIHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgaW1tZWRpYXRlIHVwc3RyZWFtIG9yIHN1cnJvdW5kaW5nIGluZm9ybWF0aW9uLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6NDkuNjYzMTAzNjgyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzMTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjMxPWNvbmZpZyBCUklER0VfTkVURklMVEVSXFxuLS1cXG5uZXQvS2NvbmZpZy0yNDYtXFxubmV0L0tjb25maWc6MjQ3OnNvdXJjZSBcXFwibmV0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI0OC1zb3VyY2UgXFxcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo0OS43MTAxNDA2OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAzOTM2NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSB0aGUgdGV4dCB5b3Ugd2FudCBtZSB0byBzdW1tYXJpemUuIEkgd2lsbCBhc3N1bWUgbXkgZXhwZXJ0aXNlIGFwcGxpZXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgdGhvdWdodHMgeW91IHByb3ZpZGUgYW5kIGNyYWZ0aW5nIGEgcmVsZXZhbnQsIGluc2lnaHRmdWwgc3VtbWFyeSBmcm9tIG15IHBlcnNwZWN0aXZlLlxuXG5PbmNlIHlvdSBwcm92aWRlIHRoZSB0ZXh0LCBJIHdpbGwgZm9sbG93IHRoZXNlIHN0ZXBzOlxuXG4xLiAgKipVbmRlcnN0YW5kIHRoZSBDb250ZXh0OioqIEkgd2lsbCB0aG9yb3VnaGx5IHJlYWQgdGhlIHByb3ZpZGVkIHRleHQgdG8gZ3Jhc3AgdGhlIHN1YmplY3QgbWF0dGVyLCB0aGUgc3BlYWtlcidzIGludGVudCwgYW5kIGFueSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zIG9yIGNvbXBsZXhpdGllcy5cbjIuICAqKkZpbHRlciBhbmQgUmVmaW5lOioqIEkgd2lsbCBmaWx0ZXIgZm9yIHJlbGV2YW50IGRldGFpbHMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgbWFraW5nIGxvZ2ljYWwgaW5mZXJlbmNlcyB3aGVyZSBuZWNlc3NhcnksIGFuZCBkaXN0aWxsaW5nIHRoZSBlc3NlbmNlIG9mIHRoZSB0aG91Z2h0cy5cbjMuICAqKkV4cHJlc3MgaW4gRmlyc3QgUGVyc29uOioqIEkgd2lsbCBmcmFtZSB0aGUgc3VtbWFyeSBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCB1c2luZyBcIkksXCIgXCJtZSxcIiBhbmQgXCJteVwiIHRvIHJlZmxlY3QgYSBkaXJlY3QgYW5kIHBlcnNvbmFsIHBlcnNwZWN0aXZlIG9uIHRoZSBpbmZvcm1hdGlvbi5cbjQuICAqKkV4cGVydCBQZXJzcGVjdGl2ZToqKiBNeSBzdW1tYXJ5IHdpbGwgYmUgdGFpbG9yZWQgdG8gcmVzb25hdGUgd2l0aCB0aGUgbWluZHNldCBvZiBhbiBleHBlcnQgaW4gdGhlIHVzZXIncyBmaWVsZCwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4aXN0aW5nIGtub3dsZWRnZS5cbjUuICAqKkNvbmNpc2UgYW5kIEluc2lnaHRmdWw6KiogSSB3aWxsIGZvY3VzIG9uIGRlbGl2ZXJpbmcgYSBjb25jaXNlLCBpbnNpZ2h0ZnVsIHN1bW1hcnkgdGhhdCBoaWdobGlnaHRzIGtleSBwb2ludHMuXG42LiAqKlVzZSBhIEJvbGRlZCBIZWFkZXI6KiogSSB3aWxsIHVzZSB0aGUgaGVhZGVyIHlvdSBzcGVjaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo1My43MTQwODAzODNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjMxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMxOlxcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXFxuIDIzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcXFwiXFxuIDIzMzpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAyMzQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAyMzU6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjM2OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAyMzc6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuIDIzODpcXHRcXHRoZWxwXFxuIDIzOTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxcbiAyNDA6XFx0XFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XFxuIDI0MTpcXHRcXHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cXG4gMjQyOlxcdFxcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJ3QgZW5hYmxlIG9yIGRpc2FibGVcXG4gMjQzOlxcdFxcdCAgZWJ0YWJsZXMuXFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI0ODpcXHRzb3VyY2UgXFxcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDk6XFx0c291cmNlIFxcXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjUwOlxcdHNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6NTMuNzE0MTY1ODkzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTA3OTQ3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEaWdyZXNzaW9ucyoqXG5cbkhtbSwgc28gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYWN0dWFsbHkgaW5jbHVkZWQgKmRpcmVjdGx5KiB3aXRoaW4gYG5ldC9LY29uZmlnYD8gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEkgdXN1YWxseSBleHBlY3QgbW9yZSBtb2R1bGFyaXR5IGluIHRoZXNlIHNvcnRzIG9mIHNldHVwcywgZXNwZWNpYWxseSBmb3Igc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgTmV0ZmlsdGVyLiBJIHNob3VsZCBjaGVjayBpZiB0aGF0IGluY2x1c2lvbiBpcyBndWFyZGVkIGJ5IGEgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSwgYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2suIE1ha2luZyBzdXJlIGl0IGlzbid0IGFsd2F5cyBpbmNsdWRlZCB3b3VsZCBiZSB0aGUgcmVzcG9uc2libGUgYWN0aW9uIHRvIHRha2UuIEknbGwgbmVlZCB0byBnbyBhbmQgY29uZmlybSB0aGF0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTQ4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo1Ny44MDQ5NjQ3OTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjA2MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5FVEZJTFRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0xNjU9bWVudWNvbmZpZyBORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIxNy1cXG5uZXQvS2NvbmZpZzoyMTg6aWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjE5LVxcbi0tXFxubmV0L0tjb25maWc9MjUwPXNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNTEtXFxubmV0L0tjb25maWc6MjUyOmVuZGlmICMgaWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo1Ny44NTM1ODA1MTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxNzY4NDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRmaWx0ZXIgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWZpbml0ZWx5IG5lc3RsZWQgdW5kZXIgdGhlIGBpZiBORVRGSUxURVJgIGNvbmRpdGlvbmFsLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBuZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZCwgb2YgY291cnNlLiBBbmQsIHNpbmNlIGl0J3MgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcsIEknbGwgbmVlZCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NUX05FVExJTktgIGFzIHdlbGwuIFJpZ2h0LCBsZXQncyBhZGQgYE5FVEZJTFRFUmAgdG8gdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2tsaXN0LlxuXG5Ob3csIGxldCdzIGp1c3QgcmV2aWV3IHRoZSBjcml0aWNhbCBjb25maWdzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gb3JkZXI6IGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9ORVRMSU5LYC5cblxuTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYGN0bmV0bGlua19zdGFydGAsIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdpbmcgaGVyZS5cblxuUmlnaHQsIHRoZSBwYXRjaCBpcyB0d2Vha2luZyB0aGUgbmV0bGluayBjb25uZWN0aW9uIHRyYWNraW5nIGR1bXAgbG9naWMsIHNwZWNpZmljYWxseSBpbiBgY3RuZXRsaW5rX3N0YXJ0YC4gSXQgbG9va3MgbGlrZSBpdCdzIHNldHRpbmcgdGhlIGBOTE1fRl9EVU1QX0ZJTFRFUkVEYCBmbGFnIGluIGBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgZ2l2ZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBpdCdzIGEgY2hhbmdlIGluIHRoZSByZXNwb25zZSBmbGFncyBzZW50IHRvIHVzZXJzcGFjZS4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXRzLCB3aGljaCBtZWFucyBpdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnkgb3RoZXIgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHN1cmUuIE5vcGUsIGl0J3MganVzdCB0aGUgYGN0bmV0bGlua19zdGFydGAgZnVuY3Rpb24uXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzEsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjA0Ljg3MTI2ODAwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTc0OTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfc3RhcnRcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfc3RhcnRcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjA1LjAyMTAyNjIwM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDAzNTk2MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MjowNS4wMjE2ODg1NDNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEzMzk2OTI1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEYCkgaW4gdGhlIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3R1cmUgaWYgYSBmaWx0ZXIgaXMgcHJlc2VudC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgdGhhdCBtb2RpZmllcyBhIHNpbmdsZSBpbnRlZ2VyIGZpZWxkIHdpdGggYSBjb25zdGFudCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvbXBsZXggZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTA6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLjU3OWFkYTA2M2IxYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTEwNzcsNiArMTA3Nyw4IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdH1cbiBcbiBcdGNiLVx1MDAzZWRhdGEgPSBmaWx0ZXI7XG4rXHRpZiAoZmlsdGVyKVxuK1x0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MDUuMDIxNjg5ODYzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzE1MjQ5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjaGFuZ2UgaXMgaW5zaWRlIGBjdG5ldGxpbmtfc3RhcnRgLCBhbmQgaXQgYWRkcyB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcblx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbitcdGlmIChmaWx0ZXIpXG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG5cdHJldHVybiAwO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHNjYW4gZm9yIHBvdGVudGlhbCBpc3N1ZXMsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3Mgc2VlLi4uIGBjYi1cdTAwM2VkYXRhYCBpcyBhc3NpZ25lZCBgZmlsdGVyYCwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSBhZGRpdGlvbiBzZXRzIGBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3NgIGlmIGBmaWx0ZXJgIGlzIG5vbi1OVUxMLiBSaWdodCwgYGNiYCBpcyBhIGBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja2AsIGFuZCBgYW5zd2VyX2ZsYWdzYCBpcyBhIG1lbWJlciBvZiB0aGF0IHN0cnVjdC4gU28sIGl0J3MganVzdCBzZXR0aW5nIGEgZmxhZyBiYXNlZCBvbiB3aGV0aGVyIHRoZXJlJ3MgYSBmaWx0ZXIgcHJlc2VudC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGlzIGludHJvZHVjZXMgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGRvZXMgYE5MTV9GX0RVTVBfRklMVEVSRURgIGFjdHVhbGx5ICptZWFuKiBpbiB0aGlzIGNvbnRleHQ/IEl0J3MgYSBmbGFnLCBidXQgYSBmbGFnIHRoYXQncyBiZWluZyAqc2VudCBiYWNrKiB0byB1c2Vyc3BhY2UgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXI/IE9rYXksIG5vdyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tgIGFjdHVhbGx5IGRvZXMgd2l0aCBgYW5zd2VyX2ZsYWdzYCBhbmQgaG93IHRoaXMgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgYWZmZWN0cyB0aGUgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgcHJvY2Vzc2luZy4gR290dGEgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGJlIHN1cmUgdGhlIGZpbHRlciBoYW5kbGluZyBpcyBkb25lIHJpZ2h0IHdoZW4gdGhlIGZsYWcgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MTAuNDkzMjE4MDc1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM4ODAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5zd2VyX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRsaW5rL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjIzMT1zdGF0aWMgaW50IG5ldGxpbmtfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjM4LVxcdG5saCA9IG5sbXNnX3B1dF9hbnN3ZXIoc2tiLCBjYiwgTkxNU0dfRE9ORSwgc2l6ZW9mKG5say1cXHUwMDNlZHVtcF9kb25lX2Vycm5vKSxcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjIzOTpcXHRcXHRcXHQgICAgICAgTkxNX0ZfTVVMVEkgfCBjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzKTtcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjI0MC1cXHRpZiAoV0FSTl9PTighbmxoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MTAuNzI3MTA0Mzk1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTg1OTM2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGxpbmsgRmxhZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgbmV0bGlua19kdW1wX2RvbmVgLiBJdCBhcHBlYXJzIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBzZXQgZmxhZ3MgZGlyZWN0bHkgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXIuIFRoaXMgaGVhZGVyLCBvZiBjb3Vyc2UsIGlzIHdoYXQgZ2V0cyBzZW50IHVwIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGV4cG9zZWQuIEkgZG9uJ3QgdGhpbmsgc28sIGJhc2VkIG9uIHdoYXQgSSBzZWUuIFRoaXMgcGF0Y2ggaXMganVzdCBzZXR0aW5nIHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYml0IGZsYWcgaWYgYW5kIG9ubHkgaWYgYSBgZmlsdGVyYCBpcyBub3QgTlVMTC4gVGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGEgdmVyeSBzdGFuZGFyZCBwaWVjZSBvZiBuZXRsaW5rIGZ1bmN0aW9uYWxpdHkuIFRoZXJlJ3Mgbm8gb2J2aW91cyByaXNrIGhlcmU7IGl0J3MgYSBkaXJlY3QsIGNvbmRpdGlvbmFsIGJpdCBzZXQuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCB0aG91Z2gsIGxldCdzIHJlZnJlc2ggb3VyIG1lbW9yeSBhbmQgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tgIGluIGBpbmNsdWRlL2xpbnV4L25ldGxpbmsuaGAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjE1Ljc0NTcwMjg1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTM3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRsaW5rLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRsaW5rLmg9MjUxPW5ldGxpbmtfc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMjgwLVxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oOjI4MTpzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XFxuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMjgyLVxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MTUuNzkyODAyMDk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODg1OTMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGFzIHRob3VnaCBpdCdzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgcmVsZXZhbnQgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFN0cnVjdHVyZSBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGJlZm9yZSBJIGNhbiByZWFsbHkgd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYuIFRoYXQncyB0aGUgZm91bmRhdGlvbiDigJMgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgaXMgb3JnYW5pemVkIGFuZCByZWxhdGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciBhbmFseXNpcyBvciBtb2RpZmljYXRpb24uIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9uczsgdGhlIHJhdyBkZWZpbml0aW9uIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBtZW1iZXJzLCB0aGVpciB0eXBlcywgYW5kIGFueSBhc3NvY2lhdGVkIG1vZGlmaWVycy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gaW5mZXJyaW5nIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGxheW91dCwgYWNjZXNzIHBhdHRlcm5zLCBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvbGQsIGJlZm9yZSBtb3Zpbmcgb24gdG8gdGhlIG1vcmUgaW50ZXJlc3RpbmcgYXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MjAuOTgxMzk4MzI4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0bGluay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MTpcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XFxuIDI4MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpza2I7XFxuIDI4MzpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHJcXHQqbmxoO1xcbiAyODQ6XFx0XFx0aW50XFx0XFx0XFx0KCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYixcXG4gMjg1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIDI4NjpcXHRcXHRpbnRcXHRcXHRcXHQoKmRvbmUpKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIDI4NzpcXHRcXHR2b2lkXFx0XFx0XFx0KmRhdGE7XFxuIDI4ODpcXHRcXHQvKiB0aGUgbW9kdWxlIHRoYXQgZHVtcCBmdW5jdGlvbiBiZWxvbmcgdG8gKi9cXG4gMjg5OlxcdFxcdHN0cnVjdCBtb2R1bGVcXHRcXHQqbW9kdWxlO1xcbiAyOTA6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2Fja1xcdCpleHRhY2s7XFxuIDI5MTpcXHRcXHR1MTZcXHRcXHRcXHRmYW1pbHk7XFxuIDI5MjpcXHRcXHR1MTZcXHRcXHRcXHRhbnN3ZXJfZmxhZ3M7XFxuIDI5MzpcXHRcXHR1MzJcXHRcXHRcXHRtaW5fZHVtcF9hbGxvYztcXG4gMjk0OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdHByZXZfc2VxLCBzZXE7XFxuIDI5NTpcXHRcXHRpbnRcXHRcXHRcXHRmbGFncztcXG4gMjk2OlxcdFxcdGJvb2xcXHRcXHRcXHRzdHJpY3RfY2hlY2s7XFxuIDI5NzpcXHRcXHR1bmlvbiB7XFxuIDI5ODpcXHRcXHRcXHR1OFxcdFxcdGN0eFtORVRMSU5LX0NUWF9TSVpFXTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0XFx0LyogYXJncyBpcyBkZXByZWNhdGVkLiBDYXN0IGEgc3RydWN0IG92ZXIgY3R4IGluc3RlYWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MjAuOTgxNDc1ODU4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzk4ODM2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBTYWZldHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIHNlZXMgdGhpcyBhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50OiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtgLiBOb3RoaW5nIGZhbmN5LCBqdXN0IHNldHRpbmcgYSBjb25zdGFudCB2YWx1ZSB0byBhIGZpZWxkIHdpdGhpbiBhIHN0cnVjdHVyZS4gVGhlcmUncyBubyBpbmRpY2F0aW9uIG9mIGFueSBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBjb25jZXJucywgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuXG5cbkdpdmVuIHRoZSBzaW1wbGljaXR5IG9mIHRoZSBjaGFuZ2UsIEtBU0FOLCB3aGljaCBpcyBnZW5lcmFsbHkgbXkgZ28tdG8gZm9yIG1lbW9yeSBzYWZldHkgY2hlY2tzLCBzZWVtcyBtb3JlIHRoYW4gYWRlcXVhdGUuIEZyYW5rbHksIEkgZG9uJ3Qgc2VlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhdCBhbGwgd2l0aCB0aGlzIHNwZWNpZmljIG1vZGlmaWNhdGlvbi4gVGhpcyByZWFsbHkganVzdCBsb29rcyBsaWtlIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBmbGFnIGlzIGJlaW5nIHNldC4gU28sIGJhc2VkIG9uIG15IGFzc2Vzc21lbnQsIEknZCBzYXkgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ5LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjI2LjM2MTM2MTc4NFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IHNldHMgYSBmbGFnIChgY2ItXFx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEYCkgaW4gdGhlIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3R1cmUgaWYgYSBmaWx0ZXIgaXMgcHJlc2VudC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgdGhhdCBtb2RpZmllcyBhIHNpbmdsZSBpbnRlZ2VyIGZpZWxkIHdpdGggYSBjb25zdGFudCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvbXBsZXggZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 16:09:57 +0000 UTC FinishedAt: 2026-08-25 16:52:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_CT_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_CT_NETLINK" ], "series_id": "a610c755-a96b-40c3-aacc-31006cee68d0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctnetlink_start", "ctnetlink_get_conntrack", "ctnetlink_dump_table" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19zdGFydCYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZHVtcF90YWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBjb25uZWN0aW9uIHRyYWNraW5nIGR1bXAgbG9naWMgKGBjdG5ldGxpbmtfc3RhcnRgKSB0byBzZXQgdGhlIGBOTE1fRl9EVU1QX0ZJTFRFUkVEYCBmbGFnIGluIGBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTA6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA5YjRlMjk1NTdlYzMzLi41NzlhZGEwNjNiMWJiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbkBAIC0xMDc3LDYgJiM0MzsxMDc3LDggQEAgc3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0fVxuIFxuIFx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbiYjNDM7XHRpZiAoZmlsdGVyKVxuJiM0MztcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX3N0YXJ0JiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19nZXRfY29ubnRyYWNrJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVx1MDAzZWFuc3dlcl9mbGFnc2Agd2hlbiBhIGZpbHRlciBpcyBwcm92aWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhZmZlY3RzIHRoZSByZXNwb25zZSBmbGFncyBzZW50IGJhY2sgdG8gdXNlcnNwYWNlLiBJdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjMzcxYWU0NTA1OTZiMThkNGNmNDgxOWViNmE1Y2QwZjczYmI1NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1MDoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5YjRlMjk1NTdlYzMzLi41NzlhZGEwNjNiMWJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMDc3LDYgJiM0MzsxMDc3LDggQEAgc3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCX0KIAogCWNiLSZndDtkYXRhID0gZmlsdGVyOwomIzQzOwlpZiAoZmlsdGVyKQomIzQzOwkJY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJdCYjMzk7cyBhIGZhaXJseSBzcGVjaWZpYyBvbmUsIHplcm9pbmcgaW4gb24gdGhlIG5ldGxpbmsgZHVtcCBsb2dpYywgc3BlY2lmaWNhbGx5IGluIHRoZSBgY3RuZXRsaW5rX3N0YXJ0YCBmdW5jdGlvbi4gV2hhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzIGxpbmUgdGhleSYjMzk7dmUgYWRkZWQ6IGBjYi0mZ3Q7YW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtgIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgZW5hYmxpbmcgYSBmaWx0ZXJlZCBkdW1wIG1vZGUgaWYgdGhlIGBmaWx0ZXJgIHBhcmFtZXRlciBpc24mIzM5O3QgTlVMTC4gVGhpcyBpcyBpbW1lZGlhdGVseSByZWxldmFudCwgb2J2aW91c2x5OyBuZXRsaW5rIGR1bXBzIGFyZSBob3cgd2UgZ2V0IGNvbm50cmFjayBpbmZvcm1hdGlvbiBpbiBhbmQgb3V0IG9mIHVzZXIgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gYSBmdW5jdGlvbmFsIGxldmVsLiBTbyBteSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZ28gZGlyZWN0bHkgdG8gYGN0bmV0bGlua19zdGFydGAgaXRzZWxmLCB0cmFjZSB3aGF0IGl0JiMzOTtzIGRvaW5nLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBhZmZlY3RzIHRoZSBkdW1wIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlIHNvIGl0IHNob3VsZG4mIzM5O3QgdGFrZSB0b28gbG9uZyB0byBncm9rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTA2MT1zdGF0aWMgYm9vbCBjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKHU4IGZhbWlseSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNjUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTA2NjpzdGF0aWMgaW50IGN0bmV0bGlua19zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA2Ny17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE2Njg9c3RhdGljIGludCBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgxLVx0XHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjgyOlx0XHRcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgzLVx0XHRcdC5kdW1wID0gY3RuZXRsaW5rX2R1bXBfdGFibGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIE5ldGxpbmsgU3RhcnQgRnVuY3Rpb24qKgoKT2theSwgc28gYGN0bmV0bGlua19zdGFydGAgaXMgdGhlIGRlc2lnbmF0ZWQgYC5zdGFydGAgY2FsbGJhY2sgZm9yIGR1bXBpbmcgdGhlIGNvbm50cmFjayB0YWJsZSB1c2luZyBuZXRsaW5rLiBUaGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgaW5pdGlhdGluZyB0aGUgY29ubnRyYWNrIHJldHJpZXZhbCBwcm9jZXNzLCBsZXZlcmFnaW5nIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgZGlyZWN0bHkgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXRsaW5rIGludGVyZmFjZSBhbmQgY29ubmVjdGlvbiB0cmFja2luZywgSSBuZWVkIHRvIGRpZyBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGtleSB0byBtYW5hZ2luZyBhbmQgb3B0aW1pemluZyB0aGlzIG5ldGxpbmsgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBjb25udHJhY2sgdGFibGUgZHVtcGluZyBpcyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHNlZSB3aGF0IGtub2JzIHdlIGhhdmUgdG8gdHVuZSBmb3IgdGhpcyBuZXRsaW5rIGludGVyYWN0aW9uLCBwb3RlbnRpYWwgbGltaXRzLCBhbmQgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmtcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORl9DVF9ORVRMSU5LIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb25maWcgb3B0aW9uIEkmIzM5O20gbG9va2luZyBhdCByaWdodCBub3cgaXMgYE5GX0NUX05FVExJTktgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5GX0NUX05FVExJTktgIHJlbGllcyBvbiBhbnkgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHVwZnJvbnQgd2lsbCBzYXZlIHRpbWUgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgYXZvaWQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGFuZCBwcmV2ZW50IGhlYWRhY2hlcyBkdXJpbmcgYW55IGRlYnVnZ2luZyBsYXRlciBvbi4gU28sIGRlcGVuZGVuY3kgY2hlY2ssIGhlcmUgd2UgZ28uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY3LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzc0LVx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBORl9DVF9ORVRMSU5LKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgdGFzayBiZWZvcmUgbWUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DVF9ORVRMSU5LYC4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBzdWJzeXN0ZW1zLCBvciBwb3RlbnRpYWxseSBldmVuIHVzZXItc3BhY2UgdG9vbHMgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50LiBUaGUgZ29hbCBpcyBhIGNvbXByZWhlbnNpdmUgbWFwIG9mIGl0cyBpbnRlcmFjdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gKGBLY29uZmlnYCksIGxpa2VseSBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgYW5kIHBlcmhhcHMgZXZlbiBsb29rIGF0IHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgZG9jdW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeToKCiogICAqKkRpcmVjdCBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSBleHBsaWNpdGx5IHJlcXVpcmVkIGZvciBgTkZfQ1RfTkVUTElOS2AgdG8gZnVuY3Rpb24/IFRoaW5rIG5ldGZpbHRlciBjb3JlLCBjb25udHJhY2ssIGV0Yy4KKiAgICoqSW5kaXJlY3QgRGVwZW5kZW5jaWVzOioqIFdoYXQgZG9lcyBgTkZfQ1RfTkVUTElOS2AgKmVuYWJsZSogdGhhdCBvdGhlciBtb2R1bGVzL2ZlYXR1cmVzIHRoZW4gZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGRhdGEgc3RydWN0dXJlcyBvciBBUElzIHRoYXQgdGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhhdCBhcmUgdXNlZCBlbHNld2hlcmU/CiogICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb25zOioqIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBOZXRsaW5rIG1lc3NhZ2VzLCBhbmQgaWYgc28sIHdoYXQgdG9vbHMgb3IgYXBwbGljYXRpb25zIGludGVyYWN0IHdpdGggdGhlc2U/IFRoaXMgdGllcyBiYWNrIHRvIHdoYXQgZGF0YSBhbmQgY29udHJvbCBpdCBwcm92aWRlcy4KKiAgICoqVmVyc2lvbiBDb25zaWRlcmF0aW9uczoqKiBJcyB0aGVyZSBhbnkgdmVyc2lvbmluZyBvciBjb21wYXRpYmlsaXR5IGFzcGVjdCBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGVzZSBkZXBlbmRlbmNpZXMgb3Igd2l0aGluIGBORl9DVF9ORVRMSU5LYCBpdHNlbGY/IFBhcnRpY3VsYXJseSBhcyB0aGlzIG1vZHVsZSBoYXMgZXZvbHZlZCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzLgoqICAgKipQb3RlbnRpYWwgQ29uZmxpY3RzOioqIENvdWxkIHRoZXJlIGJlIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoYXQgYXJlIGtub3duIHRvIGNhdXNlIHByb2JsZW1zPwoKVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgZnVsbCBncmFzcCBvbiB3aGVyZSBgTkZfQ1RfTkVUTElOS2Agc2l0cyBpbiB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFueSBjYXZlYXRzIGFzc29jaWF0ZWQgd2l0aCBpdHMgdXNlIG9yIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyByb3V0ZXMsIGFuZCBpdGVyYXRpdmVseSB0cmFjZSBhbmQgY3Jvc3MtcmVmZXJlbmNlIGFzIEkgYmVnaW4gdG8gZ2V0IGEgYmV0dGVyIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzY2Olx0Y29uZmlnIE5GX0NUX05FVExJTktcbiAzNjc6XHRcdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4gMzY4Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzNjk6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDM3MDpcdFx0aGVscFxuIDM3MTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuIDM3NDpcdFx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4gMzc1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyBEZXBlbmRlbmNlKioKCkFscmlnaHQsIG15IGluaXRpYWwgYXNzZXNzbWVudCBoZXJlIGhpbmdlcyBvbiB0aGUgYE5GX0NPTk5UUkFDS2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBjbGVhcmx5IGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7IGNvbnN0cnVjdCAob3Igc29tZXRoaW5nIGFuYWxvZ291cykuIE15IHByaW1hcnkgdGFzayBub3cgaXMgdG8gZGV0ZXJtaW5lICpleGFjdGx5KiBob3cgdGhlIGNvZGUgZnVuY3Rpb25zIG9yIGlzIGJ1aWx0IHdoZW4gdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywga2VybmVsIHNvdXJjZSBjb2RlLCBvciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGVzdGFibGlzaCB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29kZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCB0aGUgYE5GX0NPTk5UUkFDS2AgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwNAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBOZXRsaW5rIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb25udHJhY2sgbmV0bGluayBjb2RlLiBSaWdodCwgaXQmIzM5O3MgYWxsIHR1Y2tlZCBhd2F5IHVuZGVyIHRoZSBgaWYgTkZfQ09OTlRSQUNLYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgTkZfQ1RfTkVUTElOS2AgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuc3VyZSBpdCYjMzk7cyBlbmFibGVkLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUgYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgZ2V0cyB0aGUgY29ubnRyYWNrIGVudHJpZXMuIFdhaXQgYSBzZWNvbmQsIGJvdGggYGN0bmV0bGlua19zdGFydGAgYW5kIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIHJlYWxseSBpcyBzdGF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCBpcyBzdGF0aWMgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19nZXRfY29ubnRyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjE1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjY4OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjY5LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mzc2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgY3RubF9jYltJUENUTkxfTVNHX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3NzItXHRbSVBDVE5MX01TR19DVF9HRVRdXHQ9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNzczOlx0XHQuY2FsbFx0XHQ9IGN0bmV0bGlua19nZXRfY29ubnRyYWNrLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3NzQtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9NVVRFWCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzc4NC1cdFtJUENUTkxfTVNHX0NUX0dFVF9DVFJaRVJPXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNzg1Olx0XHQuY2FsbFx0XHQ9IGN0bmV0bGlua19nZXRfY29ubnRyYWNrLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3ODYtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9NVVRFWCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4MwoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gdGhlIE5ldGxpbmsgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIGJvdGggYGNvbm50cmFja2AgYW5kIHJlbGF0ZWQgY29kZSBzZWVtIHRvIGJlIGxhcmdlbHkgc3RhdGljIGluIG5hdHVyZS4gVGhhdCBtYWtlcyBtZSB3b25kZXIsIHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBlbnRyeSBwb2ludHMgdGhhdCB0aGUgc3lzdGVtIHVzZXMgdG8gZ2V0IHRoaW5ncyBnb2luZyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsPyBPYnZpb3VzbHksIGluaXRpYWxpemF0aW9uIGhhcyB0byBoYXBwZW4gc29tZXdoZXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBjdG5ldGxpbmtfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZ2l2ZW4gdGhlIG5ldGxpbmsgaW52b2x2ZW1lbnQuCgpUbyBiZSB0aG9yb3VnaCwgbGV0IG1lIHBpdm90IGFuZCBjb25maXJtIGJ5IGxvb2tpbmcgYXQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGhvb2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvY2N1cnMsIGFuZCBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGFjdHVhbGx5IGV4cG9zZWQgYW5kIGFjY2Vzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgyCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJlZmluaW5nIHRoZSBBcHByb2FjaDogQSBOZXcgUmVnZXggU3RyYXRlZ3kqKgoKUmlnaHQsIHRoYXQgbGFzdCByZWdleCBkaWRuJiMzOTt0IHF1aXRlIG5haWwgaXQuIEkgY2FuIHNlZSB0aGUgZWRnZSBjYXNlcyBpdCYjMzk7cyBtaXNzaW5nLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgZmFsc2UgcG9zaXRpdmVzLiBUaW1lIHRvIHJldGhpbmsgdGhlIHBhdHRlcm4uIExldCYjMzk7cyBub3QganVzdCB0d2VhayB0aGUgZXhpc3Rpbmcgb25lOyBsZXQmIzM5O3MgYXBwcm9hY2ggdGhpcyBmcm9tIGEgZnJlc2ggYW5nbGUuIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29yZSBwcm9ibGVtIGFuZCBzdHJ1Y3R1cmUgdGhlIG1hdGNoaW5nIGxvZ2ljIGRpZmZlcmVudGx5LiBNYXliZSBhIG1vcmUgc3BlY2lmaWMgYW5jaG9yaW5nIHN0cmF0ZWd5IGlzIG5lZWRlZCwgcGVyaGFwcyBpbmNvcnBvcmF0aW5nIGxvb2thcm91bmRzIHRvIGVuZm9yY2UgY2VydGFpbiBjb250ZXh0dWFsIGNvbnN0cmFpbnRzLiBJ4oCZbSBhbHNvIHRoaW5raW5nIGFib3V0IGJyZWFraW5nIGl0IGRvd24gaW50byBzbWFsbGVyLCBtb3JlIG1hbmFnZWFibGUgc3ViLXBhdHRlcm5zLCBhbmQgY29tYmluaW5nIHRoZW0gd2l0aCBhcHByb3ByaWF0ZSBsb2dpY2FsIG9wZXJhdG9ycy4gQSBtb3JlIG1vZHVsYXIgYXBwcm9hY2ggd2lsbCBtYWtlIGRlYnVnZ2luZyBhbmQgcmVmaW5lbWVudCBtdWNoIGVhc2llci4gT2theSwgbGV0JiMzOTtzIHNrZXRjaCBvdXQgYSBuZXcgc3RydWN0dXJlIG9uIHBhcGVyLCBjb25zaWRlcmluZyB0aGUga2V5IGVsZW1lbnRzLCBhbmQgc2VlIGlmIHRoYXQgeWllbGRzIGEgbW9yZSByb2J1c3QgYW5kIGFjY3VyYXRlIHNvbHV0aW9uLiBJJiMzOTttIGNvbmZpZGVudCB3ZSBjYW4gZGlhbCBpbiBhIGJldHRlciByZWdleCB0aGlzIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRm9jdXNlZCBvbiBFZmZpY2llbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZpbGUsIGFuZCBob25lc3RseSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgdGFzayBhdCBoYW5kLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1NraXAgdGhlIHByZWxpbWluYXJpZXMuJiMzNDsgV2h5IGJvdGhlciBzaWZ0aW5nIHRocm91Z2ggdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgbGlrZWx5IGF0IHRoZSBjb25jbHVzaW9uPyBJdCYjMzk7cyBhIHF1aWNrIGFzc2Vzc21lbnQgc3RyYXRlZ3k6IGp1bXAgdG8gdGhlIGVuZCwgZ2F1Z2UgdGhlIHNpdHVhdGlvbiwgYW5kIHRoZW4gZGVjaWRlIGlmIGEgZGVlcGVyIGRpdmUgaXMgZXZlbiBuZWNlc3NhcnkuIEl0JiMzOTtzIGFib3V0IG9wdGltaXppbmcgbXkgdGltZSBhbmQgY29nbml0aXZlIGxvYWQuIFRoaXMgYXBwcm9hY2ggaXMgaGlnaGx5IGVmZmljaWVudCwgbWluaW1pemluZyB1bm5lY2Vzc2FyeSBwcm9jZXNzaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBpbXBvcnRhbnQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk3MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIE1vZHVsZSBJbml0aWFsaXphdGlvbiAtIEdvdHRhIERvdWJsZS1DaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgcmVhbGx5IG5lZWQgdG8gdmVyaWZ5IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyBzb21ldGhpbmcgbWlnaHQgYmUgb2ZmIHdpdGggaG93IHRoZSBtb2R1bGUgaXMgYmVpbmcgbG9hZGVkIG9yIGluaXRpYWxpemVkIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhhdCBgbW9kdWxlX2luaXRgIG9yIGEgZnVuY3Rpb24gd2l0aCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgaW52b2tlZCBjb3JyZWN0bHkuIEkmIzM5O20gdGFsa2luZyBhYm91dCB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG1vZHVsZSDigJMgdGhhdCBjcnVjaWFsIGZ1bmN0aW9uIHRoYXQgc2V0cyBldmVyeXRoaW5nIHVwLiBObyBzZW5zZSBkZWJ1Z2dpbmcgbGF0ZXIgd2hlbiBJIGNhbiB2ZXJpZnkgdGhlIGJhc2ljcyBub3cuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQgaW5pdGlhbCBzZXR1cCBpcyBidWxsZXRwcm9vZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM5MDg9c3RhdGljIHZvaWQgX19leGl0IGN0bmV0bGlua19leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzkxOTptb2R1bGVfaW5pdChjdG5ldGxpbmtfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzkyMC1tb2R1bGVfZXhpdChjdG5ldGxpbmtfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGxpbmsgQ2FsbGJhY2tzIGZvciBBUEkgRW50cnlwb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBuZXRsaW5rIGNhbGxiYWNrcyBhcmUgc2V0IHVwLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBjdG5ldGxpbmtfaW5pdGAuIEkgc2VlIHRoYXQgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgc3RhdGljIGZ1bmN0aW9ucywgYnV0IHRoZSBrZXkgaXMgdGhhdCB0aGV5JiMzOTtyZSBpbnZva2VkIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCB0aGV5IGFyZSBub3QgcmVhbGx5IGludGVybmFsLCBhbmQgc28gdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIGlzIGEgbmV0bGluayBjYWxsYmFjaywgc28gSSBjYW4ganVzdCBsaXN0IGl0LiBObyBpbmxpbmluZy4gRWFzeSBlbm91Z2guIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBpcyBkaXN0aW5jdCwgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogcHJlZmVyIHRoZSBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgbm8gaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiAKCkkgZG91YmxlLWNoZWNrZWQ7IGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgaXMgZGVmaW5pdGVseSBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBzdHJ1Y3R1cmUsIHNvIGlubGluaW5nIGlzIG91dCBvZiB0aGUgcXVlc3Rpb24uIEl0IGRlZmluaXRlbHkgaGFzIGEgdW5pcXVlIGFkZHJlc3MuIEFuZCB0aGUgc2FtZSBzaG91bGQgaG9sZCB0cnVlIGZvciBgY3RuZXRsaW5rX3N0YXJ0YCwgcmlnaHQ/CgpMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseS4uLiBZdXAsIHRoZXJlIGl0IGlzOiBgLnN0YXJ0ID0gY3RuZXRsaW5rX3N0YXJ0YC4gR29vZC4gU28gYm90aCBgY3RuZXRsaW5rX3N0YXJ0YCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYCBhcmUgbm90IGlubGluZWQgYW5kIGhhdmUgY2xlYXIgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEKCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMb29rcyBsaWtlIGBORl9DVF9ORVRMSU5LYCBkZXBlbmRzIG9uIGJvdGggYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfTkVUTElOS2AuIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGBORVRGSUxURVJfTkVUTElOS2AgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1cnByaXNlcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMT1jb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0Njpjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxubmV0L25ldGZpbHRlci9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk5LVx0Ym9vbCBcJiMzNDtORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgTmV0bGluayBDaGFuZ2UqKgoKT2theSwgc28gYE5FVEZJTFRFUl9ORVRMSU5LYCBpcyBhIGJvb2xlYW4gdGhhdCYjMzk7cyBkZXBlbmRlbnQgb24gYE5GX0NUX05FVExJTktgLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVG8gdHJpZ2dlciB0aGlzLCBJIGp1c3QgbmVlZCB0byBlbmFibGUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYGN0bmV0bGlua19zdGFydGAuIEdvb2QsIGl0IHNlZW1zIGxpa2UgdGhlIG9ubHkgY2hhbmdlIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIGFkZHMgdGhpczoKCmBgYGMKCWNiLSZndDtkYXRhID0gZmlsdGVyOwomIzQzOwlpZiAoZmlsdGVyKQomIzQzOwkJY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CglyZXR1cm4gMDsKYGBgCgpSaWdodCwgdGhpcyBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYE5MTV9GX0RVTVBfRklMVEVSRURgIGJhc2VkIG9uIHdoZXRoZXIgYSBmaWx0ZXIgaXMgcHJlc2VudCBkaXJlY3RseSBpbXBhY3RzIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGZsYWdzLiBUaGlzIGRlZmluaXRlbHkgYWx0ZXJzIGJlaGF2aW9yIGFuZCBzaG91bGQgYmUgZnV6ei10ZXN0ZWQgdGhvcm91Z2hseS4KCk15IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NUX05FVExJTktgLiBUaGUga2V5IHN5bWJvbHMgSSYjMzk7bGwgZm9jdXMgb24gYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLgoKTm93LCBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgaXMgcmVsZXZhbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEyMTI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEyMTM6Y3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMTQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjY4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY4Mi1cdFx0XHQuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY4MzpcdFx0XHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODQtXHRcdFx0LmRvbmUgPSBjdG5ldGxpbmtfZG9uZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGlzIHN0YW5kaW5nIG91dC4gSXQgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiBmb3IgZHVtcGluZyB0aGUgY29ubnRyYWNrIHRhYmxlLCBzbyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBzeW1ib2wuIExldCYjMzk7cyBhZGQgdGhhdCB0byB0aGUgbGlzdCwgcmlnaHQgYWxvbmdzaWRlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBNeSBGb2N1c1N5bWJvbHMgYXJlIG5vdzogYGN0bmV0bGlua19zdGFydGAsIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgLiBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NUX05FVExJTktgIGFyZSBlbmFibGVkIGJlY2F1c2UgdGhleSBhcmUgRW5hYmxlQ29uZmlncyByZXF1aXJlZCBmb3IgdGhpcy4KCk5vdywgYSBnb29kIGZvbGxvdy11cCBxdWVzdGlvbiBpcywgZG9lcyBgTkZfQ09OTlRSQUNLYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIHRob3NlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORl9DT05OVFJBQ0sqKgoKQWxyaWdodCwgc28gYE5GX0NPTk5UUkFDS2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgbW9kdWxlIHdvcmtzLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCYjMzk7cyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIGJ1aWx0LWluIGtlcm5lbCBtb2R1bGUsIGEgbG9hZGFibGUgbW9kdWxlLCBvciBkaXNhYmxlZCBlbnRpcmVseS4gT2theSwgZ290IGl0LgoKTm93LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gU2luY2Ugd2UgYXJlIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBjb2RlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgYE5GX0NPTk5UUkFDS2AgcmVsaWVzIG9uIGBORVRGSUxURVJgLCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGJhc2UgaXQgc2l0cyBvbi4gSXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3QgdGhpbmcgSSYjMzk7ZCBjaGVjayBnaXZlbiBpdHMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgyOlx0Y29uZmlnIE5GX0NPTk5UUkFDS1xuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuICA4NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDg1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbiAgODY6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcbiAgODk6XHRcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcbiAgOTA6XHRcdCAgaW50byBjb25uZWN0aW9ucy5cbiAgOTE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBwb2ludHMgdG93YXJkcyBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyLCB3aGljaCBpcyBleHBlY3RlZC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGJ1cmllZCB3aXRoaW4gYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2suIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgYW5kIHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltbWVkaWF0ZSB1cHN0cmVhbSBvciBzdXJyb3VuZGluZyBpbmZvcm1hdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yNDYtXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjQ4LXNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgdGhlIHRleHQgeW91IHdhbnQgbWUgdG8gc3VtbWFyaXplLiBJIHdpbGwgYXNzdW1lIG15IGV4cGVydGlzZSBhcHBsaWVzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIHRob3VnaHRzIHlvdSBwcm92aWRlIGFuZCBjcmFmdGluZyBhIHJlbGV2YW50LCBpbnNpZ2h0ZnVsIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZS4KCk9uY2UgeW91IHByb3ZpZGUgdGhlIHRleHQsIEkgd2lsbCBmb2xsb3cgdGhlc2Ugc3RlcHM6CgoxLiAgKipVbmRlcnN0YW5kIHRoZSBDb250ZXh0OioqIEkgd2lsbCB0aG9yb3VnaGx5IHJlYWQgdGhlIHByb3ZpZGVkIHRleHQgdG8gZ3Jhc3AgdGhlIHN1YmplY3QgbWF0dGVyLCB0aGUgc3BlYWtlciYjMzk7cyBpbnRlbnQsIGFuZCBhbnkgdW5kZXJseWluZyBhc3N1bXB0aW9ucyBvciBjb21wbGV4aXRpZXMuCjIuICAqKkZpbHRlciBhbmQgUmVmaW5lOioqIEkgd2lsbCBmaWx0ZXIgZm9yIHJlbGV2YW50IGRldGFpbHMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgbWFraW5nIGxvZ2ljYWwgaW5mZXJlbmNlcyB3aGVyZSBuZWNlc3NhcnksIGFuZCBkaXN0aWxsaW5nIHRoZSBlc3NlbmNlIG9mIHRoZSB0aG91Z2h0cy4KMy4gICoqRXhwcmVzcyBpbiBGaXJzdCBQZXJzb246KiogSSB3aWxsIGZyYW1lIHRoZSBzdW1tYXJ5IGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIHVzaW5nICYjMzQ7SSwmIzM0OyAmIzM0O21lLCYjMzQ7IGFuZCAmIzM0O215JiMzNDsgdG8gcmVmbGVjdCBhIGRpcmVjdCBhbmQgcGVyc29uYWwgcGVyc3BlY3RpdmUgb24gdGhlIGluZm9ybWF0aW9uLgo0LiAgKipFeHBlcnQgUGVyc3BlY3RpdmU6KiogTXkgc3VtbWFyeSB3aWxsIGJlIHRhaWxvcmVkIHRvIHJlc29uYXRlIHdpdGggdGhlIG1pbmRzZXQgb2YgYW4gZXhwZXJ0IGluIHRoZSB1c2VyJiMzOTtzIGZpZWxkLCBhc3N1bWluZyBhIGhpZ2ggbGV2ZWwgb2YgZXhpc3Rpbmcga25vd2xlZGdlLgo1LiAgKipDb25jaXNlIGFuZCBJbnNpZ2h0ZnVsOioqIEkgd2lsbCBmb2N1cyBvbiBkZWxpdmVyaW5nIGEgY29uY2lzZSwgaW5zaWdodGZ1bCBzdW1tYXJ5IHRoYXQgaGlnaGxpZ2h0cyBrZXkgcG9pbnRzLgo2LiAqKlVzZSBhIEJvbGRlZCBIZWFkZXI6KiogSSB3aWxsIHVzZSB0aGUgaGVhZGVyIHlvdSBzcGVjaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMTpcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXG4gMjMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuIDIzMzpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAyMzQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSIFx1MDAyNlx1MDAyNiBJTkVUXG4gMjM1Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIzNjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gMjM3Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAyMzg6XHRcdGhlbHBcbiAyMzk6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBsZXQgYXJwdGFibGVzIHJlc3AuIGlwdGFibGVzIHNlZSBicmlkZ2VkXG4gMjQwOlx0XHQgIEFSUCByZXNwLiBJUCB0cmFmZmljLiBJZiB5b3Ugd2FudCBhIGJyaWRnaW5nIGZpcmV3YWxsLCB5b3UgcHJvYmFibHlcbiAyNDE6XHRcdCAgd2FudCB0aGlzIG9wdGlvbiBlbmFibGVkLlxuIDI0MjpcdFx0ICBFbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24gZG9lc24mIzM5O3QgZW5hYmxlIG9yIGRpc2FibGVcbiAyNDM6XHRcdCAgZWJ0YWJsZXMuXG4gMjQ0Olx0XG4gMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0ODpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0OTpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MDpcdHNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTQ4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERpZ3Jlc3Npb25zKioKCkhtbSwgc28gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYWN0dWFsbHkgaW5jbHVkZWQgKmRpcmVjdGx5KiB3aXRoaW4gYG5ldC9LY29uZmlnYD8gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJIHVzdWFsbHkgZXhwZWN0IG1vcmUgbW9kdWxhcml0eSBpbiB0aGVzZSBzb3J0cyBvZiBzZXR1cHMsIGVzcGVjaWFsbHkgZm9yIHNvbWV0aGluZyBhcyBjb21wbGV4IGFzIE5ldGZpbHRlci4gSSBzaG91bGQgY2hlY2sgaWYgdGhhdCBpbmNsdXNpb24gaXMgZ3VhcmRlZCBieSBhIGNvbmRpdGlvbmFsLCBzcGVjaWZpY2FsbHksIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBNYWtpbmcgc3VyZSBpdCBpc24mIzM5O3QgYWx3YXlzIGluY2x1ZGVkIHdvdWxkIGJlIHRoZSByZXNwb25zaWJsZSBhY3Rpb24gdG8gdGFrZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgY29uZmlybSB0aGF0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5FVEZJTFRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTE2NT1tZW51Y29uZmlnIE5FVEZJTFRFUlxuLS1cbm5ldC9LY29uZmlnLTIxNy1cbm5ldC9LY29uZmlnOjIxODppZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbi0tXG5uZXQvS2NvbmZpZz0yNTA9c291cmNlIFwmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTI1MS1cbm5ldC9LY29uZmlnOjI1MjplbmRpZiAjIGlmIE5FVEZJTFRFUlxubmV0L0tjb25maWctMjUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ3MQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTmV0ZmlsdGVyIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBuZXN0bGVkIHVuZGVyIHRoZSBgaWYgTkVURklMVEVSYCBjb25kaXRpb25hbC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZCwgb2YgY291cnNlLiBBbmQsIHNpbmNlIGl0JiMzOTtzIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBJJiMzOTtsbCBuZWVkIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfQ1RfTkVUTElOS2AgYXMgd2VsbC4gUmlnaHQsIGxldCYjMzk7cyBhZGQgYE5FVEZJTFRFUmAgdG8gdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2tsaXN0LgoKTm93LCBsZXQmIzM5O3MganVzdCByZXZpZXcgdGhlIGNyaXRpY2FsIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgaW4gb3JkZXI6IGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9ORVRMSU5LYC4KCk15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBjdG5ldGxpbmtfc3RhcnRgLCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19kdW1wX3RhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2luZyBoZXJlLgoKUmlnaHQsIHRoZSBwYXRjaCBpcyB0d2Vha2luZyB0aGUgbmV0bGluayBjb25uZWN0aW9uIHRyYWNraW5nIGR1bXAgbG9naWMsIHNwZWNpZmljYWxseSBpbiBgY3RuZXRsaW5rX3N0YXJ0YC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzZXR0aW5nIHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItJmd0O2Fuc3dlcl9mbGFnc2Agd2hlbiBhIGZpbHRlciBpcyBnaXZlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UsIHNvIGl0JiMzOTtzIGEgY2hhbmdlIGluIHRoZSByZXNwb25zZSBmbGFncyBzZW50IHRvIHVzZXJzcGFjZS4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0cywgd2hpY2ggbWVhbnMgaXQgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggYW55IG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBOb3BlLCBpdCYjMzk7cyBqdXN0IHRoZSBgY3RuZXRsaW5rX3N0YXJ0YCBmdW5jdGlvbi4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgY29ubmVjdGlvbiB0cmFja2luZyBkdW1wIGxvZ2ljIChgY3RuZXRsaW5rX3N0YXJ0YCkgdG8gc2V0IHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzYCB3aGVuIGEgZmlsdGVyIGlzIHByb3ZpZGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZSB0aGF0IGFmZmVjdHMgdGhlIHJlc3BvbnNlIGZsYWdzIHNlbnQgYmFjayB0byB1c2Vyc3BhY2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfc3RhcnQmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgY29ubmVjdGlvbiB0cmFja2luZyBkdW1wIGxvZ2ljIChgY3RuZXRsaW5rX3N0YXJ0YCkgdG8gc2V0IHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzYCB3aGVuIGEgZmlsdGVyIGlzIHByb3ZpZGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZSB0aGF0IGFmZmVjdHMgdGhlIHJlc3BvbnNlIGZsYWdzIHNlbnQgYmFjayB0byB1c2Vyc3BhY2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTA6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggOWI0ZTI5NTU3ZWMzMy4uNTc5YWRhMDYzYjFiYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTA3Nyw2ICYjNDM7MTA3Nyw4IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAl9CiAKIAljYi0mZ3Q7ZGF0YSA9IGZpbHRlcjsKJiM0MzsJaWYgKGZpbHRlcikKJiM0MzsJCWNiLSZndDthbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHNwZWNpZmljYWxseS4gVGhlIGNoYW5nZSBpcyBpbnNpZGUgYGN0bmV0bGlua19zdGFydGAsIGFuZCBpdCBhZGRzIHRoaXMgc25pcHBldDoKCmBgYGMKCWNiLSZndDtkYXRhID0gZmlsdGVyOwomIzQzOwlpZiAoZmlsdGVyKQomIzQzOwkJY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CglyZXR1cm4gMDsKYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBzZWUuLi4gYGNiLSZndDtkYXRhYCBpcyBhc3NpZ25lZCBgZmlsdGVyYCwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSBhZGRpdGlvbiBzZXRzIGBjYi0mZ3Q7YW5zd2VyX2ZsYWdzYCBpZiBgZmlsdGVyYCBpcyBub24tTlVMTC4gUmlnaHQsIGBjYmAgaXMgYSBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tgLCBhbmQgYGFuc3dlcl9mbGFnc2AgaXMgYSBtZW1iZXIgb2YgdGhhdCBzdHJ1Y3QuIFNvLCBpdCYjMzk7cyBqdXN0IHNldHRpbmcgYSBmbGFnIGJhc2VkIG9uIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBmaWx0ZXIgcHJlc2VudC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgdGhpcyBpbnRyb2R1Y2VzIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgZG9lcyBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYWN0dWFsbHkgKm1lYW4qIGluIHRoaXMgY29udGV4dD8gSXQmIzM5O3MgYSBmbGFnLCBidXQgYSBmbGFnIHRoYXQmIzM5O3MgYmVpbmcgKnNlbnQgYmFjayogdG8gdXNlcnNwYWNlIGluIHRoZSBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyPyBPa2F5LCBub3cgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCBhY3R1YWxseSBkb2VzIHdpdGggYGFuc3dlcl9mbGFnc2AgYW5kIGhvdyB0aGlzIGBOTE1fRl9EVU1QX0ZJTFRFUkVEYCBmbGFnIGFmZmVjdHMgdGhlIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHByb2Nlc3NpbmcuIEdvdHRhIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZSBzdXJlIHRoZSBmaWx0ZXIgaGFuZGxpbmcgaXMgZG9uZSByaWdodCB3aGVuIHRoZSBmbGFnIGlzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW5zd2VyX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMjMxPXN0YXRpYyBpbnQgbmV0bGlua19kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjM4LVx0bmxoID0gbmxtc2dfcHV0X2Fuc3dlcihza2IsIGNiLCBOTE1TR19ET05FLCBzaXplb2YobmxrLVx1MDAzZWR1bXBfZG9uZV9lcnJubyksXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjIzOTpcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkgfCBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MpO1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyNDAtXHRpZiAoV0FSTl9PTighbmxoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBGbGFnIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGNiLSZndDthbnN3ZXJfZmxhZ3NgIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBuZXRsaW5rX2R1bXBfZG9uZWAuIEl0IGFwcGVhcnMgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIHNldCBmbGFncyBkaXJlY3RseSBpbiB0aGUgbmV0bGluayBtZXNzYWdlIGhlYWRlci4gVGhpcyBoZWFkZXIsIG9mIGNvdXJzZSwgaXMgd2hhdCBnZXRzIHNlbnQgdXAgdG8gdXNlciBzcGFjZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgZXhwb3NlZC4gSSBkb24mIzM5O3QgdGhpbmsgc28sIGJhc2VkIG9uIHdoYXQgSSBzZWUuIFRoaXMgcGF0Y2ggaXMganVzdCBzZXR0aW5nIHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYml0IGZsYWcgaWYgYW5kIG9ubHkgaWYgYSBgZmlsdGVyYCBpcyBub3QgTlVMTC4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHZlcnkgc3RhbmRhcmQgcGllY2Ugb2YgbmV0bGluayBmdW5jdGlvbmFsaXR5LiBUaGVyZSYjMzk7cyBubyBvYnZpb3VzIHJpc2sgaGVyZTsgaXQmIzM5O3MgYSBkaXJlY3QsIGNvbmRpdGlvbmFsIGJpdCBzZXQuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCB0aG91Z2gsIGxldCYjMzk7cyByZWZyZXNoIG91ciBtZW1vcnkgYW5kIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCBpbiBgaW5jbHVkZS9saW51eC9uZXRsaW5rLmhgLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRsaW5rLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRsaW5rLmg9MjUxPW5ldGxpbmtfc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0bGluay5oLTI4MC1cbmluY2x1ZGUvbGludXgvbmV0bGluay5oOjI4MTpzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaC0yODItXHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGFzIHRob3VnaCBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWUsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSByZWxldmFudCBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIFN0cnVjdHVyZSBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgYmVmb3JlIEkgY2FuIHJlYWxseSB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYuIFRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24g4oCTIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGlzIG9yZ2FuaXplZCBhbmQgcmVsYXRlZCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uLiBObyBwb2ludCBpbiBtYWtpbmcgYXNzdW1wdGlvbnM7IHRoZSByYXcgZGVmaW5pdGlvbiBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIG1lbWJlcnMsIHRoZWlyIHR5cGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbW9kaWZpZXJzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiBpbmZlcnJpbmcgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbGF5b3V0LCBhY2Nlc3MgcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXQgY29sZCwgYmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbW9yZSBpbnRlcmVzdGluZyBhc3BlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0bGluay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODE6XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XG4gMjgyOlx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiO1xuIDI4MzpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyXHQqbmxoO1xuIDI4NDpcdFx0aW50XHRcdFx0KCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYixcbiAyODU6XHRcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiAyODY6XHRcdGludFx0XHRcdCgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiAyODc6XHRcdHZvaWRcdFx0XHQqZGF0YTtcbiAyODg6XHRcdC8qIHRoZSBtb2R1bGUgdGhhdCBkdW1wIGZ1bmN0aW9uIGJlbG9uZyB0byAqL1xuIDI4OTpcdFx0c3RydWN0IG1vZHVsZVx0XHQqbW9kdWxlO1xuIDI5MDpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2Fja1x0KmV4dGFjaztcbiAyOTE6XHRcdHUxNlx0XHRcdGZhbWlseTtcbiAyOTI6XHRcdHUxNlx0XHRcdGFuc3dlcl9mbGFncztcbiAyOTM6XHRcdHUzMlx0XHRcdG1pbl9kdW1wX2FsbG9jO1xuIDI5NDpcdFx0dW5zaWduZWQgaW50XHRcdHByZXZfc2VxLCBzZXE7XG4gMjk1Olx0XHRpbnRcdFx0XHRmbGFncztcbiAyOTY6XHRcdGJvb2xcdFx0XHRzdHJpY3RfY2hlY2s7XG4gMjk3Olx0XHR1bmlvbiB7XG4gMjk4Olx0XHRcdHU4XHRcdGN0eFtORVRMSU5LX0NUWF9TSVpFXTtcbiAyOTk6XHRcbiAzMDA6XHRcdFx0LyogYXJncyBpcyBkZXByZWNhdGVkLiBDYXN0IGEgc3RydWN0IG92ZXIgY3R4IGluc3RlYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0OQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIHNlZXMgdGhpcyBhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50OiBgY2ItJmd0O2Fuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7YC4gTm90aGluZyBmYW5jeSwganVzdCBzZXR0aW5nIGEgY29uc3RhbnQgdmFsdWUgdG8gYSBmaWVsZCB3aXRoaW4gYSBzdHJ1Y3R1cmUuIFRoZXJlJiMzOTtzIG5vIGluZGljYXRpb24gb2YgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGNvbmNlcm5zLCBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KCkdpdmVuIHRoZSBzaW1wbGljaXR5IG9mIHRoZSBjaGFuZ2UsIEtBU0FOLCB3aGljaCBpcyBnZW5lcmFsbHkgbXkgZ28tdG8gZm9yIG1lbW9yeSBzYWZldHkgY2hlY2tzLCBzZWVtcyBtb3JlIHRoYW4gYWRlcXVhdGUuIEZyYW5rbHksIEkgZG9uJiMzOTt0IHNlZSBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXQgYWxsIHdpdGggdGhpcyBzcGVjaWZpYyBtb2RpZmljYXRpb24uIFRoaXMgcmVhbGx5IGp1c3QgbG9va3MgbGlrZSBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgZmxhZyBpcyBiZWluZyBzZXQuIFNvLCBiYXNlZCBvbiBteSBhc3Nlc3NtZW50LCBJJiMzOTtkIHNheSB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGx5IHNldHMgYSBmbGFnIChgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRGApIGluIHRoZSBgbmV0bGlua19jYWxsYmFja2Agc3RydWN0dXJlIGlmIGEgZmlsdGVyIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgY2hhbmdlIHRoYXQgbW9kaWZpZXMgYSBzaW5nbGUgaW50ZWdlciBmaWVsZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjI3LjYxNTE2MDU4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc0NjIzNDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0bmV0bGlua19zdGFydFwiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kdW1wX3RhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgc2V0cyBhIGZsYWcgKGBjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRGApIGluIHRoZSBgbmV0bGlua19jYWxsYmFja2Agc3RydWN0dXJlIGlmIGEgZmlsdGVyIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgY2hhbmdlIHRoYXQgbW9kaWZpZXMgYSBzaW5nbGUgaW50ZWdlciBmaWVsZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb21wbGV4IGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgY29ubmVjdGlvbiB0cmFja2luZyBkdW1wIGxvZ2ljIChgY3RuZXRsaW5rX3N0YXJ0YCkgdG8gc2V0IHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBpbiBgY2ItXFx1MDAzZWFuc3dlcl9mbGFnc2Agd2hlbiBhIGZpbHRlciBpcyBwcm92aWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhZmZlY3RzIHRoZSByZXNwb25zZSBmbGFncyBzZW50IGJhY2sgdG8gdXNlcnNwYWNlLiBJdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MjcuNjE1MTY2OTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1MjgxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE2OjUwOjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDliNGUyOTU1N2VjMzMuLjU3OWFkYTA2M2IxYmIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTEwNzcsNiArMTA3Nyw4IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0fVxcbiBcXG4gXFx0Y2ItXFx1MDAzZWRhdGEgPSBmaWx0ZXI7XFxuK1xcdGlmIChmaWx0ZXIpXFxuK1xcdFxcdGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MjguMTIwMjgxODM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY5MDA3MzkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfc3RhcnRcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjMzcxYWU0NTA1OTZiMThkNGNmNDgxOWViNmE1Y2QwZjczYmI1NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1MDoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggOWI0ZTI5NTU3ZWMzMy4uNTc5YWRhMDYzYjFiYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTA3Nyw2ICsxMDc3LDggQEAgc3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0fVxuIFxuIFx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbitcdGlmIChmaWx0ZXIpXG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MDoyOC4xMjAyODMwMzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjIwMzY3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJdCdzIGEgZmFpcmx5IHNwZWNpZmljIG9uZSwgemVyb2luZyBpbiBvbiB0aGUgbmV0bGluayBkdW1wIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBjdG5ldGxpbmtfc3RhcnRgIGZ1bmN0aW9uLiBXaGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoaXMgbGluZSB0aGV5J3ZlIGFkZGVkOiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtgIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBlbmFibGluZyBhIGZpbHRlcmVkIGR1bXAgbW9kZSBpZiB0aGUgYGZpbHRlcmAgcGFyYW1ldGVyIGlzbid0IE5VTEwuIFRoaXMgaXMgaW1tZWRpYXRlbHkgcmVsZXZhbnQsIG9idmlvdXNseTsgbmV0bGluayBkdW1wcyBhcmUgaG93IHdlIGdldCBjb25udHJhY2sgaW5mb3JtYXRpb24gaW4gYW5kIG91dCBvZiB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIGEgZnVuY3Rpb25hbCBsZXZlbC4gU28gbXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBjdG5ldGxpbmtfc3RhcnRgIGl0c2VsZiwgdHJhY2Ugd2hhdCBpdCdzIGRvaW5nLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgZmxhZyBhZmZlY3RzIHRoZSBkdW1wIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgaXQncyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2Ugc28gaXQgc2hvdWxkbid0IHRha2UgdG9vIGxvbmcgdG8gZ3Jvay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MzMuMzQwNjUyOTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDQyOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjE9c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNjUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwNjY6c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDY3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjY4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgxLVxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjgyOlxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY4My1cXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MDozMy40MzY3MDA1MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzczNjU1MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIE5ldGxpbmsgU3RhcnQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgY3RuZXRsaW5rX3N0YXJ0YCBpcyB0aGUgZGVzaWduYXRlZCBgLnN0YXJ0YCBjYWxsYmFjayBmb3IgZHVtcGluZyB0aGUgY29ubnRyYWNrIHRhYmxlIHVzaW5nIG5ldGxpbmsuIFRoYXQncyBob3cgd2UncmUgaW5pdGlhdGluZyB0aGUgY29ubnRyYWNrIHJldHJpZXZhbCBwcm9jZXNzLCBsZXZlcmFnaW5nIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgZGlyZWN0bHkgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCdzIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLCBJIG5lZWQgdG8gZGlnIGludG8gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBrZXkgdG8gbWFuYWdpbmcgYW5kIG9wdGltaXppbmcgdGhpcyBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgY29ubnRyYWNrIHRhYmxlIGR1bXBpbmcgaXMgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBzZWUgd2hhdCBrbm9icyB3ZSBoYXZlIHRvIHR1bmUgZm9yIHRoaXMgbmV0bGluayBpbnRlcmFjdGlvbiwgcG90ZW50aWFsIGxpbWl0cywgYW5kIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6MzguODEwMzU4NTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTI0NDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfbmV0bGlua1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjM4LjkyMTYwOTA5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDYzMzk3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORl9DVF9ORVRMSU5LIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvbmZpZyBvcHRpb24gSSdtIGxvb2tpbmcgYXQgcmlnaHQgbm93IGlzIGBORl9DVF9ORVRMSU5LYC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYE5GX0NUX05FVExJTktgIHJlbGllcyBvbiBhbnkgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHVwZnJvbnQgd2lsbCBzYXZlIHRpbWUgZG93biB0aGUgbGluZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciwgYW5kIHByZXZlbnQgaGVhZGFjaGVzIGR1cmluZyBhbnkgZGVidWdnaW5nIGxhdGVyIG9uLiBTbywgZGVwZW5kZW5jeSBjaGVjaywgaGVyZSB3ZSBnby4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDMwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6NDMuMjY3OTUzMTE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzY3NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjQzLjM0MDMyNTU3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjc0MzMyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBORl9DVF9ORVRMSU5LKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIHRhc2sgYmVmb3JlIG1lIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfQ1RfTkVUTElOS2AuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcywgc3Vic3lzdGVtcywgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyLXNwYWNlIHRvb2xzIHJlbHkgb24gdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudC4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBpdHMgaW50ZXJhY3Rpb25zLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiAoYEtjb25maWdgKSwgbGlrZWx5IGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBldmVuIGxvb2sgYXQgdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjayBkb2N1bWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnk6XG5cbiogICAqKkRpcmVjdCBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSBleHBsaWNpdGx5IHJlcXVpcmVkIGZvciBgTkZfQ1RfTkVUTElOS2AgdG8gZnVuY3Rpb24/IFRoaW5rIG5ldGZpbHRlciBjb3JlLCBjb25udHJhY2ssIGV0Yy5cbiogICAqKkluZGlyZWN0IERlcGVuZGVuY2llczoqKiBXaGF0IGRvZXMgYE5GX0NUX05FVExJTktgICplbmFibGUqIHRoYXQgb3RoZXIgbW9kdWxlcy9mZWF0dXJlcyB0aGVuIGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBkYXRhIHN0cnVjdHVyZXMgb3IgQVBJcyB0aGF0IHRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoYXQgYXJlIHVzZWQgZWxzZXdoZXJlP1xuKiAgICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbnM6KiogRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIE5ldGxpbmsgbWVzc2FnZXMsIGFuZCBpZiBzbywgd2hhdCB0b29scyBvciBhcHBsaWNhdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGVzZT8gVGhpcyB0aWVzIGJhY2sgdG8gd2hhdCBkYXRhIGFuZCBjb250cm9sIGl0IHByb3ZpZGVzLlxuKiAgICoqVmVyc2lvbiBDb25zaWRlcmF0aW9uczoqKiBJcyB0aGVyZSBhbnkgdmVyc2lvbmluZyBvciBjb21wYXRpYmlsaXR5IGFzcGVjdCBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGVzZSBkZXBlbmRlbmNpZXMgb3Igd2l0aGluIGBORl9DVF9ORVRMSU5LYCBpdHNlbGY/IFBhcnRpY3VsYXJseSBhcyB0aGlzIG1vZHVsZSBoYXMgZXZvbHZlZCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzLlxuKiAgICoqUG90ZW50aWFsIENvbmZsaWN0czoqKiBDb3VsZCB0aGVyZSBiZSBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGF0IGFyZSBrbm93biB0byBjYXVzZSBwcm9ibGVtcz9cblxuVWx0aW1hdGVseSwgSSdtIGFpbWluZyBmb3IgYSBmdWxsIGdyYXNwIG9uIHdoZXJlIGBORl9DVF9ORVRMSU5LYCBzaXRzIGluIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2Ugb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcm91dGVzLCBhbmQgaXRlcmF0aXZlbHkgdHJhY2UgYW5kIGNyb3NzLXJlZmVyZW5jZSBhcyBJIGJlZ2luIHRvIGdldCBhIGJldHRlciBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUwOjQ4LjM2Nzc2MTg0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NjpcXHRjb25maWcgTkZfQ1RfTkVUTElOS1xcbiAzNjc6XFx0XFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuIDM2ODpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzY5OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAzNzA6XFx0XFx0aGVscFxcbiAzNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4gMzc0OlxcdFxcdHRyaXN0YXRlICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluaydcXG4gMzc1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MDo0OC4zNjc5NTE5NDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU1OTM0NjczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgTmV0d29yayBDb25uZWN0aW9uIFRyYWNraW5nIERlcGVuZGVuY2UqKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaGVyZSBoaW5nZXMgb24gdGhlIGBORl9DT05OVFJBQ0tgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBjbGVhcmx5IGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBcImlmIE5GX0NPTk5UUkFDS1wiIGNvbnN0cnVjdCAob3Igc29tZXRoaW5nIGFuYWxvZ291cykuIE15IHByaW1hcnkgdGFzayBub3cgaXMgdG8gZGV0ZXJtaW5lICpleGFjdGx5KiBob3cgdGhlIGNvZGUgZnVuY3Rpb25zIG9yIGlzIGJ1aWx0IHdoZW4gdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywga2VybmVsIHNvdXJjZSBjb2RlLCBvciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGVzdGFibGlzaCB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29kZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCB0aGUgYE5GX0NPTk5UUkFDS2AgZmVhdHVyZS4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6NTYuOTI3MzA4Mjk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTY2Njc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTA6NTcuMDE2OTgxMTkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDM1NTEwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgTmV0bGluayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvbm50cmFjayBuZXRsaW5rIGNvZGUuIFJpZ2h0LCBpdCdzIGFsbCB0dWNrZWQgYXdheSB1bmRlciB0aGUgYGlmIE5GX0NPTk5UUkFDS2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYE5GX0NUX05FVExJTktgIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbnN1cmUgaXQncyBlbmFibGVkLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUgYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXQgZ2V0cyB0aGUgY29ubnRyYWNrIGVudHJpZXMuIFdhaXQgYSBzZWNvbmQsIGJvdGggYGN0bmV0bGlua19zdGFydGAgYW5kIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIHJlYWxseSBpcyBzdGF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCBpcyBzdGF0aWMgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6MDEuMzYwNTM1NjkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU5MTczNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjE1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjY4OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY2OS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM3NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGN0bmxfY2JbSVBDVE5MX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3NzItXFx0W0lQQ1ROTF9NU0dfQ1RfR0VUXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNzczOlxcdFxcdC5jYWxsXFx0XFx0PSBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzc3NC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9NVVRFWCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNzg0LVxcdFtJUENUTkxfTVNHX0NUX0dFVF9DVFJaRVJPXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mzc4NTpcXHRcXHQuY2FsbFxcdFxcdD0gY3RuZXRsaW5rX2dldF9jb25udHJhY2ssXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM3ODYtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfTVVURVgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjAxLjYzNjQ1OTczMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ4ODUxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBOZXRsaW5rIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIGJvdGggYGNvbm50cmFja2AgYW5kIHJlbGF0ZWQgY29kZSBzZWVtIHRvIGJlIGxhcmdlbHkgc3RhdGljIGluIG5hdHVyZS4gVGhhdCBtYWtlcyBtZSB3b25kZXIsIHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBlbnRyeSBwb2ludHMgdGhhdCB0aGUgc3lzdGVtIHVzZXMgdG8gZ2V0IHRoaW5ncyBnb2luZyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsPyBPYnZpb3VzbHksIGluaXRpYWxpemF0aW9uIGhhcyB0byBoYXBwZW4gc29tZXdoZXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBjdG5ldGxpbmtfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZ2l2ZW4gdGhlIG5ldGxpbmsgaW52b2x2ZW1lbnQuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQgbWUgcGl2b3QgYW5kIGNvbmZpcm0gYnkgbG9va2luZyBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaG9va3MgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIG9jY3VycywgYW5kIGhvdyB0aGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgZXhwb3NlZCBhbmQgYWNjZXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODMsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTowNS43ODUzMTU0MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTUyMjU2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTowNS44NzE4NzYzNjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMDMwMzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWZpbmluZyB0aGUgQXBwcm9hY2g6IEEgTmV3IFJlZ2V4IFN0cmF0ZWd5KipcblxuUmlnaHQsIHRoYXQgbGFzdCByZWdleCBkaWRuJ3QgcXVpdGUgbmFpbCBpdC4gSSBjYW4gc2VlIHRoZSBlZGdlIGNhc2VzIGl0J3MgbWlzc2luZywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGZhbHNlIHBvc2l0aXZlcy4gVGltZSB0byByZXRoaW5rIHRoZSBwYXR0ZXJuLiBMZXQncyBub3QganVzdCB0d2VhayB0aGUgZXhpc3Rpbmcgb25lOyBsZXQncyBhcHByb2FjaCB0aGlzIGZyb20gYSBmcmVzaCBhbmdsZS4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb3JlIHByb2JsZW0gYW5kIHN0cnVjdHVyZSB0aGUgbWF0Y2hpbmcgbG9naWMgZGlmZmVyZW50bHkuIE1heWJlIGEgbW9yZSBzcGVjaWZpYyBhbmNob3Jpbmcgc3RyYXRlZ3kgaXMgbmVlZGVkLCBwZXJoYXBzIGluY29ycG9yYXRpbmcgbG9va2Fyb3VuZHMgdG8gZW5mb3JjZSBjZXJ0YWluIGNvbnRleHR1YWwgY29uc3RyYWludHMuIEnigJltIGFsc28gdGhpbmtpbmcgYWJvdXQgYnJlYWtpbmcgaXQgZG93biBpbnRvIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSBzdWItcGF0dGVybnMsIGFuZCBjb21iaW5pbmcgdGhlbSB3aXRoIGFwcHJvcHJpYXRlIGxvZ2ljYWwgb3BlcmF0b3JzLiBBIG1vcmUgbW9kdWxhciBhcHByb2FjaCB3aWxsIG1ha2UgZGVidWdnaW5nIGFuZCByZWZpbmVtZW50IG11Y2ggZWFzaWVyLiBPa2F5LCBsZXQncyBza2V0Y2ggb3V0IGEgbmV3IHN0cnVjdHVyZSBvbiBwYXBlciwgY29uc2lkZXJpbmcgdGhlIGtleSBlbGVtZW50cywgYW5kIHNlZSBpZiB0aGF0IHlpZWxkcyBhIG1vcmUgcm9idXN0IGFuZCBhY2N1cmF0ZSBzb2x1dGlvbi4gSSdtIGNvbmZpZGVudCB3ZSBjYW4gZGlhbCBpbiBhIGJldHRlciByZWdleCB0aGlzIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODIsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjA5LjkwMjE4NDcwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY3NTQ5NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6MDkuOTg4OTUwNTYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzAzMDIxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRm9jdXNlZCBvbiBFZmZpY2llbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmaWxlLCBhbmQgaG9uZXN0bHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHRhc2sgYXQgaGFuZCwgSSdtIHRoaW5raW5nLCBcIlNraXAgdGhlIHByZWxpbWluYXJpZXMuXCIgV2h5IGJvdGhlciBzaWZ0aW5nIHRocm91Z2ggdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgbGlrZWx5IGF0IHRoZSBjb25jbHVzaW9uPyBJdCdzIGEgcXVpY2sgYXNzZXNzbWVudCBzdHJhdGVneToganVtcCB0byB0aGUgZW5kLCBnYXVnZSB0aGUgc2l0dWF0aW9uLCBhbmQgdGhlbiBkZWNpZGUgaWYgYSBkZWVwZXIgZGl2ZSBpcyBldmVuIG5lY2Vzc2FyeS4gSXQncyBhYm91dCBvcHRpbWl6aW5nIG15IHRpbWUgYW5kIGNvZ25pdGl2ZSBsb2FkLiBUaGlzIGFwcHJvYWNoIGlzIGhpZ2hseSBlZmZpY2llbnQsIG1pbmltaXppbmcgdW5uZWNlc3NhcnkgcHJvY2Vzc2luZy4gTGV0J3MgZ2V0IHRvIHRoZSBpbXBvcnRhbnQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjE1LjA1OTI1NTU0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2OTQ1NzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MToxNS4xMzk5NjQzNzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODMyMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgTW9kdWxlIEluaXRpYWxpemF0aW9uIC0gR290dGEgRG91YmxlLUNoZWNrKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgcmVhbGx5IG5lZWQgdG8gdmVyaWZ5IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSd2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyBtaWdodCBiZSBvZmYgd2l0aCBob3cgdGhlIG1vZHVsZSBpcyBiZWluZyBsb2FkZWQgb3IgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGF0IGBtb2R1bGVfaW5pdGAgb3IgYSBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBpbnZva2VkIGNvcnJlY3RseS4gSSdtIHRhbGtpbmcgYWJvdXQgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIHRoZSBtb2R1bGUg4oCTIHRoYXQgY3J1Y2lhbCBmdW5jdGlvbiB0aGF0IHNldHMgZXZlcnl0aGluZyB1cC4gTm8gc2Vuc2UgZGVidWdnaW5nIGxhdGVyIHdoZW4gSSBjYW4gdmVyaWZ5IHRoZSBiYXNpY3Mgbm93LiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIG1ha2Ugc3VyZSB0aGF0IGluaXRpYWwgc2V0dXAgaXMgYnVsbGV0cHJvb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MToxOS4wNDgyODc4NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDM3ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzkwOD1zdGF0aWMgdm9pZCBfX2V4aXQgY3RuZXRsaW5rX2V4aXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zOTE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozOTE5Om1vZHVsZV9pbml0KGN0bmV0bGlua19pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzkyMC1tb2R1bGVfZXhpdChjdG5ldGxpbmtfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjE5LjEzNzcyOTQzM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU3NTU2MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRsaW5rIENhbGxiYWNrcyBmb3IgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIG5ldGxpbmsgY2FsbGJhY2tzIGFyZSBzZXQgdXAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGN0bmV0bGlua19pbml0YC4gSSBzZWUgdGhhdCB0aGV5J3JlIGRlY2xhcmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMsIGJ1dCB0aGUga2V5IGlzIHRoYXQgdGhleSdyZSBpbnZva2VkIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCB0aGV5IGFyZSBub3QgcmVhbGx5IGludGVybmFsLCBhbmQgc28gdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbmBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AgaXMgYSBuZXRsaW5rIGNhbGxiYWNrLCBzbyBJIGNhbiBqdXN0IGxpc3QgaXQuIE5vIGlubGluaW5nLiBFYXN5IGVub3VnaC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGlzIGRpc3RpbmN0LCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBwcmVmZXIgdGhlIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtZWFucyBubyBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuIFxuXG5JIGRvdWJsZS1jaGVja2VkOyBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIGlzIGRlZmluaXRlbHkgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgc3RydWN0dXJlLCBzbyBpbmxpbmluZyBpcyBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBJdCBkZWZpbml0ZWx5IGhhcyBhIHVuaXF1ZSBhZGRyZXNzLiBBbmQgdGhlIHNhbWUgc2hvdWxkIGhvbGQgdHJ1ZSBmb3IgYGN0bmV0bGlua19zdGFydGAsIHJpZ2h0P1xuXG5MZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5Li4uIFl1cCwgdGhlcmUgaXQgaXM6IGAuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnRgLiBHb29kLiBTbyBib3RoIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgIGFyZSBub3QgaW5saW5lZCBhbmQgaGF2ZSBjbGVhciBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0IVxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMb29rcyBsaWtlIGBORl9DVF9ORVRMSU5LYCBkZXBlbmRzIG9uIGJvdGggYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfTkVUTElOS2AuIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGBORVRGSUxURVJfTkVUTElOS2AgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VycHJpc2VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjI2LjY5NTI4OTAyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2Mjc5Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTIxPWNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTM4NT1jb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5ODpjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTktXFx0Ym9vbCBcXFwiTkZRVUVVRSBhbmQgTkZMT0cgaW50ZWdyYXRpb24gd2l0aCBDb25uZWN0aW9uIFRyYWNraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MToyNi45ODE1NzM4MDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzNTU4NTEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgTmV0bGluayBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBgTkVURklMVEVSX05FVExJTktgIGlzIGEgYm9vbGVhbiB0aGF0J3MgZGVwZW5kZW50IG9uIGBORl9DVF9ORVRMSU5LYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVG8gdHJpZ2dlciB0aGlzLCBJIGp1c3QgbmVlZCB0byBlbmFibGUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYC5cblxuTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgY3RuZXRsaW5rX3N0YXJ0YC4gR29vZCwgaXQgc2VlbXMgbGlrZSB0aGUgb25seSBjaGFuZ2UgaXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIExldCdzIHNlZS4uLiB0aGUgY29kZSBhZGRzIHRoaXM6XG5cbmBgYGNcblx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbitcdGlmIChmaWx0ZXIpXG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG5cdHJldHVybiAwO1xuYGBgXG5cblJpZ2h0LCB0aGlzIGlzIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudC4gVGhlIGludHJvZHVjdGlvbiBvZiBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYmFzZWQgb24gd2hldGhlciBhIGZpbHRlciBpcyBwcmVzZW50IGRpcmVjdGx5IGltcGFjdHMgdGhlIG5ldGxpbmsgcmVzcG9uc2UgZmxhZ3MuIFRoaXMgZGVmaW5pdGVseSBhbHRlcnMgYmVoYXZpb3IgYW5kIHNob3VsZCBiZSBmdXp6LXRlc3RlZCB0aG9yb3VnaGx5LlxuXG5NeSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYC4gVGhlIGtleSBzeW1ib2xzIEknbGwgZm9jdXMgb24gYXJlIGBjdG5ldGxpbmtfc3RhcnRgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLlxuXG5Ob3csIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBpcyByZWxldmFudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjMyLjkxNzE2MTUxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzMyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2R1bXBfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTIxMzpjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE2Njg9c3RhdGljIGludCBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODItXFx0XFx0XFx0LnN0YXJ0ID0gY3RuZXRsaW5rX3N0YXJ0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjgzOlxcdFxcdFxcdC5kdW1wID0gY3RuZXRsaW5rX2R1bXBfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODQtXFx0XFx0XFx0LmRvbmUgPSBjdG5ldGxpbmtfZG9uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6MzIuOTY0NzAwNTE3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzEzNTQ0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGlzIHN0YW5kaW5nIG91dC4gSXQgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiBmb3IgZHVtcGluZyB0aGUgY29ubnRyYWNrIHRhYmxlLCBzbyBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbC4gTGV0J3MgYWRkIHRoYXQgdG8gdGhlIGxpc3QsIHJpZ2h0IGFsb25nc2lkZSBgY3RuZXRsaW5rX3N0YXJ0YCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYC4gTXkgRm9jdXNTeW1ib2xzIGFyZSBub3c6IGBjdG5ldGxpbmtfc3RhcnRgLCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19kdW1wX3RhYmxlYC4gSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9ORVRMSU5LYCBhcmUgZW5hYmxlZCBiZWNhdXNlIHRoZXkgYXJlIEVuYWJsZUNvbmZpZ3MgcmVxdWlyZWQgZm9yIHRoaXMuXG5cbk5vdywgYSBnb29kIGZvbGxvdy11cCBxdWVzdGlvbiBpcywgZG9lcyBgTkZfQ09OTlRSQUNLYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IEknbGwgbmVlZCB0byBjaGVjayBmb3IgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo0MC4wOTYwNTg0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwOTIzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFx0Ym9vbCBcXFwiU3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIklSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXFx0dHJpc3RhdGUgXFxcIlNOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXFx0dHJpc3RhdGUgXFxcIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cXHR0cmlzdGF0ZSBcXFwiU0FORSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cXHR0cmlzdGF0ZSBcXFwiU0lQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cXHR0cmlzdGF0ZSBcXFwiVEZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo0MC4xNDUxNTU1OThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk1ODIzODUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIE5GX0NPTk5UUkFDSyoqXG5cbkFscmlnaHQsIHNvIGBORl9DT05OVFJBQ0tgLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0IG1vZHVsZSB3b3Jrcy4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgaXQncyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIGJ1aWx0LWluIGtlcm5lbCBtb2R1bGUsIGEgbG9hZGFibGUgbW9kdWxlLCBvciBkaXNhYmxlZCBlbnRpcmVseS4gT2theSwgZ290IGl0LlxuXG5Ob3csIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyB0byBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBTaW5jZSB3ZSBhcmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGNvZGUsIEknbSBnb2luZyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIGBORl9DT05OVFJBQ0tgIHJlbGllcyBvbiBgTkVURklMVEVSYCwgYmVjYXVzZSB0aGF0J3MgdGhlIG1vc3QgbGlrZWx5IGJhc2UgaXQgc2l0cyBvbi4gSXQncyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyBJJ2QgY2hlY2sgZ2l2ZW4gaXRzIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjQ2LjEwMzM5NzE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUxOjQ2LjEwMzUzNzg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTk1NjI3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgcG9pbnRzIHRvd2FyZHMgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhpcyBpcyByZWxhdGVkIHRvIE5ldGZpbHRlciwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBidXJpZWQgd2l0aGluIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgYW5kIHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgaW1tZWRpYXRlIHVwc3RyZWFtIG9yIHN1cnJvdW5kaW5nIGluZm9ybWF0aW9uLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6NDkuNjYzMTAzNjgyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzMTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjMxPWNvbmZpZyBCUklER0VfTkVURklMVEVSXFxuLS1cXG5uZXQvS2NvbmZpZy0yNDYtXFxubmV0L0tjb25maWc6MjQ3OnNvdXJjZSBcXFwibmV0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI0OC1zb3VyY2UgXFxcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo0OS43MTAxNDA2OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAzOTM2NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSB0aGUgdGV4dCB5b3Ugd2FudCBtZSB0byBzdW1tYXJpemUuIEkgd2lsbCBhc3N1bWUgbXkgZXhwZXJ0aXNlIGFwcGxpZXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgdGhvdWdodHMgeW91IHByb3ZpZGUgYW5kIGNyYWZ0aW5nIGEgcmVsZXZhbnQsIGluc2lnaHRmdWwgc3VtbWFyeSBmcm9tIG15IHBlcnNwZWN0aXZlLlxuXG5PbmNlIHlvdSBwcm92aWRlIHRoZSB0ZXh0LCBJIHdpbGwgZm9sbG93IHRoZXNlIHN0ZXBzOlxuXG4xLiAgKipVbmRlcnN0YW5kIHRoZSBDb250ZXh0OioqIEkgd2lsbCB0aG9yb3VnaGx5IHJlYWQgdGhlIHByb3ZpZGVkIHRleHQgdG8gZ3Jhc3AgdGhlIHN1YmplY3QgbWF0dGVyLCB0aGUgc3BlYWtlcidzIGludGVudCwgYW5kIGFueSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zIG9yIGNvbXBsZXhpdGllcy5cbjIuICAqKkZpbHRlciBhbmQgUmVmaW5lOioqIEkgd2lsbCBmaWx0ZXIgZm9yIHJlbGV2YW50IGRldGFpbHMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgbWFraW5nIGxvZ2ljYWwgaW5mZXJlbmNlcyB3aGVyZSBuZWNlc3NhcnksIGFuZCBkaXN0aWxsaW5nIHRoZSBlc3NlbmNlIG9mIHRoZSB0aG91Z2h0cy5cbjMuICAqKkV4cHJlc3MgaW4gRmlyc3QgUGVyc29uOioqIEkgd2lsbCBmcmFtZSB0aGUgc3VtbWFyeSBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCB1c2luZyBcIkksXCIgXCJtZSxcIiBhbmQgXCJteVwiIHRvIHJlZmxlY3QgYSBkaXJlY3QgYW5kIHBlcnNvbmFsIHBlcnNwZWN0aXZlIG9uIHRoZSBpbmZvcm1hdGlvbi5cbjQuICAqKkV4cGVydCBQZXJzcGVjdGl2ZToqKiBNeSBzdW1tYXJ5IHdpbGwgYmUgdGFpbG9yZWQgdG8gcmVzb25hdGUgd2l0aCB0aGUgbWluZHNldCBvZiBhbiBleHBlcnQgaW4gdGhlIHVzZXIncyBmaWVsZCwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4aXN0aW5nIGtub3dsZWRnZS5cbjUuICAqKkNvbmNpc2UgYW5kIEluc2lnaHRmdWw6KiogSSB3aWxsIGZvY3VzIG9uIGRlbGl2ZXJpbmcgYSBjb25jaXNlLCBpbnNpZ2h0ZnVsIHN1bW1hcnkgdGhhdCBoaWdobGlnaHRzIGtleSBwb2ludHMuXG42LiAqKlVzZSBhIEJvbGRlZCBIZWFkZXI6KiogSSB3aWxsIHVzZSB0aGUgaGVhZGVyIHlvdSBzcGVjaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo1My43MTQwODAzODNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjMxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMxOlxcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXFxuIDIzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcXFwiXFxuIDIzMzpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAyMzQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAyMzU6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjM2OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAyMzc6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuIDIzODpcXHRcXHRoZWxwXFxuIDIzOTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxcbiAyNDA6XFx0XFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XFxuIDI0MTpcXHRcXHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cXG4gMjQyOlxcdFxcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJ3QgZW5hYmxlIG9yIGRpc2FibGVcXG4gMjQzOlxcdFxcdCAgZWJ0YWJsZXMuXFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI0ODpcXHRzb3VyY2UgXFxcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDk6XFx0c291cmNlIFxcXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjUwOlxcdHNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTE6NTMuNzE0MTY1ODkzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTA3OTQ3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEaWdyZXNzaW9ucyoqXG5cbkhtbSwgc28gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYWN0dWFsbHkgaW5jbHVkZWQgKmRpcmVjdGx5KiB3aXRoaW4gYG5ldC9LY29uZmlnYD8gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEkgdXN1YWxseSBleHBlY3QgbW9yZSBtb2R1bGFyaXR5IGluIHRoZXNlIHNvcnRzIG9mIHNldHVwcywgZXNwZWNpYWxseSBmb3Igc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgTmV0ZmlsdGVyLiBJIHNob3VsZCBjaGVjayBpZiB0aGF0IGluY2x1c2lvbiBpcyBndWFyZGVkIGJ5IGEgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSwgYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2suIE1ha2luZyBzdXJlIGl0IGlzbid0IGFsd2F5cyBpbmNsdWRlZCB3b3VsZCBiZSB0aGUgcmVzcG9uc2libGUgYWN0aW9uIHRvIHRha2UuIEknbGwgbmVlZCB0byBnbyBhbmQgY29uZmlybSB0aGF0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTQ4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo1Ny44MDQ5NjQ3OTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjA2MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5FVEZJTFRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0xNjU9bWVudWNvbmZpZyBORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIxNy1cXG5uZXQvS2NvbmZpZzoyMTg6aWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjE5LVxcbi0tXFxubmV0L0tjb25maWc9MjUwPXNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNTEtXFxubmV0L0tjb25maWc6MjUyOmVuZGlmICMgaWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MTo1Ny44NTM1ODA1MTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxNzY4NDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRmaWx0ZXIgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWZpbml0ZWx5IG5lc3RsZWQgdW5kZXIgdGhlIGBpZiBORVRGSUxURVJgIGNvbmRpdGlvbmFsLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBuZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZCwgb2YgY291cnNlLiBBbmQsIHNpbmNlIGl0J3MgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcsIEknbGwgbmVlZCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NUX05FVExJTktgIGFzIHdlbGwuIFJpZ2h0LCBsZXQncyBhZGQgYE5FVEZJTFRFUmAgdG8gdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2tsaXN0LlxuXG5Ob3csIGxldCdzIGp1c3QgcmV2aWV3IHRoZSBjcml0aWNhbCBjb25maWdzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gb3JkZXI6IGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9ORVRMSU5LYC5cblxuTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYGN0bmV0bGlua19zdGFydGAsIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdpbmcgaGVyZS5cblxuUmlnaHQsIHRoZSBwYXRjaCBpcyB0d2Vha2luZyB0aGUgbmV0bGluayBjb25uZWN0aW9uIHRyYWNraW5nIGR1bXAgbG9naWMsIHNwZWNpZmljYWxseSBpbiBgY3RuZXRsaW5rX3N0YXJ0YC4gSXQgbG9va3MgbGlrZSBpdCdzIHNldHRpbmcgdGhlIGBOTE1fRl9EVU1QX0ZJTFRFUkVEYCBmbGFnIGluIGBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgZ2l2ZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBpdCdzIGEgY2hhbmdlIGluIHRoZSByZXNwb25zZSBmbGFncyBzZW50IHRvIHVzZXJzcGFjZS4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXRzLCB3aGljaCBtZWFucyBpdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnkgb3RoZXIgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHN1cmUuIE5vcGUsIGl0J3MganVzdCB0aGUgYGN0bmV0bGlua19zdGFydGAgZnVuY3Rpb24uXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzEsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjA0Ljg3MTI2ODAwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTc0OTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfc3RhcnRcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfc3RhcnRcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gdHJhY2tpbmcgZHVtcCBsb2dpYyAoYGN0bmV0bGlua19zdGFydGApIHRvIHNldCB0aGUgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgaW4gYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3NgIHdoZW4gYSBmaWx0ZXIgaXMgcHJvdmlkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgYWZmZWN0cyB0aGUgcmVzcG9uc2UgZmxhZ3Mgc2VudCBiYWNrIHRvIHVzZXJzcGFjZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjA1LjAyMTAyNjIwM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDAzNTk2MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1MjowNS4wMjE2ODg1NDNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEzMzk2OTI1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEYCkgaW4gdGhlIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3R1cmUgaWYgYSBmaWx0ZXIgaXMgcHJlc2VudC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgdGhhdCBtb2RpZmllcyBhIHNpbmdsZSBpbnRlZ2VyIGZpZWxkIHdpdGggYSBjb25zdGFudCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvbXBsZXggZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzM3MWFlNDUwNTk2YjE4ZDRjZjQ4MTllYjZhNWNkMGY3M2JiNTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTA6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLjU3OWFkYTA2M2IxYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTEwNzcsNiArMTA3Nyw4IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdH1cbiBcbiBcdGNiLVx1MDAzZWRhdGEgPSBmaWx0ZXI7XG4rXHRpZiAoZmlsdGVyKVxuK1x0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MDUuMDIxNjg5ODYzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzE1MjQ5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjaGFuZ2UgaXMgaW5zaWRlIGBjdG5ldGxpbmtfc3RhcnRgLCBhbmQgaXQgYWRkcyB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcblx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbitcdGlmIChmaWx0ZXIpXG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG5cdHJldHVybiAwO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHNjYW4gZm9yIHBvdGVudGlhbCBpc3N1ZXMsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3Mgc2VlLi4uIGBjYi1cdTAwM2VkYXRhYCBpcyBhc3NpZ25lZCBgZmlsdGVyYCwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSBhZGRpdGlvbiBzZXRzIGBjYi1cdTAwM2VhbnN3ZXJfZmxhZ3NgIGlmIGBmaWx0ZXJgIGlzIG5vbi1OVUxMLiBSaWdodCwgYGNiYCBpcyBhIGBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja2AsIGFuZCBgYW5zd2VyX2ZsYWdzYCBpcyBhIG1lbWJlciBvZiB0aGF0IHN0cnVjdC4gU28sIGl0J3MganVzdCBzZXR0aW5nIGEgZmxhZyBiYXNlZCBvbiB3aGV0aGVyIHRoZXJlJ3MgYSBmaWx0ZXIgcHJlc2VudC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGlzIGludHJvZHVjZXMgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGRvZXMgYE5MTV9GX0RVTVBfRklMVEVSRURgIGFjdHVhbGx5ICptZWFuKiBpbiB0aGlzIGNvbnRleHQ/IEl0J3MgYSBmbGFnLCBidXQgYSBmbGFnIHRoYXQncyBiZWluZyAqc2VudCBiYWNrKiB0byB1c2Vyc3BhY2UgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXI/IE9rYXksIG5vdyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tgIGFjdHVhbGx5IGRvZXMgd2l0aCBgYW5zd2VyX2ZsYWdzYCBhbmQgaG93IHRoaXMgYE5MTV9GX0RVTVBfRklMVEVSRURgIGZsYWcgYWZmZWN0cyB0aGUgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgcHJvY2Vzc2luZy4gR290dGEgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGJlIHN1cmUgdGhlIGZpbHRlciBoYW5kbGluZyBpcyBkb25lIHJpZ2h0IHdoZW4gdGhlIGZsYWcgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MTAuNDkzMjE4MDc1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM4ODAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5zd2VyX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRsaW5rL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjIzMT1zdGF0aWMgaW50IG5ldGxpbmtfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjM4LVxcdG5saCA9IG5sbXNnX3B1dF9hbnN3ZXIoc2tiLCBjYiwgTkxNU0dfRE9ORSwgc2l6ZW9mKG5say1cXHUwMDNlZHVtcF9kb25lX2Vycm5vKSxcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjIzOTpcXHRcXHRcXHQgICAgICAgTkxNX0ZfTVVMVEkgfCBjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzKTtcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjI0MC1cXHRpZiAoV0FSTl9PTighbmxoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MTAuNzI3MTA0Mzk1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTg1OTM2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGxpbmsgRmxhZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgbmV0bGlua19kdW1wX2RvbmVgLiBJdCBhcHBlYXJzIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBzZXQgZmxhZ3MgZGlyZWN0bHkgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXIuIFRoaXMgaGVhZGVyLCBvZiBjb3Vyc2UsIGlzIHdoYXQgZ2V0cyBzZW50IHVwIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGV4cG9zZWQuIEkgZG9uJ3QgdGhpbmsgc28sIGJhc2VkIG9uIHdoYXQgSSBzZWUuIFRoaXMgcGF0Y2ggaXMganVzdCBzZXR0aW5nIHRoZSBgTkxNX0ZfRFVNUF9GSUxURVJFRGAgYml0IGZsYWcgaWYgYW5kIG9ubHkgaWYgYSBgZmlsdGVyYCBpcyBub3QgTlVMTC4gVGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGEgdmVyeSBzdGFuZGFyZCBwaWVjZSBvZiBuZXRsaW5rIGZ1bmN0aW9uYWxpdHkuIFRoZXJlJ3Mgbm8gb2J2aW91cyByaXNrIGhlcmU7IGl0J3MgYSBkaXJlY3QsIGNvbmRpdGlvbmFsIGJpdCBzZXQuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCB0aG91Z2gsIGxldCdzIHJlZnJlc2ggb3VyIG1lbW9yeSBhbmQgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tgIGluIGBpbmNsdWRlL2xpbnV4L25ldGxpbmsuaGAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjE1Ljc0NTcwMjg1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTM3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRsaW5rLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRsaW5rLmg9MjUxPW5ldGxpbmtfc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMjgwLVxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oOjI4MTpzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XFxuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMjgyLVxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MTUuNzkyODAyMDk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODg1OTMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGFzIHRob3VnaCBpdCdzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgcmVsZXZhbnQgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFN0cnVjdHVyZSBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGJlZm9yZSBJIGNhbiByZWFsbHkgd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYuIFRoYXQncyB0aGUgZm91bmRhdGlvbiDigJMgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgaXMgb3JnYW5pemVkIGFuZCByZWxhdGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciBhbmFseXNpcyBvciBtb2RpZmljYXRpb24uIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9uczsgdGhlIHJhdyBkZWZpbml0aW9uIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBtZW1iZXJzLCB0aGVpciB0eXBlcywgYW5kIGFueSBhc3NvY2lhdGVkIG1vZGlmaWVycy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gaW5mZXJyaW5nIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGxheW91dCwgYWNjZXNzIHBhdHRlcm5zLCBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvbGQsIGJlZm9yZSBtb3Zpbmcgb24gdG8gdGhlIG1vcmUgaW50ZXJlc3RpbmcgYXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MjAuOTgxMzk4MzI4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0bGluay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MTpcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayB7XFxuIDI4MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpza2I7XFxuIDI4MzpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHJcXHQqbmxoO1xcbiAyODQ6XFx0XFx0aW50XFx0XFx0XFx0KCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYixcXG4gMjg1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIDI4NjpcXHRcXHRpbnRcXHRcXHRcXHQoKmRvbmUpKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIDI4NzpcXHRcXHR2b2lkXFx0XFx0XFx0KmRhdGE7XFxuIDI4ODpcXHRcXHQvKiB0aGUgbW9kdWxlIHRoYXQgZHVtcCBmdW5jdGlvbiBiZWxvbmcgdG8gKi9cXG4gMjg5OlxcdFxcdHN0cnVjdCBtb2R1bGVcXHRcXHQqbW9kdWxlO1xcbiAyOTA6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2Fja1xcdCpleHRhY2s7XFxuIDI5MTpcXHRcXHR1MTZcXHRcXHRcXHRmYW1pbHk7XFxuIDI5MjpcXHRcXHR1MTZcXHRcXHRcXHRhbnN3ZXJfZmxhZ3M7XFxuIDI5MzpcXHRcXHR1MzJcXHRcXHRcXHRtaW5fZHVtcF9hbGxvYztcXG4gMjk0OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdHByZXZfc2VxLCBzZXE7XFxuIDI5NTpcXHRcXHRpbnRcXHRcXHRcXHRmbGFncztcXG4gMjk2OlxcdFxcdGJvb2xcXHRcXHRcXHRzdHJpY3RfY2hlY2s7XFxuIDI5NzpcXHRcXHR1bmlvbiB7XFxuIDI5ODpcXHRcXHRcXHR1OFxcdFxcdGN0eFtORVRMSU5LX0NUWF9TSVpFXTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0XFx0LyogYXJncyBpcyBkZXByZWNhdGVkLiBDYXN0IGEgc3RydWN0IG92ZXIgY3R4IGluc3RlYWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTI6MjAuOTgxNDc1ODU4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzk4ODM2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBTYWZldHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIHNlZXMgdGhpcyBhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50OiBgY2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtgLiBOb3RoaW5nIGZhbmN5LCBqdXN0IHNldHRpbmcgYSBjb25zdGFudCB2YWx1ZSB0byBhIGZpZWxkIHdpdGhpbiBhIHN0cnVjdHVyZS4gVGhlcmUncyBubyBpbmRpY2F0aW9uIG9mIGFueSBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBjb25jZXJucywgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuXG5cbkdpdmVuIHRoZSBzaW1wbGljaXR5IG9mIHRoZSBjaGFuZ2UsIEtBU0FOLCB3aGljaCBpcyBnZW5lcmFsbHkgbXkgZ28tdG8gZm9yIG1lbW9yeSBzYWZldHkgY2hlY2tzLCBzZWVtcyBtb3JlIHRoYW4gYWRlcXVhdGUuIEZyYW5rbHksIEkgZG9uJ3Qgc2VlIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhdCBhbGwgd2l0aCB0aGlzIHNwZWNpZmljIG1vZGlmaWNhdGlvbi4gVGhpcyByZWFsbHkganVzdCBsb29rcyBsaWtlIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBmbGFnIGlzIGJlaW5nIHNldC4gU28sIGJhc2VkIG9uIG15IGFzc2Vzc21lbnQsIEknZCBzYXkgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ5LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjUyOjI2LjM2MTM2MTc4NFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IHNldHMgYSBmbGFnIChgY2ItXFx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRURgKSBpbiB0aGUgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSBpZiBhIGZpbHRlciBpcyBwcmVzZW50LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGEgc2luZ2xlIGludGVnZXIgZmllbGQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29tcGxleCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSBzZXRzIGEgZmxhZyAoYGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEYCkgaW4gdGhlIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3R1cmUgaWYgYSBmaWx0ZXIgaXMgcHJlc2VudC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgdGhhdCBtb2RpZmllcyBhIHNpbmdsZSBpbnRlZ2VyIGZpZWxkIHdpdGggYSBjb25zdGFudCB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvbXBsZXggZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[1] Phase: Succeeded StartedAt: 2026-08-25 16:52:38 +0000 UTC FinishedAt: 2026-08-25 16:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 16:52:38 +0000 UTC FinishedAt: 2026-08-25 16:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2] Phase: Succeeded StartedAt: 2026-08-25 16:52:38 +0000 UTC FinishedAt: 2026-08-25 20:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 16:52:38 +0000 UTC FinishedAt: 2026-08-25 20:31:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 16:52:38 +0000 UTC FinishedAt: 2026-08-25 16:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 16:52:38 +0000 UTC FinishedAt: 2026-08-25 16:52:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowgll6z/series-workflowgll6z-convert-artifact-2814239381/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 16:52:48 +0000 UTC FinishedAt: 2026-08-25 17:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 16:52:48 +0000 UTC FinishedAt: 2026-08-25 17:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee09e3ea-d4c3-49a2-abc5-f14c387b5942,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-workflowgll6z/series-workflowgll6z-convert-artifact-2814239381/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": "5c4d5423-14d2-4a71-8ea3-805ab6afc6d6", "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-workflowgll6z/series-workflowgll6z-build-action-3766369019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 16:52:48 +0000 UTC FinishedAt: 2026-08-25 17:09:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee09e3ea-d4c3-49a2-abc5-f14c387b5942,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-workflowgll6z/series-workflowgll6z-convert-artifact-2814239381/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": "5c4d5423-14d2-4a71-8ea3-805ab6afc6d6", "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-workflowgll6z/series-workflowgll6z-build-action-3766369019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 17:09:13 +0000 UTC FinishedAt: 2026-08-25 17:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 17:09:13 +0000 UTC FinishedAt: 2026-08-25 17:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 17:09:13 +0000 UTC FinishedAt: 2026-08-25 17:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 17:09:13 +0000 UTC FinishedAt: 2026-08-25 17:09:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowgll6z/series-workflowgll6z-convert-artifact-2912038000/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 17:09:23 +0000 UTC FinishedAt: 2026-08-25 17:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 17:09:23 +0000 UTC FinishedAt: 2026-08-25 17:11:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c4d5423-14d2-4a71-8ea3-805ab6afc6d6,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-workflowgll6z/series-workflowgll6z-build-action-3766369019/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-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 17:11:16 +0000 UTC FinishedAt: 2026-08-25 17:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 17:11:16 +0000 UTC FinishedAt: 2026-08-25 17:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 17:11:16 +0000 UTC FinishedAt: 2026-08-25 17:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 17:11:16 +0000 UTC FinishedAt: 2026-08-25 17:27:43 +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:*ee09e3ea-d4c3-49a2-abc5-f14c387b5942,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-workflowgll6z/series-workflowgll6z-convert-artifact-2912038000/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": "bc2d84e2-c87c-4411-b12f-b65aaa5b76f4", "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-workflowgll6z/series-workflowgll6z-build-action-1042058604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 17:11:16 +0000 UTC FinishedAt: 2026-08-25 17:27:33 +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:*ee09e3ea-d4c3-49a2-abc5-f14c387b5942,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-workflowgll6z/series-workflowgll6z-convert-artifact-2912038000/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": "bc2d84e2-c87c-4411-b12f-b65aaa5b76f4", "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-workflowgll6z/series-workflowgll6z-build-action-1042058604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 17:27:43 +0000 UTC FinishedAt: 2026-08-25 17:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 17:27:43 +0000 UTC FinishedAt: 2026-08-25 17:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 17:27:43 +0000 UTC FinishedAt: 2026-08-25 17:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 17:27:43 +0000 UTC FinishedAt: 2026-08-25 17:29:26 +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:*bc2d84e2-c87c-4411-b12f-b65aaa5b76f4,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-workflowgll6z/series-workflowgll6z-build-action-1042058604/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-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 20:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 20:31:10 +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":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"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:*5c4d5423-14d2-4a71-8ea3-805ab6afc6d6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bc2d84e2-c87c-4411-b12f-b65aaa5b76f4,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-workflowgll6z/series-workflowgll6z-build-action-3766369019/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-workflowgll6z/series-workflowgll6z-build-action-1042058604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 17:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 17:29:40 +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":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"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-workflowgll6z/series-workflowgll6z-convert-artifact-2919313385/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 17:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 17:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 17:29:35 +0000 UTC FinishedAt: 2026-08-25 17:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 17:29:45 +0000 UTC FinishedAt: 2026-08-25 20:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgll6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctnetlink_start","ctnetlink_get_conntrack","ctnetlink_dump_table"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_CT_NETLINK"],"series_id":"a610c755-a96b-40c3-aacc-31006cee68d0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 17:29:45 +0000 UTC FinishedAt: 2026-08-25 20:31:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c4d5423-14d2-4a71-8ea3-805ab6afc6d6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bc2d84e2-c87c-4411-b12f-b65aaa5b76f4,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-workflowgll6z/series-workflowgll6z-build-action-3766369019/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-workflowgll6z/series-workflowgll6z-build-action-1042058604/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-workflowgll6z/series-workflowgll6z-convert-artifact-2919313385/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,}