Name: series-workflowncqhm Phase: Succeeded StartedAt: 2026-06-26 16:50:58 +0000 UTC FinishedAt: 2026-06-26 21:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[0] Phase: Succeeded StartedAt: 2026-06-26 16:50:58 +0000 UTC FinishedAt: 2026-06-26 16:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 16:50:58 +0000 UTC FinishedAt: 2026-06-26 16:59:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "972c4dd19cb92e03d75b66c426cfade07582a1ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "972c4dd19cb92e03d75b66c426cfade07582a1ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "34579119-2aa2-4230-8c8a-d63da7df7146" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "regdb_load", "regdb_fw_cb_restore", "query_regdb_file", "reg_reload_regdb", "wiphy_regulatory_register" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnZGJfbG9hZCYjMzQ7LAogICAgJiMzNDtyZWdkYl9md19jYl9yZXN0b3JlJiMzNDssCiAgICAmIzM0O3F1ZXJ5X3JlZ2RiX2ZpbGUmIzM0OywKICAgICYjMzQ7cmVnX3JlbG9hZF9yZWdkYiYjMzQ7LAogICAgJiMzNDt3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgbG9hZGluZyB0aGUgYHJlZ3VsYXRvcnkuZGJgIGZpcm13YXJlIGluIHRoZSBjZmc4MDIxMSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgYHJlZ2RiX2xvYWRgIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGhvdyBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aHMgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSBkdXJpbmcgd2lwaHkgcmVnaXN0cmF0aW9uIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZmlybXdhcmUgbG9hZGluZyBhbmQgcmVndWxhdG9yeSByZWdpc3RyYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTY6NTg6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jXG5pbmRleCAxZTgyMTRkNmI2ZDg4MS4uZDdiODY0ZDMyYmExZWEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTk4OCw3OCAmIzQzOzk4OCw5OCBAQCBzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiKGNvbnN0IGNoYXIgKmFscGhhMilcbiBcdHJldHVybiAtRU5PREFUQTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVnZGJfZndfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFwmIzM0O3JlZ3VsYXRvcnkuZGJcJiMzNDspO1xuJiM0MztcbiYjNDM7LyogVmFsaWRhdGUgYW5kIHN0b3JlIGZpcm13YXJlIGltYWdlIGFzIHJlZ2RiLiBVc2VkIGJ5IGFsbCBsb2FkIHBhdGhzLiAqL1xuJiM0MztzdGF0aWMgaW50IHJlZ2RiX2xvYWQoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiB7XG4tXHRpbnQgc2V0X2Vycm9yID0gMDtcbi1cdGJvb2wgcmVzdG9yZSA9IHRydWU7XG4gXHR2b2lkICpkYjtcbiBcbi1cdGlmICghZncpIHtcbi1cdFx0cHJfaW5mbyhcJiMzNDtmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxuXCYjMzQ7KTtcbi1cdFx0c2V0X2Vycm9yID0gLUVOT0RBVEE7XG4tXHR9IGVsc2UgaWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmICghdmFsaWRfcmVnZGIoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSkpIHtcbiBcdFx0cHJfaW5mbyhcJiMzNDtsb2FkZWQgcmVndWxhdG9yeS5kYiBpcyBtYWxmb3JtZWQgb3Igc2lnbmF0dXJlIGlzIG1pc3NpbmcvaW52YWxpZFxcblwmIzM0Oyk7XG4tXHRcdHNldF9lcnJvciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRkYiA9IGttZW1kdXAoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkYilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZWdkYiA9IGRiO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWdkYl9md19jYl9yZXN0b3JlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHJ0bmxfbG9jaygpO1xuLVx0aWYgKHJlZ2RiIFx1MDAyNlx1MDAyNiAhSVNfRVJSKHJlZ2RiKSkge1xuLVx0XHQvKiBuZWdhdGl2ZSBjYXNlIC0gYSBidWdcbi1cdFx0ICogcG9zaXRpdmUgY2FzZSAtIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2UgaW4gY2FzZSBvZiBtdWx0aXBsZSBjYiYjMzk7cyBpblxuLVx0XHQgKiBxdWV1ZSwgZHVlIHRvIHVzYWdlIG9mIGFzeW5jaHJvbm91cyBjYWxsYmFja1xuLVx0XHQgKlxuLVx0XHQgKiBFaXRoZXIgY2FzZSwganVzdCByZXN0b3JlIGFuZCBmcmVlIG5ldyBkYi5cbi1cdFx0ICovXG4tXHR9IGVsc2UgaWYgKHNldF9lcnJvcikge1xuLVx0XHRyZWdkYiA9IEVSUl9QVFIoc2V0X2Vycm9yKTtcbi1cdH0gZWxzZSBpZiAoZncpIHtcbi1cdFx0ZGIgPSBrbWVtZHVwKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuLVx0XHRpZiAoZGIpIHtcbi1cdFx0XHRyZWdkYiA9IGRiO1xuLVx0XHRcdHJlc3RvcmUgPSBjb250ZXh0IFx1MDAyNlx1MDAyNiBxdWVyeV9yZWdkYihjb250ZXh0KTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXN0b3JlID0gdHJ1ZTtcbi1cdFx0fVxuLVx0fVxuIFxuLVx0aWYgKHJlc3RvcmUpXG4mIzQzO1x0LyogU2tpcCBpZiBhIGNvbmN1cnJlbnQgd2lwaHkgcmVnaXN0cmF0aW9uIGFscmVhZHkgbG9hZGVkIHRoZSBkYi4gKi9cbiYjNDM7XHRpZiAocmVnZGIgXHUwMDI2XHUwMDI2ICFJU19FUlIocmVnZGIpKVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlcGxheSBhbGwgcGVuZGluZyByZWd1bGF0b3J5IGhpbnRzIHRoYXQgYXJyaXZlZCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBkYXRhYmFzZSB3YXMgbm90IHlldCBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgbG9hZCBvdXRjb21lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZncpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgcmVndWxhdG9yeS5kYlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZWdkYiA9IEVSUl9QVFIoLUVOT0RBVEEpO1xuIFx0XHRyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSwgZmFsc2UpO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiBcbi1cdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0ZXJyID0gcmVnZGJfbG9hZChmdyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJlZ2RiID0gRVJSX1BUUihlcnIpO1xuIFxuLVx0a2ZyZWUoY29udGV4dCk7XG4mIzQzO1x0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcbiBcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gfVxuIFxuLU1PRFVMRV9GSVJNV0FSRShcJiMzNDtyZWd1bGF0b3J5LmRiXCYjMzQ7KTtcbi1cbiBzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuIFx0aW50IGVycjtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4tXHRpZiAocmVnZGIpXG4mIzQzO1x0aWYgKHJlZ2RiIFx1MDAyNlx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcbiBcdFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XG4gXG4tXHRhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWFscGhhMilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMb2FkIGZhaWxlZCBvciBhc3luYyB1ZGV2IGxvYWQgaW4gcHJvZ3Jlc3MuIElmIC1FSU5QUk9HUkVTUyxcbiYjNDM7XHQgKiBoaW50cyBhcmUgcHJlc2VydmVkIGFuZCByZXBsYXllZCBvbmNlIHRoZSB1ZGV2IGxvYWQgY29tcGxldGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19FUlIocmVnZGIpIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHJlZ2RiKSAhPSAtRUlOUFJPR1JFU1MpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyZWdkYik7XG4gXG4tXHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgXCYjMzQ7cmVndWxhdG9yeS5kYlwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNnJlZ19mZGV2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCxcbi1cdFx0XHRcdCAgICAgICh2b2lkICopYWxwaGEyLCByZWdkYl9md19jYik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVzZXJ2ZSB0aGUgaGludCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgb24gZGlyZWN0IHBhdGhzO1xuJiM0MztcdCAqIGFuIGFzeW5jIHVkZXYgbG9hZCB3aWxsIGJlIHRyaWdnZXJlZCBvbiB3aXBoeSByZWdpc3RyYXRpb25cbiYjNDM7XHQgKiBhbmQgd2lsbCByZXBsYXkgYWxsIHBlbmRpbmcgaGludHMgb24gY29tcGxldGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZmdywgXCYjMzQ7cmVndWxhdG9yeS5kYlwmIzM0OywgXHUwMDI2cmVnX2ZkZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChlcnIpXG4tXHRcdGtmcmVlKGFscGhhMik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcbiYjNDM7XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gcXVlcnlfcmVnZGIoYWxwaGEyKTtcbiB9XG4gXG4gaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLVx0dm9pZCAqZGI7XG4gXHRpbnQgZXJyO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1cnJlbnRfcmVnZG9tYWluO1xuIFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDtcbkBAIC0xMDY4LDIxICYjNDM7MTA4OCwxNCBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghdmFsaWRfcmVnZGIoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSkpIHtcbi1cdFx0ZXJyID0gLUVOT0RBVEE7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0ZGIgPSBrbWVtZHVwKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFkYikge1xuLVx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHJ0bmxfbG9jaygpO1xuIFx0aWYgKCFJU19FUlJfT1JfTlVMTChyZWdkYikpXG4gXHRcdGtmcmVlKHJlZ2RiKTtcbi1cdHJlZ2RiID0gZGI7XG4mIzQzO1x0ZXJyID0gcmVnZGJfbG9hZChmdyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cmVnZGIgPSBFUlJfUFRSKGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0LyogcmVzZXQgcmVndWxhdG9yeSBkb21haW4gKi9cbiBcdGN1cnJlbnRfcmVnZG9tYWluID0gZ2V0X2NmZzgwMjExX3JlZ2RvbSgpO1xuQEAgLTExMDMsNyAmIzQzOzExMTYsNiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxuIFxuIG91dF91bmxvY2s6XG4gXHRydG5sX3VubG9jaygpO1xuLSBvdXQ6XG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTQwODUsNiAmIzQzOzQwOTcsOCBAQCB2b2lkIHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiB7XG4gXHRzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsciA9IGdldF9sYXN0X3JlcXVlc3QoKTtcbiBcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiBcdC8qIHNlbGYtbWFuYWdlZCBkZXZpY2VzIGlnbm9yZSBiZWFjb24gaGludHMgYW5kIGNvdW50cnkgSUUgKi9cbiBcdGlmICh3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFx1MDAyNiBSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRCkge1xuIFx0XHR3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIHw9IFJFR1VMQVRPUllfRElTQUJMRV9CRUFDT05fSElOVFMgfFxuQEAgLTQwOTcsNiAmIzQzOzQxMTEsMTYgQEAgdm9pZCB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4gXHRcdCAqL1xuIFx0XHRpZiAobHItXHUwMDNlaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKVxuIFx0XHRcdHJlZ19jYWxsX25vdGlmaWVyKHdpcGh5LCBscik7XG4mIzQzO1x0fSBlbHNlIGlmICghcmVnZGIpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiByZWd1bGF0b3J5LmRiIG5vdCB5ZXQgbG9hZGVkOyB0cmlnZ2VyIGFuIGFzeW5jIHVkZXZcbiYjNDM7XHRcdCAqIHJlcXVlc3QgdG8gbG9hZCBpdCB3aGVuIHRoZSBmaXJzdCB3aXBoeSByZWdpc3RlcnMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghZmlybXdhcmVfcmVxdWVzdF9ub3dhaXRfbm93YXJuKFRISVNfTU9EVUxFLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXCYjMzQ7cmVndWxhdG9yeS5kYlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnJlZ19mZGV2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIE5VTEwsIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUpKVxuJiM0MztcdFx0XHRyZWdkYiA9IEVSUl9QVFIoLUVJTlBST0dSRVNTKTtcbiBcdH1cbiBcbiBcdGlmICghcmVnX2Rldl9pZ25vcmVfY2VsbF9oaW50KHdpcGh5KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2RiX2xvYWQmIzM0OywKICAgICYjMzQ7cmVnZGJfZndfY2JfcmVzdG9yZSYjMzQ7LAogICAgJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgICAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAgICYjMzQ7d2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTY6NTg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggMWU4MjE0ZDZiNmQ4ODEuLmQ3Yjg2NGQzMmJhMWVhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC05ODgsNzggJiM0Mzs5ODgsOTggQEAgc3RhdGljIGludCBxdWVyeV9yZWdkYihjb25zdCBjaGFyICphbHBoYTIpCiAJcmV0dXJuIC1FTk9EQVRBOwogfQogCi1zdGF0aWMgdm9pZCByZWdkYl9md19jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KQomIzQzO01PRFVMRV9GSVJNV0FSRSgmIzM0O3JlZ3VsYXRvcnkuZGImIzM0Oyk7CiYjNDM7CiYjNDM7LyogVmFsaWRhdGUgYW5kIHN0b3JlIGZpcm13YXJlIGltYWdlIGFzIHJlZ2RiLiBVc2VkIGJ5IGFsbCBsb2FkIHBhdGhzLiAqLwomIzQzO3N0YXRpYyBpbnQgcmVnZGJfbG9hZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogewotCWludCBzZXRfZXJyb3IgPSAwOwotCWJvb2wgcmVzdG9yZSA9IHRydWU7CiAJdm9pZCAqZGI7CiAKLQlpZiAoIWZ3KSB7Ci0JCXByX2luZm8oJiMzNDtmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXG4mIzM0Oyk7Ci0JCXNldF9lcnJvciA9IC1FTk9EQVRBOwotCX0gZWxzZSBpZiAoIXZhbGlkX3JlZ2RiKGZ3LSZndDtkYXRhLCBmdy0mZ3Q7c2l6ZSkpIHsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKCF2YWxpZF9yZWdkYihmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUpKSB7CiAJCXByX2luZm8oJiMzNDtsb2FkZWQgcmVndWxhdG9yeS5kYiBpcyBtYWxmb3JtZWQgb3Igc2lnbmF0dXJlIGlzIG1pc3NpbmcvaW52YWxpZFxuJiMzNDspOwotCQlzZXRfZXJyb3IgPSAtRUlOVkFMOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWRiID0ga21lbWR1cChmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRiKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlZ2RiID0gZGI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWdkYl9md19jYl9yZXN0b3JlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwogCXJ0bmxfbG9jaygpOwotCWlmIChyZWdkYiAmYW1wOyZhbXA7ICFJU19FUlIocmVnZGIpKSB7Ci0JCS8qIG5lZ2F0aXZlIGNhc2UgLSBhIGJ1ZwotCQkgKiBwb3NpdGl2ZSBjYXNlIC0gY2FuIGhhcHBlbiBkdWUgdG8gcmFjZSBpbiBjYXNlIG9mIG11bHRpcGxlIGNiJiMzOTtzIGluCi0JCSAqIHF1ZXVlLCBkdWUgdG8gdXNhZ2Ugb2YgYXN5bmNocm9ub3VzIGNhbGxiYWNrCi0JCSAqCi0JCSAqIEVpdGhlciBjYXNlLCBqdXN0IHJlc3RvcmUgYW5kIGZyZWUgbmV3IGRiLgotCQkgKi8KLQl9IGVsc2UgaWYgKHNldF9lcnJvcikgewotCQlyZWdkYiA9IEVSUl9QVFIoc2V0X2Vycm9yKTsKLQl9IGVsc2UgaWYgKGZ3KSB7Ci0JCWRiID0ga21lbWR1cChmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoZGIpIHsKLQkJCXJlZ2RiID0gZGI7Ci0JCQlyZXN0b3JlID0gY29udGV4dCAmYW1wOyZhbXA7IHF1ZXJ5X3JlZ2RiKGNvbnRleHQpOwotCQl9IGVsc2UgewotCQkJcmVzdG9yZSA9IHRydWU7Ci0JCX0KLQl9CiAKLQlpZiAocmVzdG9yZSkKJiM0MzsJLyogU2tpcCBpZiBhIGNvbmN1cnJlbnQgd2lwaHkgcmVnaXN0cmF0aW9uIGFscmVhZHkgbG9hZGVkIHRoZSBkYi4gKi8KJiM0MzsJaWYgKHJlZ2RiICZhbXA7JmFtcDsgIUlTX0VSUihyZWdkYikpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlcGxheSBhbGwgcGVuZGluZyByZWd1bGF0b3J5IGhpbnRzIHRoYXQgYXJyaXZlZCB3aGlsZSB0aGUKJiM0MzsJICogZGF0YWJhc2Ugd2FzIG5vdCB5ZXQgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIGxvYWQgb3V0Y29tZS4KJiM0MzsJICovCiYjNDM7CWlmICghZncpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXG4mIzM0Oyk7CiYjNDM7CQlyZWdkYiA9IEVSUl9QVFIoLUVOT0RBVEEpOwogCQlyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSwgZmFsc2UpOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiAKLQlydG5sX3VubG9jaygpOwomIzQzOwllcnIgPSByZWdkYl9sb2FkKGZ3KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJlZ2RiID0gRVJSX1BUUihlcnIpOwogCi0Ja2ZyZWUoY29udGV4dCk7CiYjNDM7CXJlc3RvcmVfcmVndWxhdG9yeV9zZXR0aW5ncyh0cnVlLCBmYWxzZSk7CiAKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlydG5sX3VubG9jaygpOwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogfQogCi1NT0RVTEVfRklSTVdBUkUoJiMzNDtyZWd1bGF0b3J5LmRiJiMzNDspOwotCiBzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKQogewomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCBlcnI7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKHJlZ2RiKQomIzQzOwlpZiAocmVnZGIgJmFtcDsmYW1wOyAhSVNfRVJSKHJlZ2RiKSkKIAkJcmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7CiAKLQlhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhbHBoYTIpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkvKgomIzQzOwkgKiBMb2FkIGZhaWxlZCBvciBhc3luYyB1ZGV2IGxvYWQgaW4gcHJvZ3Jlc3MuIElmIC1FSU5QUk9HUkVTUywKJiM0MzsJICogaGludHMgYXJlIHByZXNlcnZlZCBhbmQgcmVwbGF5ZWQgb25jZSB0aGUgdWRldiBsb2FkIGNvbXBsZXRlcy4KJiM0MzsJICovCiYjNDM7CWlmIChJU19FUlIocmVnZGIpICZhbXA7JmFtcDsgUFRSX0VSUihyZWdkYikgIT0gLUVJTlBST0dSRVNTKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmVnZGIpOwogCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIHRydWUsICYjMzQ7cmVndWxhdG9yeS5kYiYjMzQ7LAotCQkJCSAgICAgICZhbXA7cmVnX2ZkZXYtJmd0O2RldiwgR0ZQX0tFUk5FTCwKLQkJCQkgICAgICAodm9pZCAqKWFscGhhMiwgcmVnZGJfZndfY2IpOwomIzQzOwkvKgomIzQzOwkgKiBQcmVzZXJ2ZSB0aGUgaGludCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgb24gZGlyZWN0IHBhdGhzOwomIzQzOwkgKiBhbiBhc3luYyB1ZGV2IGxvYWQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gd2lwaHkgcmVnaXN0cmF0aW9uCiYjNDM7CSAqIGFuZCB3aWxsIHJlcGxheSBhbGwgcGVuZGluZyBoaW50cyBvbiBjb21wbGV0aW9uLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdywgJiMzNDtyZWd1bGF0b3J5LmRiJiMzNDssICZhbXA7cmVnX2ZkZXYtJmd0O2Rldik7CiAJaWYgKGVycikKLQkJa2ZyZWUoYWxwaGEyKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwllcnIgPSByZWdkYl9sb2FkKGZ3KTsKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXJlZ2RiID0gRVJSX1BUUihlcnIpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQogCi0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7CiB9CiAKIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpCiB7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQl2b2lkICpkYjsKIAlpbnQgZXJyOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjdXJyZW50X3JlZ2RvbWFpbjsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwpAQCAtMTA2OCwyMSAmIzQzOzEwODgsMTQgQEAgaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZCkKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCF2YWxpZF9yZWdkYihmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUpKSB7Ci0JCWVyciA9IC1FTk9EQVRBOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkYiA9IGttZW1kdXAoZnctJmd0O2RhdGEsIGZ3LSZndDtzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRiKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJ0bmxfbG9jaygpOwogCWlmICghSVNfRVJSX09SX05VTEwocmVnZGIpKQogCQlrZnJlZShyZWdkYik7Ci0JcmVnZGIgPSBkYjsKJiM0MzsJZXJyID0gcmVnZGJfbG9hZChmdyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXJlZ2RiID0gRVJSX1BUUihlcnIpOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiAKIAkvKiByZXNldCByZWd1bGF0b3J5IGRvbWFpbiAqLwogCWN1cnJlbnRfcmVnZG9tYWluID0gZ2V0X2NmZzgwMjExX3JlZ2RvbSgpOwpAQCAtMTEwMyw3ICYjNDM7MTExNiw2IEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpCiAKIG91dF91bmxvY2s6CiAJcnRubF91bmxvY2soKTsKLSBvdXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQwODUsNiAmIzQzOzQwOTcsOCBAQCB2b2lkIHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsciA9IGdldF9sYXN0X3JlcXVlc3QoKTsKIAomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwogCS8qIHNlbGYtbWFuYWdlZCBkZXZpY2VzIGlnbm9yZSBiZWFjb24gaGludHMgYW5kIGNvdW50cnkgSUUgKi8KIAlpZiAod2lwaHktJmd0O3JlZ3VsYXRvcnlfZmxhZ3MgJmFtcDsgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpIHsKIAkJd2lwaHktJmd0O3JlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyB8CkBAIC00MDk3LDYgJiM0Mzs0MTExLDE2IEBAIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogCQkgKi8KIAkJaWYgKGxyLSZndDtpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIpCiAJCQlyZWdfY2FsbF9ub3RpZmllcih3aXBoeSwgbHIpOwomIzQzOwl9IGVsc2UgaWYgKCFyZWdkYikgewomIzQzOwkJLyoKJiM0MzsJCSAqIHJlZ3VsYXRvcnkuZGIgbm90IHlldCBsb2FkZWQ7IHRyaWdnZXIgYW4gYXN5bmMgdWRldgomIzQzOwkJICogcmVxdWVzdCB0byBsb2FkIGl0IHdoZW4gdGhlIGZpcnN0IHdpcGh5IHJlZ2lzdGVycy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFmaXJtd2FyZV9yZXF1ZXN0X25vd2FpdF9ub3dhcm4oVEhJU19NT0RVTEUsCiYjNDM7CQkJCQkJICAgICYjMzQ7cmVndWxhdG9yeS5kYiYjMzQ7LAomIzQzOwkJCQkJCSAgICAmYW1wO3JlZ19mZGV2LSZndDtkZXYsIEdGUF9LRVJORUwsCiYjNDM7CQkJCQkJICAgIE5VTEwsIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUpKQomIzQzOwkJCXJlZ2RiID0gRVJSX1BUUigtRUlOUFJPR1JFU1MpOwogCX0KIAogCWlmICghcmVnX2Rldl9pZ25vcmVfY2VsbF9oaW50KHdpcGh5KSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSZWd1bGF0b3J5IERhdGFiYXNlIExvYWRpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSByZWZhY3RvciBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaW52b2x2ZXMgaG93IHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIChgcmVndWxhdG9yeS5kYmApIGlzIGxvYWRlZC4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBgcmVnZGJfbG9hZCgpYCwgcmVuYW1lZCBgcmVnZGJfZndfY2JgIHRvIGByZWdkYl9md19jYl9yZXN0b3JlYCwgYW5kIHR3ZWFrZWQgYSBmZXcgb3RoZXIgZnVuY3Rpb25zOiBgcXVlcnlfcmVnZGJfZmlsZWAsIGByZWdfcmVsb2FkX3JlZ2RiYCwgYW5kIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYC4gVGhpcyBpcyBhbGwgY3JpdGljYWwgc3R1ZmYsIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiB0aGUgY2ZnODAyMTEgYW5kIG1hYzgwMjExIHN1YnN5c3RlbXMsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIHdpcmVsZXNzIHN0YWNrIGhhbmRsZXMgcmVndWxhdG9yeSBpbmZvcm1hdGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIGFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCB0ZXN0aW5nIGVudmlyb25tZW50LiBGb3J0dW5hdGVseSwgd2l0aCB3aXJlbGVzcyBjb2RlLCBgbWFjODAyMTFfaHdzaW1gIGlzIHVzdWFsbHkgbXkgZ28tdG8uIFNpbmNlIGBtYWM4MDIxMV9od3NpbWAgaXMgYSBzb2Z0d2FyZSBzaW11bGF0b3IsIGl0IHNob3VsZCBiZSBmaW5lIGluIGEgVk0uIFRoYXQmIzM5O3MgZ29vZDsgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBCYXNlZCBvbiB0aGUgcGF0Y2gsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIGF0IGFyZToKCiogICBgcmVnZGJfbG9hZGAgKG5ldyBmdW5jdGlvbiwgb2J2aW91c2x5IGltcG9ydGFudCkKKiAgIGByZWdkYl9md19jYl9yZXN0b3JlYCAocmVuYW1lZCBmcm9tIGByZWdkYl9md19jYmAsIHNvIHdvcnRoIGEgbG9vayBhdCB0aGUgY2hhbmdlcykKKiAgIGBxdWVyeV9yZWdkYl9maWxlYAoqICAgYHJlZ19yZWxvYWRfcmVnZGJgCiogICBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmAKCkZpbmFsbHksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIOKAkyBgbmV0L3dpcmVsZXNzL3JlZy5jYCDigJMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYWZmZWN0IHRoaXMgY29kZS4gU3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfQ0ZHODAyMTFgIG9yIGBDT05GSUdfTUFDODAyMTFgIGFyZSByZXF1aXJlZC4gSSYjMzk7bGwgY2hlY2sgZWl0aGVyIHRoZSBgTWFrZWZpbGVgIG9yIHRoZSBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIGBuZXQvd2lyZWxlc3MvYC4gTmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBidWlsZGluZyB3aXRoIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBzbyBteSBmdXp6aW5nIGlzbiYjMzk7dCBhIHdhc3RlIG9mIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLS4qcmVnXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIE1ha2VmaWxlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHN0b3A6IGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGJlaW5nIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb21waWxhdGlvbiBwcm9jZXNzLiBUaGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgdGhhdCwgYW5kIGEgcXVpY2sgaW5zcGVjdGlvbiBzaG91bGQgY2xhcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IHZhcmlhYmxlcywgaW5jbHVkZSBkaXJlY3RpdmVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hpY2ggZHJpdmVycyBnZXQgYnVpbHQgYmFzZWQgb24gY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgY2hhbmdlcyBJIG5lZWQgdG8gbWFrZSB0byB0aGUgd2lyZWxlc3Mgc3RhY2suIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbiAgIDM6XHRvYmoteSAmIzQzOz0gdGVzdHMvXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgJiM0Mzs9IHdleHQtY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgJiM0Mzs9IHdleHQtcHJpdi5vXG4gICA4Olx0XG4gICA5Olx0Y2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xuICAxMDpcdGNmZzgwMjExLXkgJiM0Mzs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXG4gIDExOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWljaGFlbC1taWMubyBwbXNyLm9cbiAgMTI6XHRjZmc4MDIxMS0kKENPTkZJR19PRikgJiM0Mzs9IG9mLm9cbiAgMTM6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG4gIDE0Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xuICAxNTpcdFxuICAxNjpcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG4gIDE3Olx0XG4gIDE4Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5vXG4gIDE5Olx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxuICAyMDpcdGNmZzgwMjExLXkgJiM0Mzs9IGV4dHJhLWNlcnRzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVndWxhdG9yeSBEYXRhYmFzZSBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHJlZ3VsYXRvcnkgZGF0YWJhc2Ugc2l0dWF0aW9uLiBSaWdodCwgYHJlZy5vYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBjZmc4MDIxMS15YCBidWlsZCBjaGFpbiwgd2hpY2ggbWFrZXMgc2Vuc2UgLSBpdCYjMzk7cyBvbmx5IGJ1aWx0IGlmIGBDT05GSUdfQ0ZHODAyMTFgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBgcmVnLm9gIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHRyaWdnZXJlZC4gQWgsIHJpZ2h0LCB0byBnZXQgdGhlIHdpcGh5cyBpbnN0YW50aWF0ZWQgYW5kIGNhbGwgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLCBJIGFsc28gbmVlZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYC4gVGhhdCBwcm92aWRlcyB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTWFrZXMgc2Vuc2UuCgpOb3csIGlzIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIHRoYXQgY29udHJvbHMgKmhvdyogdGhpcyByZWd1bGF0b3J5IGRhdGFiYXNlIGlzIGhhbmRsZWQ/IEkgc2VlbSB0byByZWNhbGwgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nLCBsaWtlIGBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJgIG9yIGEgc2ltaWxhciBvcHRpb24uIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzZWUgaWYgdGhleSBpbXBhY3QgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGluZyBvciB2ZXJpZmljYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWd1bGF0b3J5IERhdGFiYXNlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvd2lyZWxlc3MvcmVnLmNgIGZpbGUuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgb3IgYENGRzgwMjExX0NSREFfU1VQUE9SVGAgaGF2ZSBhbnkgcmVsZXZhbmNlIGhlcmU7IHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSByZWd1bGF0b3J5IGNoYW5nZXMuIEkgbm90aWNlIGl0JiMzOTtzIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgYW5kIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAgdG8gaGFuZGxlIGByZWd1bGF0b3J5LmRiYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgcmVseWluZyBvbiBgQ09ORklHX0ZXX0xPQURFUmAuIFRoYXQgbWVhbnMgdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgY2FuIGdldCB0byBpdC4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zLiBgQ0ZHODAyMTFgIGlzIGEgZ2l2ZW4sIG9idmlvdXNseS4gYE1BQzgwMjExX0hXU0lNYCBtaWdodCBiZSByZWxldmFudCBmb3IgdGVzdGluZywgdG9vLiBJJiMzOTtsbCBpbmNsdWRlIGBNQUM4MDIxMV9IV1NJTWAgaW4gdGhlIGxpc3QsIHRob3VnaCBpdCYjMzk7cyBsZXNzIGNyaXRpY2FsLiBHaXZlbiB0aGUgdXNlIG9mIGZpcm13YXJlIGxvYWRpbmcsIGBGV19MT0FERVJgIGlzIHJlbGV2YW50LCBidXQgaXQmIzM5O3Mgc3VjaCBhIGdlbmVyYWwgY29uZmlnIEkgcHJvYmFibHkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXNzZW50aWFsIHN5bWJvbHMgaW4gbWluZC4gVGhlIHByaW1hcnkgdGFyZ2V0cyBhcmUgZGVmaW5pdGVseSBgcmVnZGJfbG9hZGAsIGByZWdkYl9md19jYl9yZXN0b3JlYCwgYHF1ZXJ5X3JlZ2RiX2ZpbGVgLCBgcmVnX3JlbG9hZF9yZWdkYmAsIGFuZCBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmAuCgpKdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiBgcmVnZGJfbG9hZGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBgcmVnZGJfZndfY2JfcmVzdG9yZWAgaXMgYWxzbyBzdGF0aWMuIEFuZCBgcXVlcnlfcmVnZGJfZmlsZWAgdG9vLiBOb3csIGByZWdfcmVsb2FkX3JlZ2RiYCBpcyBleHBvcnRlZCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuIE9rYXksIHRoYXQgZmVlbHMgcHJldHR5IGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTAwNDg9c3RhdGljIGludCBubDgwMjExX3JlbG9hZF9yZWdkYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDA0OS17XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwMDUwOlx0cmV0dXJuIHJlZ19yZWxvYWRfcmVnZGIoKTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTAwNTEtfVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0xMDQ1PXN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNzktXG5uZXQvd2lyZWxlc3MvcmVnLmM6MTA4MDppbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwODEte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuaD0xNjg9Ym9vbCByZWdfZGZzX2RvbWFpbl9zYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHkxLCBzdHJ1Y3Qgd2lwaHkgKndpcGh5Mik7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oLTE3MC0vKipcbm5ldC93aXJlbGVzcy9yZWcuaDoxNzE6ICogcmVnX3JlbG9hZF9yZWdkYiAtIHJlbG9hZCB0aGUgcmVndWxhdG9yeS5kYiBmaXJtd2FyZSBmaWxlXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTcyLSAqIFJldHVybjogMCBmb3Igc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2Vcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzMtICovXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTc0OmludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpO1xubmV0L3dpcmVsZXNzL3JlZy5oLTE3NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmVsb2FkIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIHJlbG9hZCBtZWNoYW5pc20gaGVyZS4gSXQgbG9va3MgbGlrZSBgcmVnX3JlbG9hZF9yZWdkYmAgaXMgdGhlIGtleSBmdW5jdGlvbiBpbiB0aGUgcHJvY2Vzcy4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBgbmw4MDIxMV9yZWxvYWRfcmVnZGJgIG5ldGxpbmsgY29tbWFuZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGR5bmFtaWNhbGx5IHVwZGF0aW5nIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlLCBzbyBhIG5ldGxpbmsgaW50ZXJmYWNlIGlzIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgIGlzIGFub3RoZXIga2V5IHBvaW50LiBJdCBzZWVtcyB0aGF0IHRoaXMgZnVuY3Rpb24mIzM5O3MgY2FsbGVkIHdoZW5ldmVyIGEgd2lyZWxlc3MgUEhZIChgd2lwaHlgKSBpcyByZWdpc3RlcmVkLCB3aGljaCBhbHNvIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBUaGF0JiMzOTtzIGEgbG9naWNhbCBwb2ludCB0byBraWNrIG9mZiB0aGUgcmVndWxhdG9yeSBpbml0aWFsaXphdGlvbiBvciB1cGRhdGUsIHNpbmNlIHRoZSBQSFkmIzM5O3MgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24gd291bGQgYmUgcmVxdWlyZWQgYXQgdGhhdCBwb2ludC4KCkdpdmVuIHRob3NlIHR3byBwb2ludHMsIEkmIzM5O20gZ29pbmcgdG8gY2VudGVyIG15IGludmVzdGlnYXRpb24gYXJvdW5kIHRoZSBmb2xsb3dpbmcgc2V0IG9mIHN5bWJvbHM6IGByZWdkYl9sb2FkYCwgYHJlZ2RiX2Z3X2NiX3Jlc3RvcmVgLCBgcXVlcnlfcmVnZGJfZmlsZWAsIGByZWdfcmVsb2FkX3JlZ2RiYCwgYW5kIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIG9mIHRoaXMgcHV6emxlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBJJiMzOTttIG1pc3NpbmcgYW55IGNydWNpYWwgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgYHF1ZXJ5X3JlZ2RiX2ZpbGVgIGFuZCB0aGF0IG1heSBoaWdobGlnaHQgYW55dGhpbmcgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmM9MTAxMz1zdGF0aWMgdm9pZCByZWdkYl9md19jYl9yZXN0b3JlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNDQtXG5uZXQvd2lyZWxlc3MvcmVnLmM6MTA0NTpzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNDYte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0xMTIzPXN0YXRpYyBib29sIHJlZ19xdWVyeV9kYXRhYmFzZShzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KVxubmV0L3dpcmVsZXNzL3JlZy5jLTExMjQte1xubmV0L3dpcmVsZXNzL3JlZy5jOjExMjU6XHRpZiAocXVlcnlfcmVnZGJfZmlsZShyZXF1ZXN0LVx1MDAzZWFscGhhMikgPT0gMClcbm5ldC93aXJlbGVzcy9yZWcuYy0xMTI2LVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmV0cmlldmFsKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHF1ZXJ5X3JlZ2RiX2ZpbGVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGByZWdfcXVlcnlfZGF0YWJhc2VgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSBob3cgYENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCYCBjb21lcyBpbnRvIHBsYXkgaGVyZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGNydWNpYWwgZm9yIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlLiBJZiB0aGF0IG1hY3JvIGlzIGVuYWJsZWQsIHRoZW4gSSYjMzk7ZCBleHBlY3QgYHZhbGlkX3JlZ2RiYCB0byBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nIHRoZSBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZSwgcHJldmVudGluZyB0YW1wZXJpbmcuIElmIGl0IGlzbiYjMzk7dCwgdGhlIHNlY3VyaXR5IG1vZGVsIGlzIGRyYW1hdGljYWxseSBkaWZmZXJlbnQuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmFsaWRfcmVnZGJgIHRvIGRldGVybWluZSBob3cgdGhlIGRhdGFiYXNlIHZhbGlkYXRpb24gd29ya3MgaW4gdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MuIFRoZSBkZXRhaWxzIGluIHRoZSBgdmFsaWRfcmVnZGJgIGZ1bmN0aW9uIGFyZSB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZhbGlkX3JlZ2RiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmM9Nzk4PXN0YXRpYyB2b2lkIGZyZWVfcmVnZGJfa2V5cmluZyh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy04MDItXG5uZXQvd2lyZWxlc3MvcmVnLmM6ODAzOnN0YXRpYyBib29sIHZhbGlkX3JlZ2RiKGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbm5ldC93aXJlbGVzcy9yZWcuYy04MDQte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz05OTQ9c3RhdGljIGludCByZWdkYl9sb2FkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTk5OS1cbm5ldC93aXJlbGVzcy9yZWcuYzoxMDAwOlx0aWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xubmV0L3dpcmVsZXNzL3JlZy5jLTEwMDEtXHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHJlZ3VsYXRvcnkuZGIgaXMgbWFsZm9ybWVkIG9yIHNpZ25hdHVyZSBpcyBtaXNzaW5nL2ludmFsaWRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGB2YWxpZF9yZWdkYmAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2YWxpZF9yZWdkYmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGlucHV0cywgd2hhdCBpdCBleHBlY3RzIHRoZSBkYXRhIGluIHRoZSByZWdpc3RlciBkYXRhYmFzZSAocmVnZGIpIHRvIGxvb2sgbGlrZS4gSXMgaXQgZXhwZWN0aW5nIGEgZmxhdCBzdHJ1Y3R1cmUsIHNvbWUgbmVzdGVkIGRpY3Rpb25hcnkgZm9ybWF0LCBvciBwZXJoYXBzIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG1ldGhvZHM/CgpOZXh0LCBJJiMzOTtsbCBjb25zaWRlciB0aGUgZGF0YSB2YWxpZGF0aW9uIHBlcmZvcm1lZC4gV2hhdCBjcml0ZXJpYSBhcmUgYmVpbmcgY2hlY2tlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYmFzaWMgdHlwZSBjaGVja3MsIG1vcmUgaW50cmljYXRlIGNvbnN0cmFpbnRzIG9uIHJlZ2lzdGVyIGFkZHJlc3MgcmFuZ2VzIG9yIGJpdGZpZWxkIGRlZmluaXRpb25zLCBvciBtYXliZSBldmVuIGNyb3NzLXJlZmVyZW5jZXMgdG8gb3RoZXIgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIGRhdGE/IE15IGh5cG90aGVzaXMgaXMgdGhhdCBpdCBjb3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIGNoZWNraW5nIGZvciBvdmVybGFwcGluZyByZWdpc3RlcnMsIHZlcmlmeWluZyB0aGF0IGJpdGZpZWxkcyBkb27igJl0IGV4Y2VlZCByZWdpc3RlciBib3VuZGFyaWVzLCBvciBlbnN1cmluZyB0aGF0IGFkZHJlc3NlcyBhcmUgYWxpZ25lZCBhcyBuZWNlc3NhcnkgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBUaGUgb3ZlcmFsbCBnb2FsLCBJIHByZXN1bWUsIGlzIHRvIGd1YXJhbnRlZSB0aGUgaW50ZWdyaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiB0aGlzIHJlZ2lzdGVyIG1hcCBiZWZvcmUgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB2YWxpZGF0aW9uIHN0cmF0ZWd5LiBJIGV4cGVjdCBpdCBpcyBhIHNlcmllcyBvZiBjaGVja3MuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBleGNlcHRpb25zIG9yIHJldHVybiB2YWx1ZXMgaXQgdXNlcyB0byBzaWduYWwgZmFpbHVyZSBvciBzdWNjZXNzLiBBcmUgdGhlcmUgc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIGRvZXMgaXQgdGhyb3cgZXhjZXB0aW9ucz8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGltcG9ydGFudC4gVW5kZXJzdGFuZGluZyBob3cgYHZhbGlkX3JlZ2RiYCBjb21tdW5pY2F0ZXMgcHJvYmxlbXMgaXMga2V5IHRvIGludGVncmF0aW5nIGl0IGNvcnJlY3RseSBpbnRvIGEgbGFyZ2VyIHN5c3RlbSBvciBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IHJlcG9ydHMgcHJvYmxlbXMuIEkgYW50aWNpcGF0ZSBpdCBzaG91bGQgYmUgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3JlZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDM6XHRzdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXG4gODA0Olx0e1xuIDgwNTpcdFx0Y29uc3Qgc3RydWN0IGZ3ZGJfaGVhZGVyICpoZHIgPSAodm9pZCAqKWRhdGE7XG4gODA2Olx0XHRjb25zdCBzdHJ1Y3QgZndkYl9jb3VudHJ5ICpjb3VudHJ5O1xuIDgwNzpcdFxuIDgwODpcdFx0aWYgKHNpemUgXHUwMDNjIHNpemVvZigqaGRyKSlcbiA4MDk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxMDpcdFxuIDgxMTpcdFx0aWYgKGhkci1cdTAwM2VtYWdpYyAhPSBjcHVfdG9fYmUzMihGV0RCX01BR0lDKSlcbiA4MTI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxMzpcdFxuIDgxNDpcdFx0aWYgKGhkci1cdTAwM2V2ZXJzaW9uICE9IGNwdV90b19iZTMyKEZXREJfVkVSU0lPTikpXG4gODE1Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4MTY6XHRcbiA4MTc6XHRcdGlmICghcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShkYXRhLCBzaXplKSlcbiA4MTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxOTpcdFxuIDgyMDpcdFx0Y291bnRyeSA9IFx1MDAyNmhkci1cdTAwM2Vjb3VudHJ5WzBdO1xuIDgyMTpcdFx0d2hpbGUgKCh1OCAqKShjb3VudHJ5ICYjNDM7IDEpIFx1MDAzYz0gZGF0YSAmIzQzOyBzaXplKSB7XG4gODIyOlx0XHRcdGlmICghY291bnRyeS1cdTAwM2Vjb2xsX3B0cilcbiA4MjM6XHRcdFx0XHRicmVhaztcbiA4MjQ6XHRcdFx0aWYgKCF2YWxpZF9jb3VudHJ5KGRhdGEsIHNpemUsIGNvdW50cnkpKVxuIDgyNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4MjY6XHRcdFx0Y291bnRyeSYjNDM7JiM0Mzs7XG4gODI3Olx0XHR9XG4gODI4Olx0XG4gODI5Olx0XHRyZXR1cm4gdHJ1ZTtcbiA4MzA6XHR9XG4gODMxOlx0XG4gODMyOlx0c3RhdGljIHZvaWQgc2V0X3dtbV9ydWxlKGNvbnN0IHN0cnVjdCBmd2RiX2hlYWRlciAqZGIsXG4gODMzOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmd2RiX2NvdW50cnkgKmNvdW50cnksXG4gODM0Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmd2RiX3J1bGUgKnJ1bGUsXG4gODM1Olx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJydWxlKVxuIDgzNjpcdHtcbiA4Mzc6XHRcdHN0cnVjdCBpZWVlODAyMTFfd21tX3J1bGUgKndtbV9ydWxlID0gXHUwMDI2cnJ1bGUtXHUwMDNld21tX3J1bGU7XG4gODM4Olx0XHRzdHJ1Y3QgZndkYl93bW1fcnVsZSAqd21tO1xuIDgzOTpcdFx0dW5zaWduZWQgaW50IGksIHdtbV9wdHI7XG4gODQwOlx0XG4gODQxOlx0XHR3bW1fcHRyID0gYmUxNl90b19jcHUocnVsZS1cdTAwM2V3bW1fcHRyKSBcdTAwM2NcdTAwM2MgMjtcbiA4NDI6XHRcdHdtbSA9ICh2b2lkICopKCh1OCAqKWRiICYjNDM7IHdtbV9wdHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZW1iZWRkZWQgc3lzdGVtcyBvciBrZXJuZWwtbGV2ZWwgc2VjdXJpdHk6CgoqKlZhbGlkYXRpbmcgdGhlIFJlZ2lzdHJ5IERhdGFiYXNlIFNpZ25hdHVyZSoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgbXkgbWluZCBqdW1wcyB0byB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgcmVnaXN0cnkgZGF0YWJhc2UgaXMgc2VjdXJpdHkuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgYmVmb3JlIHdlIGV2ZW4gKnRvdWNoKiB0aGlzIHRoaW5nLCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGxlZ2l0aW1hdGUuJiMzNDsgSSBzZWUgdGhlIGNvZGUgY2hlY2tpbmcgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgLiBUaGF0JiMzOTtzIGNyaXRpY2FsLiBCZWZvcmUgd2UgdHJ1c3QgYW55IGRhdGEgb3IgcHJvY2VlZCB3aXRoIGFueSBvcGVyYXRpb25zIG9uIGl0LCBpdCYjMzk7cyBwYXJhbW91bnQgdGhhdCB3ZSBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgcmVnaXN0cnkgZGF0YWJhc2UuIFRoYXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlci4gSXQmIzM5O3MgdGhlIGZpcnN0IGxpbmUgb2YgZGVmZW5zZSBhZ2FpbnN0IHRhbXBlcmluZywgY29ycnVwdGlvbiwgb3IgbWFsaWNpb3VzIG1vZGlmaWNhdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyBhIHRydXN0ZWQsIHVuYWx0ZXJlZCB2ZXJzaW9uIG9mIHRoZSByZWdpc3RyeSBiZWZvcmUgbW92aW5nIGZvcndhcmQsIG90aGVyd2lzZSBldmVyeXRoaW5nIGlzIGNvbXByb21pc2VkLiBUaGUgc2lnbmF0dXJlIGNoZWNrIGlzIGEgbXVzdCBiZWZvcmUgYW55IG9wZXJhdGlvbiBvbiB0aGlzIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmM9NzYzPU1PRFVMRV9GSVJNV0FSRShcJiMzNDtyZWd1bGF0b3J5LmRiLnA3c1wmIzM0Oyk7XG5uZXQvd2lyZWxlc3MvcmVnLmMtNzY0LVxubmV0L3dpcmVsZXNzL3JlZy5jOjc2NTpzdGF0aWMgYm9vbCByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbm5ldC93aXJlbGVzcy9yZWcuYy03NjYte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03ODg9c3RhdGljIGludCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03OTItXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzkzOnN0YXRpYyBib29sIHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxubmV0L3dpcmVsZXNzL3JlZy5jLTc5NC17XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTgwMz1zdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTgxNi1cbm5ldC93aXJlbGVzcy9yZWcuYzo4MTc6XHRpZiAoIXJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoZGF0YSwgc2l6ZSkpXG5uZXQvd2lyZWxlc3MvcmVnLmMtODE4LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFib3V0IGByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlYC4gSSBuZWVkIHRvIHN0YXJ0IGJ5IGNsZWFybHkgZGVmaW5pbmcgd2hhdCB3ZSBtZWFuIGJ5ICYjMzQ7dmFsaWQgc2lnbmF0dXJlJiMzNDsgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlZ2lzdHJ5IGRhdGFiYXNlLiBTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBwb3RlbnRpYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgZGF0YSwgJiMzNDt2YWxpZCYjMzQ7IG5lZWRzIHRvIGJlIG1vcmUgdGhhbiBqdXN0IHN5bnRhY3RpY2FsbHkgY29ycmVjdDsgaXQgaGFzIHRvIGltcGx5IGNyeXB0b2dyYXBoaWMgaW50ZWdyaXR5IGFuZCB0cnVzdC4KClNvLCBmaXJzdCBJIG5lZWQgdG8gbG9vayB1cCB0aGUgcHJlY2lzZSBkZWZpbml0aW9ucyBvZiBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAsIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgY2hlY2sgdG8gcmV0dXJuIHRydWUuIFdoZXJlIGFyZSB0aGUgdHdvIGRlZmluaXRpb25zPyBJcyB0aGlzIGEgbXVsdGktZmFjZXRlZCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgY2hlY2tpbmcgdGhlIGZpbGUmIzM5O3Mgc2lnbmF0dXJlLCBjb21wYXJpbmcgaXQgdG8gYW4gYWxsb3dlZCBpc3N1ZXIsIGFuZCBtYXliZSB2ZXJpZnlpbmcgYSByZXZvY2F0aW9uIGxpc3Q/IE9yIGlzIHRoaXMgYSBtdWNoIHNpbXBsZXIgY2hlY2ssIG9ubHkgdmVyaWZ5aW5nIGZvcm1hdCB2YWxpZGl0eT8KCkkgbmVlZCB0byBxdWlja2x5IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2Ugc2NlbmFyaW9zLiBEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHksIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBvdGhlciBzZWN1cml0eSBzeXN0ZW1zIGFyZSBpbiBwbGFjZSwgc28gSSBjYW4gc2VlIHdoYXQgcHJvdGVjdGlvbnMgaXQgaXMgcHJvdmlkaW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gKmRvKiwgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXRzIGVmZmVjdGl2ZW5lc3MgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBhbmQgdGhlIHJlZ2lzdHJ5IGFuZCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCAmIzM0O3ZhbGlkJiMzNDsgKm1lYW5zKiwgYW5kIHdoYXQgYWN0aW9ucyBkZXBlbmQgb24gdGhhdCB2YWxpZGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NTpcdHN0YXRpYyBib29sIHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxuIDc2NjpcdHtcbiA3Njc6XHRcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc2lnO1xuIDc2ODpcdFx0Ym9vbCByZXN1bHQ7XG4gNzY5Olx0XG4gNzcwOlx0XHRpZiAocmVxdWVzdF9maXJtd2FyZShcdTAwMjZzaWcsIFwmIzM0O3JlZ3VsYXRvcnkuZGIucDdzXCYjMzQ7LCBcdTAwMjZyZWdfZmRldi1cdTAwM2VkZXYpKVxuIDc3MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzcyOlx0XG4gNzczOlx0XHRyZXN1bHQgPSB2ZXJpZnlfcGtjczdfc2lnbmF0dXJlKGRhdGEsIHNpemUsIHNpZy1cdTAwM2VkYXRhLCBzaWctXHUwMDNlc2l6ZSxcbiA3NzQ6XHRcdFx0XHRcdFx0YnVpbHRpbl9yZWdkYl9rZXlzLFxuIDc3NTpcdFx0XHRcdFx0XHRWRVJJRllJTkdfVU5TUEVDSUZJRURfU0lHTkFUVVJFLFxuIDc3NjpcdFx0XHRcdFx0XHROVUxMLCBOVUxMKSA9PSAwO1xuIDc3NzpcdFxuIDc3ODpcdFx0cmVsZWFzZV9maXJtd2FyZShzaWcpO1xuIDc3OTpcdFxuIDc4MDpcdFx0cmV0dXJuIHJlc3VsdDtcbiA3ODE6XHR9XG4gNzgyOlx0XG4gNzgzOlx0c3RhdGljIHZvaWQgZnJlZV9yZWdkYl9rZXlyaW5nKHZvaWQpXG4gNzg0Olx0e1xuIDc4NTpcdFx0a2V5X3B1dChidWlsdGluX3JlZ2RiX2tleXMpO1xuIDc4NjpcdH1cbiA3ODc6XHQjZWxzZVxuIDc4ODpcdHN0YXRpYyBpbnQgbG9hZF9idWlsdGluX3JlZ2RiX2tleXModm9pZClcbiA3ODk6XHR7XG4gNzkwOlx0XHRyZXR1cm4gMDtcbiA3OTE6XHR9XG4gNzkyOlx0XG4gNzkzOlx0c3RhdGljIGJvb2wgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXG4gNzk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogVGFyZ2V0ZWQgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgc3BlY2lmaWMgd2l0aGluIHRoaXMgY29kZWJhc2UuIFRoZSBwcmVjaXNlIGlzc3VlIGlzbiYjMzk7dCBjbGVhciBmcm9tIHRoZSBvdXRzZXQsIGJ1dCBJIGtub3cgdGhlIHJlbGV2YW50IGFyZWEgaXMgbGlrZWx5IG5lYXIgbGluZSA3NjUuIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyB0aGF0IGEgYnVnIG9yIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3QgaXMgc2l0dWF0ZWQgc29tZXdoZXJlIGFyb3VuZCB0aGF0IGxvY2F0aW9uLiBSYXRoZXIgdGhhbiBhIGJydXRlLWZvcmNlIGFwcHJvYWNoLCB0aGUgZm9jdXMgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgc2VjdGlvbiBvZiBjb2RlIGFkamFjZW50IHRvIHRoYXQgbGluZS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dOKAlHRoZSBwcmVjZWRpbmcgbGluZXMgYXJlIGp1c3QgYXMgaW1wb3J0YW50IGFzIHRoZSBvbmUgdW5kZXIgc2NydXRpbnkuIElzIHRoZXJlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbj8gQSBjb25kaXRpb25hbCBibG9jaz8gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IFRoZSBsaW5lcyBhYm92ZSB3aWxsIG9mZmVyIHRob3NlIGNsdWVzLiBUaGF0IGlzIHRoZSBmaXJzdCBzdGVwLCB1bmRlcnN0YW5kaW5nIHRoZSBuZWFyYnkgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3JlZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MzU6XHRzdGF0aWMgaW50IF9faW5pdCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxuIDczNjpcdHtcbiA3Mzc6XHRcdGJ1aWx0aW5fcmVnZGJfa2V5cyA9XG4gNzM4Olx0XHRcdGtleXJpbmdfYWxsb2MoXCYjMzQ7LmJ1aWx0aW5fcmVnZGJfa2V5c1wmIzM0OyxcbiA3Mzk6XHRcdFx0XHQgICAgICBLVUlEVF9JTklUKDApLCBLR0lEVF9JTklUKDApLCBjdXJyZW50X2NyZWQoKSxcbiA3NDA6XHRcdFx0XHQgICAgICAoKEtFWV9QT1NfQUxMIFx1MDAyNiB+S0VZX1BPU19TRVRBVFRSKSB8XG4gNzQxOlx0XHRcdFx0ICAgICAgS0VZX1VTUl9WSUVXIHwgS0VZX1VTUl9SRUFEIHwgS0VZX1VTUl9TRUFSQ0gpLFxuIDc0MjpcdFx0XHRcdCAgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwsIE5VTEwpO1xuIDc0MzpcdFx0aWYgKElTX0VSUihidWlsdGluX3JlZ2RiX2tleXMpKVxuIDc0NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihidWlsdGluX3JlZ2RiX2tleXMpO1xuIDc0NTpcdFxuIDc0NjpcdFx0cHJfbm90aWNlKFwmIzM0O0xvYWRpbmcgY29tcGlsZWQtaW4gWC41MDkgY2VydGlmaWNhdGVzIGZvciByZWd1bGF0b3J5IGRhdGFiYXNlXFxuXCYjMzQ7KTtcbiA3NDc6XHRcbiA3NDg6XHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuIDc0OTpcdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3Qoc2hpcHBlZF9yZWdkYl9jZXJ0cyxcbiA3NTA6XHRcdFx0XHRcdCAgIHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuLFxuIDc1MTpcdFx0XHRcdFx0ICAgYnVpbHRpbl9yZWdkYl9rZXlzKTtcbiA3NTI6XHQjZW5kaWZcbiA3NTM6XHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxuIDc1NDpcdFx0aWYgKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJbMF0gIT0gJiMzOTtcXDAmIzM5OylcbiA3NTU6XHRcdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXG4gNzU2Olx0XHRcdFx0XHRcdCAgIGV4dHJhX3JlZ2RiX2NlcnRzX2xlbixcbiA3NTc6XHRcdFx0XHRcdFx0ICAgYnVpbHRpbl9yZWdkYl9rZXlzKTtcbiA3NTg6XHQjZW5kaWZcbiA3NTk6XHRcbiA3NjA6XHRcdHJldHVybiAwO1xuIDc2MTpcdH1cbiA3NjI6XHRcbiA3NjM6XHRNT0RVTEVfRklSTVdBUkUoXCYjMzQ7cmVndWxhdG9yeS5kYi5wN3NcJiMzNDspO1xuIDc2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1pc3NpbmcgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZTogQSBRdWljayBDb25jZXJuKioKCkhtbSwgd2FpdCBhIHNlY29uZC4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHNjYW5uaW5nIHRocm91Z2ggdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGByZWdkYmAgYW5kIEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHNlZSB0aGUgYCNpZmRlZmAgYmxvY2sgZ3VhcmRpbmcgdGhlIHVzZSBvZiBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByZWQgZmxhZy4gSSBhc3N1bWVkIGl0IHdvdWxkIGJlIHRoZXJlIGdpdmVuIGl0cyBjb25kaXRpb25hbCBuYXR1cmUsIGFuZCB0aGUgY29tcGxleGl0eSBvZiBpdHMgdW5kZXJseWluZyBsb2dpYy4gSXMgaXQgbWlzc2luZywgb3IgYW0gSSBqdXN0IG1pc3NpbmcgaXQ/CgpJcyB0aGUgc3ltYm9sIGRlZmluZWQgZWxzZXdoZXJlLCBpbiBhIGhlYWRlciBJIGhhdmVuJiMzOTt0IGluY2x1ZGVkIHlldD8gT3IsIG1vcmUgY29uY2VybmluZ2x5LCBpcyBpdCBiZWluZyBjb21waWxlZCBpbiB1bmNvbmRpdGlvbmFsbHksIHdoZW4gcGVyaGFwcyBpdCAqc2hvdWxkbiYjMzk7dCogYmU/IFRoYXQgY291bGQgaW50cm9kdWNlIHNvbWUgc3VidGxlIGJ1Z3MgaWYgdGhpcyBzaWduYXR1cmUgY2hlY2sgaXNuJiMzOTt0IGNvbnNpc3RlbnRseSBlbmFibGVkIGFjcm9zcyBhbGwgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgaG93IHRoaXMgc2lnbmF0dXJlIHZhbGlkYXRpb24gaXMgY29udHJvbGxlZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCB0aGlzIHNvcnRlZCBvdXQgYmVmb3JlIGl0IGNvbWVzIGJhY2sgdG8gYml0ZSB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwNTpcdFx0LyogbWFrZSBzdXJlIHdlIGNhbiByZWFkIGxlbi9uX3J1bGVzICovXG4gNzA2Olx0XHRpZiAoKHU4ICopY29sbCAmIzQzOyBvZmZzZXRvZmVuZCh0eXBlb2YoKmNvbGwpLCBuX3J1bGVzKSBcdTAwM2UgZGF0YSAmIzQzOyBzaXplKVxuIDcwNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzA4Olx0XG4gNzA5Olx0XHQvKiBtYWtlIHN1cmUgYmFzZSBzdHJ1Y3QgYW5kIGFsbCBydWxlcyBmaXQgKi9cbiA3MTA6XHRcdGlmICgodTggKiljb2xsICYjNDM7IEFMSUdOKGNvbGwtXHUwMDNlbGVuLCAyKSAmIzQzO1xuIDcxMTpcdFx0ICAgIChjb2xsLVx1MDAzZW5fcnVsZXMgKiAyKSBcdTAwM2UgZGF0YSAmIzQzOyBzaXplKVxuIDcxMjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzEzOlx0XG4gNzE0Olx0XHQvKiBtYW5kYXRvcnkgZmllbGRzIG11c3QgZXhpc3QgKi9cbiA3MTU6XHRcdGlmIChjb2xsLVx1MDAzZWxlbiBcdTAwM2Mgb2Zmc2V0b2ZlbmQoc3RydWN0IGZ3ZGJfY29sbGVjdGlvbiwgZGZzX3JlZ2lvbikpXG4gNzE2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA3MTc6XHRcbiA3MTg6XHRcdHJ1bGVzX3B0ciA9ICh2b2lkICopKCh1OCAqKWNvbGwgJiM0MzsgQUxJR04oY29sbC1cdTAwM2VsZW4sIDIpKTtcbiA3MTk6XHRcbiA3MjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbGwtXHUwMDNlbl9ydWxlczsgaSYjNDM7JiM0MzspIHtcbiA3MjE6XHRcdFx0dTE2IHJ1bGVfcHRyID0gYmUxNl90b19jcHUocnVsZXNfcHRyW2ldKTtcbiA3MjI6XHRcbiA3MjM6XHRcdFx0aWYgKCF2YWxpZF9ydWxlKGRhdGEsIHNpemUsIHJ1bGVfcHRyKSlcbiA3MjQ6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzI1Olx0XHR9XG4gNzI2Olx0XG4gNzI3Olx0XHRyZXR1cm4gdHJ1ZTtcbiA3Mjg6XHR9XG4gNzI5Olx0XG4gNzMwOlx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxuIDczMTpcdCNpbmNsdWRlIFx1MDAzY2tleXMvYXN5bW1ldHJpYy10eXBlLmhcdTAwM2VcbiA3MzI6XHRcbiA3MzM6XHRzdGF0aWMgc3RydWN0IGtleSAqYnVpbHRpbl9yZWdkYl9rZXlzO1xuIDczNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY1NQoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiA2NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgY2ZnODAyMTEgUmVndWxhdG9yeSBEYXRhYmFzZSBMb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgY2hhbmdlcyB0byB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBsb2FkaW5nIGluIGBjZmc4MDIxMWAgYW5kIGhhdmUgYSBjbGVhciBzdHJhdGVneS4gIFRoZSBrZXkgaXMgdG8gdGFyZ2V0IGByZWdkYl9sb2FkYCBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBzaW5jZSB0aGUgZmlybXdhcmUgbG9hZGluZyBsb2dpYyBoYXMgYmVlbiB1cGRhdGVkIGFuZCB0aGVyZSYjMzk7cyBhIG5ldyBgcmVnZGJfbG9hZGAgZnVuY3Rpb24uICBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgY2FuIGhpdCBhbGwgdGhlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4KClRoZSBjb3JlIG9mIG15IGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIGBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJgLiBJZiB0aGF0JiMzOTtzIGVuYWJsZWQsIHRoZW4gYSBzaWduYXR1cmUgY2hlY2sgaGFwcGVucy4gSWYgaXQmIzM5O3MgKm5vdCogZW5hYmxlZCwgb3IgdGhlIHNpZ25hdHVyZSYjMzk7cyB2YWxpZCwgdGhlbiBpdCBza2lwcyB0aGUgc2lnbmF0dXJlIGNoZWNrIGVudGlyZWx5LiBCZWNhdXNlIHN5emthbGxlciBjYW4gZmVlZCBpbiBhcmJpdHJhcnkgZmlybXdhcmUsIGEgZmFpbGVkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gd2lsbCBiYWlsIG91dCBvZiB0aGUgbG9hZGluZyBwcm9jZXNzIHByZW1hdHVyZWx5LiAgVGhlcmVmb3JlLCBJIHdhbnQgdG8gYXZvaWQgZGVhbGluZyB3aXRoIHNpZ25lZCBkYXRhYmFzZXMgZm9yIGZ1enppbmcuCgpHb29kIG5ld3M6IHRoZSBkZWZhdWx0IGZvciBgQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCYCBpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGlzIGBmYWxzZWAsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuICBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHByb3ZpZGluZyBhIHZhbGlkIHNpZ25hdHVyZSBvciBkaXNhYmxpbmcgaXQuCgpNeSBzdHJhdGVneSBpcyB0byBlbmFibGUgYENGRzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhlIGBtYWM4MDIxMV9od3NpbWAgd2lsbCBnaXZlIG1lIGEgc29mdHdhcmUtZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlIHRvIGludGVyYWN0IHdpdGguCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYCBpcyByZWFjaGFibGUgdGhyb3VnaCBgd2lwaHlfcmVnaXN0ZXJgLCBgcmVnX3JlbG9hZF9yZWdkYmAgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rLCBgcXVlcnlfcmVnZGJfZmlsZWAgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYHJlZ19xdWVyeV9kYXRhYmFzZWAsIGFuZCBgcmVnZGJfZndfY2JfcmVzdG9yZWAgaXMgYSBmaXJtd2FyZSBjYWxsYmFjay4gYHJlZ2RiX2xvYWRgIGl0c2VsZiB0aWVzIHRoZW0gYWxsIHRvZ2V0aGVyLgoKSSYjMzk7dmUgbWFkZSBzdXJlIHRoYXQgdGhlIGZ1enppbmcgY2FuIGhpdCBhbGwgb2YgdGhlIGltcG9ydGFudCBhcmVhcyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guIE5vIG90aGVyIGZ1bmN0aW9uIGNhbGxzIHdpbGwgYmUgbW9kaWZpZWQsIHNvIHRoZXNlIHdpbGwgYmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4KClNvLCBoZXJlJiMzOTtzIHRoZSBmaW5hbCBwbGFuLiAgV2Ugc2hvdWxkIGZ1enogdGhlIGZvbGxvd2luZzoKCioqV29ydGhGdXp6aW5nOiB0cnVlKioKCioqRm9jdXNTeW1ib2xzOioqCgoqICAgYHJlZ2RiX2xvYWRgCiogICBgcmVnZGJfZndfY2JfcmVzdG9yZWAKKiAgIGBxdWVyeV9yZWdkYl9maWxlYAoqICAgYHJlZ19yZWxvYWRfcmVnZGJgCiogICBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmAKCioqRW5hYmxlQ29uZmlnczoqKgoKKiAgIGBDRkc4MDIxMWAKKiAgIGBNQUM4MDIxMV9IV1NJTWAKClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgdGhlIGZpcm13YXJlIGxvYWRpbmcgZm9yIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHBhdGhzIHZpYSBzb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzIGFuZCBuZXRsaW5rLiBUaGUgZnV6emluZyBlZmZvcnRzIG5lZWQgdG8gYmUgY2VudGVyZWQgb24gdGhlc2UgZmlybXdhcmUgbG9hZGluZyBhbmQgcmVndWxhdG9yeSByZWdpc3RyYXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2RiX2xvYWQmIzM0OywKICAgICYjMzQ7cmVnZGJfZndfY2JfcmVzdG9yZSYjMzQ7LAogICAgJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgICAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAgICYjMzQ7d2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2RiX2xvYWQmIzM0OywKICAgICYjMzQ7cmVnZGJfZndfY2JfcmVzdG9yZSYjMzQ7LAogICAgJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgICAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAgICYjMzQ7d2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6MTUuODEzMDExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MTg2OTAwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnZGJfbG9hZFwiLFxuICAgIFwicmVnZGJfZndfY2JfcmVzdG9yZVwiLFxuICAgIFwicXVlcnlfcmVnZGJfZmlsZVwiLFxuICAgIFwicmVnX3JlbG9hZF9yZWdkYlwiLFxuICAgIFwid2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgbG9hZGluZyB0aGUgYHJlZ3VsYXRvcnkuZGJgIGZpcm13YXJlIGluIHRoZSBjZmc4MDIxMSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgYHJlZ2RiX2xvYWRgIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGhvdyBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aHMgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSBkdXJpbmcgd2lwaHkgcmVnaXN0cmF0aW9uIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZmlybXdhcmUgbG9hZGluZyBhbmQgcmVndWxhdG9yeSByZWdpc3RyYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjE1LjgxMzAyNzc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE0MzMzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDE2OjU4OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuY1xcbmluZGV4IDFlODIxNGQ2YjZkODgxLi5kN2I4NjRkMzJiYTFlYSAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcXG4rKysgYi9uZXQvd2lyZWxlc3MvcmVnLmNcXG5AQCAtOTg4LDc4ICs5ODgsOTggQEAgc3RhdGljIGludCBxdWVyeV9yZWdkYihjb25zdCBjaGFyICphbHBoYTIpXFxuIFxcdHJldHVybiAtRU5PREFUQTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVnZGJfZndfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcXG4rTU9EVUxFX0ZJUk1XQVJFKFxcXCJyZWd1bGF0b3J5LmRiXFxcIik7XFxuK1xcbisvKiBWYWxpZGF0ZSBhbmQgc3RvcmUgZmlybXdhcmUgaW1hZ2UgYXMgcmVnZGIuIFVzZWQgYnkgYWxsIGxvYWQgcGF0aHMuICovXFxuK3N0YXRpYyBpbnQgcmVnZGJfbG9hZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiB7XFxuLVxcdGludCBzZXRfZXJyb3IgPSAwO1xcbi1cXHRib29sIHJlc3RvcmUgPSB0cnVlO1xcbiBcXHR2b2lkICpkYjtcXG4gXFxuLVxcdGlmICghZncpIHtcXG4tXFx0XFx0cHJfaW5mbyhcXFwiZmFpbGVkIHRvIGxvYWQgcmVndWxhdG9yeS5kYlxcXFxuXFxcIik7XFxuLVxcdFxcdHNldF9lcnJvciA9IC1FTk9EQVRBO1xcbi1cXHR9IGVsc2UgaWYgKCF2YWxpZF9yZWdkYihmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpKSB7XFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoIXZhbGlkX3JlZ2RiKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSkpIHtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHJlZ3VsYXRvcnkuZGIgaXMgbWFsZm9ybWVkIG9yIHNpZ25hdHVyZSBpcyBtaXNzaW5nL2ludmFsaWRcXFxcblxcXCIpO1xcbi1cXHRcXHRzZXRfZXJyb3IgPSAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0ZGIgPSBrbWVtZHVwKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGIpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmVnZGIgPSBkYjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4gXFx0cnRubF9sb2NrKCk7XFxuLVxcdGlmIChyZWdkYiBcXHUwMDI2XFx1MDAyNiAhSVNfRVJSKHJlZ2RiKSkge1xcbi1cXHRcXHQvKiBuZWdhdGl2ZSBjYXNlIC0gYSBidWdcXG4tXFx0XFx0ICogcG9zaXRpdmUgY2FzZSAtIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2UgaW4gY2FzZSBvZiBtdWx0aXBsZSBjYidzIGluXFxuLVxcdFxcdCAqIHF1ZXVlLCBkdWUgdG8gdXNhZ2Ugb2YgYXN5bmNocm9ub3VzIGNhbGxiYWNrXFxuLVxcdFxcdCAqXFxuLVxcdFxcdCAqIEVpdGhlciBjYXNlLCBqdXN0IHJlc3RvcmUgYW5kIGZyZWUgbmV3IGRiLlxcbi1cXHRcXHQgKi9cXG4tXFx0fSBlbHNlIGlmIChzZXRfZXJyb3IpIHtcXG4tXFx0XFx0cmVnZGIgPSBFUlJfUFRSKHNldF9lcnJvcik7XFxuLVxcdH0gZWxzZSBpZiAoZncpIHtcXG4tXFx0XFx0ZGIgPSBrbWVtZHVwKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuLVxcdFxcdGlmIChkYikge1xcbi1cXHRcXHRcXHRyZWdkYiA9IGRiO1xcbi1cXHRcXHRcXHRyZXN0b3JlID0gY29udGV4dCBcXHUwMDI2XFx1MDAyNiBxdWVyeV9yZWdkYihjb250ZXh0KTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmVzdG9yZSA9IHRydWU7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXG4tXFx0aWYgKHJlc3RvcmUpXFxuK1xcdC8qIFNraXAgaWYgYSBjb25jdXJyZW50IHdpcGh5IHJlZ2lzdHJhdGlvbiBhbHJlYWR5IGxvYWRlZCB0aGUgZGIuICovXFxuK1xcdGlmIChyZWdkYiBcXHUwMDI2XFx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVwbGF5IGFsbCBwZW5kaW5nIHJlZ3VsYXRvcnkgaGludHMgdGhhdCBhcnJpdmVkIHdoaWxlIHRoZVxcbitcXHQgKiBkYXRhYmFzZSB3YXMgbm90IHlldCBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgbG9hZCBvdXRjb21lLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFmdykge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmVnZGIgPSBFUlJfUFRSKC1FTk9EQVRBKTtcXG4gXFx0XFx0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuIFxcbi1cXHRydG5sX3VubG9jaygpO1xcbitcXHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmVnZGIgPSBFUlJfUFRSKGVycik7XFxuIFxcbi1cXHRrZnJlZShjb250ZXh0KTtcXG4rXFx0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcXG4gXFxuK291dF91bmxvY2s6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbiB9XFxuIFxcbi1NT0RVTEVfRklSTVdBUkUoXFxcInJlZ3VsYXRvcnkuZGJcXFwiKTtcXG4tXFxuIHN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcbi1cXHRpZiAocmVnZGIpXFxuK1xcdGlmIChyZWdkYiBcXHUwMDI2XFx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcXG4gXFx0XFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XFxuIFxcbi1cXHRhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghYWxwaGEyKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0LypcXG4rXFx0ICogTG9hZCBmYWlsZWQgb3IgYXN5bmMgdWRldiBsb2FkIGluIHByb2dyZXNzLiBJZiAtRUlOUFJPR1JFU1MsXFxuK1xcdCAqIGhpbnRzIGFyZSBwcmVzZXJ2ZWQgYW5kIHJlcGxheWVkIG9uY2UgdGhlIHVkZXYgbG9hZCBjb21wbGV0ZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfRVJSKHJlZ2RiKSBcXHUwMDI2XFx1MDAyNiBQVFJfRVJSKHJlZ2RiKSAhPSAtRUlOUFJPR1JFU1MpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJlZ2RiKTtcXG4gXFxuLVxcdGVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCB0cnVlLCBcXFwicmVndWxhdG9yeS5kYlxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZyZWdfZmRldi1cXHUwMDNlZGV2LCBHRlBfS0VSTkVMLFxcbi1cXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKWFscGhhMiwgcmVnZGJfZndfY2IpO1xcbitcXHQvKlxcbitcXHQgKiBQcmVzZXJ2ZSB0aGUgaGludCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgb24gZGlyZWN0IHBhdGhzO1xcbitcXHQgKiBhbiBhc3luYyB1ZGV2IGxvYWQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gd2lwaHkgcmVnaXN0cmF0aW9uXFxuK1xcdCAqIGFuZCB3aWxsIHJlcGxheSBhbGwgcGVuZGluZyBoaW50cyBvbiBjb21wbGV0aW9uLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3LCBcXFwicmVndWxhdG9yeS5kYlxcXCIsIFxcdTAwMjZyZWdfZmRldi1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0a2ZyZWUoYWxwaGEyKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGVyciA9IHJlZ2RiX2xvYWQoZncpO1xcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XFxuIH1cXG4gXFxuIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4tXFx0dm9pZCAqZGI7XFxuIFxcdGludCBlcnI7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjdXJyZW50X3JlZ2RvbWFpbjtcXG4gXFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDtcXG5AQCAtMTA2OCwyMSArMTA4OCwxNCBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKCF2YWxpZF9yZWdkYihmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9EQVRBO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0ZGIgPSBrbWVtZHVwKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghZGIpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHJlZ2RiKSlcXG4gXFx0XFx0a2ZyZWUocmVnZGIpO1xcbi1cXHRyZWdkYiA9IGRiO1xcbitcXHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuIFxcbiBcXHQvKiByZXNldCByZWd1bGF0b3J5IGRvbWFpbiAqL1xcbiBcXHRjdXJyZW50X3JlZ2RvbWFpbiA9IGdldF9jZmc4MDIxMV9yZWdkb20oKTtcXG5AQCAtMTEwMyw3ICsxMTE2LDYgQEAgaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcXG4gXFxuIG91dF91bmxvY2s6XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuLSBvdXQ6XFxuIFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuQEAgLTQwODUsNiArNDA5Nyw4IEBAIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxcbiB7XFxuIFxcdHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpO1xcbiBcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuIFxcdC8qIHNlbGYtbWFuYWdlZCBkZXZpY2VzIGlnbm9yZSBiZWFjb24gaGludHMgYW5kIGNvdW50cnkgSUUgKi9cXG4gXFx0aWYgKHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpIHtcXG4gXFx0XFx0d2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyB8XFxuQEAgLTQwOTcsNiArNDExMSwxNiBAQCB2b2lkIHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChsci1cXHUwMDNlaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKVxcbiBcXHRcXHRcXHRyZWdfY2FsbF9ub3RpZmllcih3aXBoeSwgbHIpO1xcbitcXHR9IGVsc2UgaWYgKCFyZWdkYikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiByZWd1bGF0b3J5LmRiIG5vdCB5ZXQgbG9hZGVkOyB0cmlnZ2VyIGFuIGFzeW5jIHVkZXZcXG4rXFx0XFx0ICogcmVxdWVzdCB0byBsb2FkIGl0IHdoZW4gdGhlIGZpcnN0IHdpcGh5IHJlZ2lzdGVycy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghZmlybXdhcmVfcmVxdWVzdF9ub3dhaXRfbm93YXJuKFRISVNfTU9EVUxFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcInJlZ3VsYXRvcnkuZGJcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJlZ19mZGV2LVxcdTAwM2VkZXYsIEdGUF9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLCByZWdkYl9md19jYl9yZXN0b3JlKSlcXG4rXFx0XFx0XFx0cmVnZGIgPSBFUlJfUFRSKC1FSU5QUk9HUkVTUyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcmVnX2Rldl9pZ25vcmVfY2VsbF9oaW50KHdpcGh5KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6MTYuNDE1MjAwMzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDMxNjQ1NzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdkYl9sb2FkXCIsXG4gICAgXCJyZWdkYl9md19jYl9yZXN0b3JlXCIsXG4gICAgXCJxdWVyeV9yZWdkYl9maWxlXCIsXG4gICAgXCJyZWdfcmVsb2FkX3JlZ2RiXCIsXG4gICAgXCJ3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBsb2FkaW5nIHRoZSBgcmVndWxhdG9yeS5kYmAgZmlybXdhcmUgaW4gdGhlIGNmZzgwMjExIHdpcmVsZXNzIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgcmVnZGJfbG9hZGAgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaG93IGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRocyBpbnRlcmFjdCwgcGFydGljdWxhcmx5IGR1cmluZyB3aXBoeSByZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgY29tbWFuZHMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBuZXRsaW5rIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmaXJtd2FyZSBsb2FkaW5nIGFuZCByZWd1bGF0b3J5IHJlZ2lzdHJhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTY6NTg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IDFlODIxNGQ2YjZkODgxLi5kN2I4NjRkMzJiYTFlYSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jXG5AQCAtOTg4LDc4ICs5ODgsOTggQEAgc3RhdGljIGludCBxdWVyeV9yZWdkYihjb25zdCBjaGFyICphbHBoYTIpXG4gXHRyZXR1cm4gLUVOT0RBVEE7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4rTU9EVUxFX0ZJUk1XQVJFKFwicmVndWxhdG9yeS5kYlwiKTtcbitcbisvKiBWYWxpZGF0ZSBhbmQgc3RvcmUgZmlybXdhcmUgaW1hZ2UgYXMgcmVnZGIuIFVzZWQgYnkgYWxsIGxvYWQgcGF0aHMuICovXG4rc3RhdGljIGludCByZWdkYl9sb2FkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4ge1xuLVx0aW50IHNldF9lcnJvciA9IDA7XG4tXHRib29sIHJlc3RvcmUgPSB0cnVlO1xuIFx0dm9pZCAqZGI7XG4gXG4tXHRpZiAoIWZ3KSB7XG4tXHRcdHByX2luZm8oXCJmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxuXCIpO1xuLVx0XHRzZXRfZXJyb3IgPSAtRU5PREFUQTtcbi1cdH0gZWxzZSBpZiAoIXZhbGlkX3JlZ2RiKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUpKSB7XG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xuIFx0XHRwcl9pbmZvKFwibG9hZGVkIHJlZ3VsYXRvcnkuZGIgaXMgbWFsZm9ybWVkIG9yIHNpZ25hdHVyZSBpcyBtaXNzaW5nL2ludmFsaWRcXG5cIik7XG4tXHRcdHNldF9lcnJvciA9IC1FSU5WQUw7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0ZGIgPSBrbWVtZHVwKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFkYilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZWdkYiA9IGRiO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcbit7XG4rXHRpbnQgZXJyO1xuK1xuIFx0cnRubF9sb2NrKCk7XG4tXHRpZiAocmVnZGIgXHUwMDI2XHUwMDI2ICFJU19FUlIocmVnZGIpKSB7XG4tXHRcdC8qIG5lZ2F0aXZlIGNhc2UgLSBhIGJ1Z1xuLVx0XHQgKiBwb3NpdGl2ZSBjYXNlIC0gY2FuIGhhcHBlbiBkdWUgdG8gcmFjZSBpbiBjYXNlIG9mIG11bHRpcGxlIGNiJ3MgaW5cbi1cdFx0ICogcXVldWUsIGR1ZSB0byB1c2FnZSBvZiBhc3luY2hyb25vdXMgY2FsbGJhY2tcbi1cdFx0ICpcbi1cdFx0ICogRWl0aGVyIGNhc2UsIGp1c3QgcmVzdG9yZSBhbmQgZnJlZSBuZXcgZGIuXG4tXHRcdCAqL1xuLVx0fSBlbHNlIGlmIChzZXRfZXJyb3IpIHtcbi1cdFx0cmVnZGIgPSBFUlJfUFRSKHNldF9lcnJvcik7XG4tXHR9IGVsc2UgaWYgKGZ3KSB7XG4tXHRcdGRiID0ga21lbWR1cChmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKGRiKSB7XG4tXHRcdFx0cmVnZGIgPSBkYjtcbi1cdFx0XHRyZXN0b3JlID0gY29udGV4dCBcdTAwMjZcdTAwMjYgcXVlcnlfcmVnZGIoY29udGV4dCk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmVzdG9yZSA9IHRydWU7XG4tXHRcdH1cbi1cdH1cbiBcbi1cdGlmIChyZXN0b3JlKVxuK1x0LyogU2tpcCBpZiBhIGNvbmN1cnJlbnQgd2lwaHkgcmVnaXN0cmF0aW9uIGFscmVhZHkgbG9hZGVkIHRoZSBkYi4gKi9cbitcdGlmIChyZWdkYiBcdTAwMjZcdTAwMjYgIUlTX0VSUihyZWdkYikpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdC8qXG4rXHQgKiBSZXBsYXkgYWxsIHBlbmRpbmcgcmVndWxhdG9yeSBoaW50cyB0aGF0IGFycml2ZWQgd2hpbGUgdGhlXG4rXHQgKiBkYXRhYmFzZSB3YXMgbm90IHlldCBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgbG9hZCBvdXRjb21lLlxuK1x0ICovXG4rXHRpZiAoIWZ3KSB7XG4rXHRcdHByX2luZm8oXCJmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxuXCIpO1xuK1x0XHRyZWdkYiA9IEVSUl9QVFIoLUVOT0RBVEEpO1xuIFx0XHRyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSwgZmFsc2UpO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4gXG4tXHRydG5sX3VubG9jaygpO1xuK1x0ZXJyID0gcmVnZGJfbG9hZChmdyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbiBcbi1cdGtmcmVlKGNvbnRleHQpO1xuK1x0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcbiBcbitvdXRfdW5sb2NrOlxuK1x0cnRubF91bmxvY2soKTtcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIH1cbiBcbi1NT0RVTEVfRklSTVdBUkUoXCJyZWd1bGF0b3J5LmRiXCIpO1xuLVxuIHN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbiBcdGludCBlcnI7XG4gXG4gXHRBU1NFUlRfUlROTCgpO1xuIFxuLVx0aWYgKHJlZ2RiKVxuK1x0aWYgKHJlZ2RiIFx1MDAyNlx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcbiBcdFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XG4gXG4tXHRhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWFscGhhMilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHQvKlxuK1x0ICogTG9hZCBmYWlsZWQgb3IgYXN5bmMgdWRldiBsb2FkIGluIHByb2dyZXNzLiBJZiAtRUlOUFJPR1JFU1MsXG4rXHQgKiBoaW50cyBhcmUgcHJlc2VydmVkIGFuZCByZXBsYXllZCBvbmNlIHRoZSB1ZGV2IGxvYWQgY29tcGxldGVzLlxuK1x0ICovXG4rXHRpZiAoSVNfRVJSKHJlZ2RiKSBcdTAwMjZcdTAwMjYgUFRSX0VSUihyZWdkYikgIT0gLUVJTlBST0dSRVNTKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihyZWdkYik7XG4gXG4tXHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgXCJyZWd1bGF0b3J5LmRiXCIsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZyZWdfZmRldi1cdTAwM2VkZXYsIEdGUF9LRVJORUwsXG4tXHRcdFx0XHQgICAgICAodm9pZCAqKWFscGhhMiwgcmVnZGJfZndfY2IpO1xuK1x0LypcbitcdCAqIFByZXNlcnZlIHRoZSBoaW50IGlmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCBvbiBkaXJlY3QgcGF0aHM7XG4rXHQgKiBhbiBhc3luYyB1ZGV2IGxvYWQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gd2lwaHkgcmVnaXN0cmF0aW9uXG4rXHQgKiBhbmQgd2lsbCByZXBsYXkgYWxsIHBlbmRpbmcgaGludHMgb24gY29tcGxldGlvbi5cbitcdCAqL1xuK1x0ZXJyID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncsIFwicmVndWxhdG9yeS5kYlwiLCBcdTAwMjZyZWdfZmRldi1cdTAwM2VkZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0a2ZyZWUoYWxwaGEyKTtcbitcdFx0cmV0dXJuIDA7XG4rXHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gcXVlcnlfcmVnZGIoYWxwaGEyKTtcbiB9XG4gXG4gaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLVx0dm9pZCAqZGI7XG4gXHRpbnQgZXJyO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1cnJlbnRfcmVnZG9tYWluO1xuIFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDtcbkBAIC0xMDY4LDIxICsxMDg4LDE0IEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xuLVx0XHRlcnIgPSAtRU5PREFUQTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRkYiA9IGttZW1kdXAoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWRiKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHJlZ2RiKSlcbiBcdFx0a2ZyZWUocmVnZGIpO1xuLVx0cmVnZGIgPSBkYjtcbitcdGVyciA9IHJlZ2RiX2xvYWQoZncpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFxuIFx0LyogcmVzZXQgcmVndWxhdG9yeSBkb21haW4gKi9cbiBcdGN1cnJlbnRfcmVnZG9tYWluID0gZ2V0X2NmZzgwMjExX3JlZ2RvbSgpO1xuQEAgLTExMDMsNyArMTExNiw2IEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpXG4gXG4gb3V0X3VubG9jazpcbiBcdHJ0bmxfdW5sb2NrKCk7XG4tIG91dDpcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtNDA4NSw2ICs0MDk3LDggQEAgdm9pZCB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4ge1xuIFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqbHIgPSBnZXRfbGFzdF9yZXF1ZXN0KCk7XG4gXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuIFx0Lyogc2VsZi1tYW5hZ2VkIGRldmljZXMgaWdub3JlIGJlYWNvbiBoaW50cyBhbmQgY291bnRyeSBJRSAqL1xuIFx0aWYgKHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXHUwMDI2IFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEKSB7XG4gXHRcdHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyB8XG5AQCAtNDA5Nyw2ICs0MTExLDE2IEBAIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0XHQgKi9cbiBcdFx0aWYgKGxyLVx1MDAzZWluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUilcbiBcdFx0XHRyZWdfY2FsbF9ub3RpZmllcih3aXBoeSwgbHIpO1xuK1x0fSBlbHNlIGlmICghcmVnZGIpIHtcbitcdFx0LypcbitcdFx0ICogcmVndWxhdG9yeS5kYiBub3QgeWV0IGxvYWRlZDsgdHJpZ2dlciBhbiBhc3luYyB1ZGV2XG4rXHRcdCAqIHJlcXVlc3QgdG8gbG9hZCBpdCB3aGVuIHRoZSBmaXJzdCB3aXBoeSByZWdpc3RlcnMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWZpcm13YXJlX3JlcXVlc3Rfbm93YWl0X25vd2FybihUSElTX01PRFVMRSxcbitcdFx0XHRcdFx0XHQgICAgXCJyZWd1bGF0b3J5LmRiXCIsXG4rXHRcdFx0XHRcdFx0ICAgIFx1MDAyNnJlZ19mZGV2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCxcbitcdFx0XHRcdFx0XHQgICAgTlVMTCwgcmVnZGJfZndfY2JfcmVzdG9yZSkpXG4rXHRcdFx0cmVnZGIgPSBFUlJfUFRSKC1FSU5QUk9HUkVTUyk7XG4gXHR9XG4gXG4gXHRpZiAoIXJlZ19kZXZfaWdub3JlX2NlbGxfaGludCh3aXBoeSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODoxNi40MTUyMDE3ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg5OTI1ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFJlZ3VsYXRvcnkgRGF0YWJhc2UgTG9hZGluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSByZWZhY3RvciBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaW52b2x2ZXMgaG93IHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIChgcmVndWxhdG9yeS5kYmApIGlzIGxvYWRlZC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGByZWdkYl9sb2FkKClgLCByZW5hbWVkIGByZWdkYl9md19jYmAgdG8gYHJlZ2RiX2Z3X2NiX3Jlc3RvcmVgLCBhbmQgdHdlYWtlZCBhIGZldyBvdGhlciBmdW5jdGlvbnM6IGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBUaGlzIGlzIGFsbCBjcml0aWNhbCBzdHVmZiwgdGhlIG1lYXQgYW5kIHBvdGF0b2VzIG9mIHRoZSBjZmc4MDIxMSBhbmQgbWFjODAyMTEgc3Vic3lzdGVtcywgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyB0aGUgd2lyZWxlc3Mgc3RhY2sgaGFuZGxlcyByZWd1bGF0b3J5IGluZm9ybWF0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiBhY2Nlc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgdGVzdGluZyBlbnZpcm9ubWVudC4gRm9ydHVuYXRlbHksIHdpdGggd2lyZWxlc3MgY29kZSwgYG1hYzgwMjExX2h3c2ltYCBpcyB1c3VhbGx5IG15IGdvLXRvLiBTaW5jZSBgbWFjODAyMTFfaHdzaW1gIGlzIGEgc29mdHdhcmUgc2ltdWxhdG9yLCBpdCBzaG91bGQgYmUgZmluZSBpbiBhIFZNLiBUaGF0J3MgZ29vZDsgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cy4gQmFzZWQgb24gdGhlIHBhdGNoLCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBzaG91bGQgYmUgbG9va2luZyBhdCBhcmU6XG5cbiogICBgcmVnZGJfbG9hZGAgKG5ldyBmdW5jdGlvbiwgb2J2aW91c2x5IGltcG9ydGFudClcbiogICBgcmVnZGJfZndfY2JfcmVzdG9yZWAgKHJlbmFtZWQgZnJvbSBgcmVnZGJfZndfY2JgLCBzbyB3b3J0aCBhIGxvb2sgYXQgdGhlIGNoYW5nZXMpXG4qICAgYHF1ZXJ5X3JlZ2RiX2ZpbGVgXG4qICAgYHJlZ19yZWxvYWRfcmVnZGJgXG4qICAgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgXG5cbkZpbmFsbHksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIOKAkyBgbmV0L3dpcmVsZXNzL3JlZy5jYCDigJMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYWZmZWN0IHRoaXMgY29kZS4gU3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfQ0ZHODAyMTFgIG9yIGBDT05GSUdfTUFDODAyMTFgIGFyZSByZXF1aXJlZC4gSSdsbCBjaGVjayBlaXRoZXIgdGhlIGBNYWtlZmlsZWAgb3IgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gYG5ldC93aXJlbGVzcy9gLiBOZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYnVpbGRpbmcgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgc28gbXkgZnV6emluZyBpc24ndCBhIHdhc3RlIG9mIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODoyMy40MDUxMzAxMDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDI4MDc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLS4qcmVnXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjIzLjUyNTE2ODQ0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTg3MjE3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCBzdG9wOiBgbmV0L3dpcmVsZXNzL01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3aXJlbGVzcyBkcml2ZXJzIGFyZSBiZWluZyBidWlsdCBhbmQgbGlua2VkIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyBNYWtlZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIHRoYXQsIGFuZCBhIHF1aWNrIGluc3BlY3Rpb24gc2hvdWxkIGNsYXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLiBJJ20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IHZhcmlhYmxlcywgaW5jbHVkZSBkaXJlY3RpdmVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hpY2ggZHJpdmVycyBnZXQgYnVpbHQgYmFzZWQgb24gY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgY2hhbmdlcyBJIG5lZWQgdG8gbWFrZSB0byB0aGUgd2lyZWxlc3Mgc3RhY2suIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODoyNi43ODM4OTMwODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9cXG4gICAzOlxcdG9iai15ICs9IHRlc3RzL1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfV0VYVF9DT1JFKSArPSB3ZXh0LWNvcmUub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgKz0gd2V4dC1wcm9jLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vXFxuICAgODpcXHRcXG4gICA5OlxcdGNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xcbiAgMTA6XFx0Y2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8gbWVzaC5vIGFwLm8gdHJhY2UubyBvY2Iub1xcbiAgMTE6XFx0Y2ZnODAyMTEteSArPSBtaWNoYWVsLW1pYy5vIHBtc3Iub1xcbiAgMTI6XFx0Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG4gIDEzOlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbiAgMTQ6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxuICAxOTpcXHRpZm5lcSAoJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSwpXFxuICAyMDpcXHRjZmc4MDIxMS15ICs9IGV4dHJhLWNlcnRzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6MjYuNzgzOTkxMjE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MjA4NjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcmVndWxhdG9yeSBkYXRhYmFzZSBzaXR1YXRpb24uIFJpZ2h0LCBgcmVnLm9gIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYGNmZzgwMjExLXlgIGJ1aWxkIGNoYWluLCB3aGljaCBtYWtlcyBzZW5zZSAtIGl0J3Mgb25seSBidWlsdCBpZiBgQ09ORklHX0NGRzgwMjExYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBgcmVnLm9gIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHRyaWdnZXJlZC4gQWgsIHJpZ2h0LCB0byBnZXQgdGhlIHdpcGh5cyBpbnN0YW50aWF0ZWQgYW5kIGNhbGwgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLCBJIGFsc28gbmVlZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYC4gVGhhdCBwcm92aWRlcyB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGhhdCBjb250cm9scyAqaG93KiB0aGlzIHJlZ3VsYXRvcnkgZGF0YWJhc2UgaXMgaGFuZGxlZD8gSSBzZWVtIHRvIHJlY2FsbCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcsIGxpa2UgYENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgb3IgYSBzaW1pbGFyIG9wdGlvbi4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZSB0byBjaGVjayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc2VlIGlmIHRoZXkgaW1wYWN0IHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIGxvYWRpbmcgb3IgdmVyaWZpY2F0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODozMC45NzYwODA2NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4ODc4MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODozMS4xMTQ5NjQwNjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY0OTc4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVndWxhdG9yeSBEYXRhYmFzZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvd2lyZWxlc3MvcmVnLmNgIGZpbGUuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgb3IgYENGRzgwMjExX0NSREFfU1VQUE9SVGAgaGF2ZSBhbnkgcmVsZXZhbmNlIGhlcmU7IHRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgYW55IHJlZ3VsYXRvcnkgY2hhbmdlcy4gSSBub3RpY2UgaXQncyB1c2luZyBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIGFuZCBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIHRvIGhhbmRsZSBgcmVndWxhdG9yeS5kYmAsIHdoaWNoIHRlbGxzIG1lIGl0J3MgcmVseWluZyBvbiBgQ09ORklHX0ZXX0xPQURFUmAuIFRoYXQgbWVhbnMgdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgY2FuIGdldCB0byBpdC5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucy4gYENGRzgwMjExYCBpcyBhIGdpdmVuLCBvYnZpb3VzbHkuIGBNQUM4MDIxMV9IV1NJTWAgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHRlc3RpbmcsIHRvby4gSSdsbCBpbmNsdWRlIGBNQUM4MDIxMV9IV1NJTWAgaW4gdGhlIGxpc3QsIHRob3VnaCBpdCdzIGxlc3MgY3JpdGljYWwuIEdpdmVuIHRoZSB1c2Ugb2YgZmlybXdhcmUgbG9hZGluZywgYEZXX0xPQURFUmAgaXMgcmVsZXZhbnQsIGJ1dCBpdCdzIHN1Y2ggYSBnZW5lcmFsIGNvbmZpZyBJIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGVzc2VudGlhbCBzeW1ib2xzIGluIG1pbmQuIFRoZSBwcmltYXJ5IHRhcmdldHMgYXJlIGRlZmluaXRlbHkgYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLlxuXG5KdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmc6IGByZWdkYl9sb2FkYCBpcyBzdGF0aWMuIEFscmlnaHQsIGByZWdkYl9md19jYl9yZXN0b3JlYCBpcyBhbHNvIHN0YXRpYy4gQW5kIGBxdWVyeV9yZWdkYl9maWxlYCB0b28uIE5vdywgYHJlZ19yZWxvYWRfcmVnZGJgIGlzIGV4cG9ydGVkLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLiBPa2F5LCB0aGF0IGZlZWxzIHByZXR0eSBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjM3Ljg3OTk0NTc5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTEyMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ19yZWxvYWRfcmVnZGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEwMDQ4PXN0YXRpYyBpbnQgbmw4MDIxMV9yZWxvYWRfcmVnZGIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwMDQ5LXtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwMDUwOlxcdHJldHVybiByZWdfcmVsb2FkX3JlZ2RiKCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDA1MS19XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MTA0NT1zdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNzktXFxubmV0L3dpcmVsZXNzL3JlZy5jOjEwODA6aW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMTA4MS17XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmg9MTY4PWJvb2wgcmVnX2Rmc19kb21haW5fc2FtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5MSwgc3RydWN0IHdpcGh5ICp3aXBoeTIpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5oLTE3MC0vKipcXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTcxOiAqIHJlZ19yZWxvYWRfcmVnZGIgLSByZWxvYWQgdGhlIHJlZ3VsYXRvcnkuZGIgZmlybXdhcmUgZmlsZVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzItICogUmV0dXJuOiAwIGZvciBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzMtICovXFxubmV0L3dpcmVsZXNzL3JlZy5oOjE3NDppbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTc1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODozOC4wMTU4NjQ1OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTI2MDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmVsb2FkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSByZWxvYWQgbWVjaGFuaXNtIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHJlZ19yZWxvYWRfcmVnZGJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuIEl0J3MgdHJpZ2dlcmVkIGJ5IHRoZSBgbmw4MDIxMV9yZWxvYWRfcmVnZGJgIG5ldGxpbmsgY29tbWFuZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgZHluYW1pY2FsbHkgdXBkYXRpbmcgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UsIHNvIGEgbmV0bGluayBpbnRlcmZhY2UgaXMgcHJldHR5IHN0YW5kYXJkLlxuXG5Ob3csIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYCBpcyBhbm90aGVyIGtleSBwb2ludC4gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uJ3MgY2FsbGVkIHdoZW5ldmVyIGEgd2lyZWxlc3MgUEhZIChgd2lwaHlgKSBpcyByZWdpc3RlcmVkLCB3aGljaCBhbHNvIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBUaGF0J3MgYSBsb2dpY2FsIHBvaW50IHRvIGtpY2sgb2ZmIHRoZSByZWd1bGF0b3J5IGluaXRpYWxpemF0aW9uIG9yIHVwZGF0ZSwgc2luY2UgdGhlIFBIWSdzIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uIHdvdWxkIGJlIHJlcXVpcmVkIGF0IHRoYXQgcG9pbnQuXG5cbkdpdmVuIHRob3NlIHR3byBwb2ludHMsIEknbSBnb2luZyB0byBjZW50ZXIgbXkgaW52ZXN0aWdhdGlvbiBhcm91bmQgdGhlIGZvbGxvd2luZyBzZXQgb2Ygc3ltYm9sczogYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBUaGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgb2YgdGhpcyBwdXp6bGUuIEknbSB3b25kZXJpbmcgaWYgSSdtIG1pc3NpbmcgYW55IGNydWNpYWwgZnVuY3Rpb24uIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGBxdWVyeV9yZWdkYl9maWxlYCBhbmQgdGhhdCBtYXkgaGlnaGxpZ2h0IGFueXRoaW5nIEkgaGF2ZW4ndCBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjQxLjkxNzEyODE5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxNzMxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVlcnlfcmVnZGJfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz0xMDEzPXN0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0xMDQ0LVxcbm5ldC93aXJlbGVzcy9yZWcuYzoxMDQ1OnN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNDYte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTExMjM9c3RhdGljIGJvb2wgcmVnX3F1ZXJ5X2RhdGFiYXNlKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTExMjQte1xcbm5ldC93aXJlbGVzcy9yZWcuYzoxMTI1OlxcdGlmIChxdWVyeV9yZWdkYl9maWxlKHJlcXVlc3QtXFx1MDAzZWFscGhhMikgPT0gMClcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMTEyNi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6NDIuMDA5MzA3ODNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1ODIzNzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmV0cmlldmFsKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgcXVlcnlfcmVnZGJfZmlsZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYHJlZ19xdWVyeV9kYXRhYmFzZWAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgY29tZXMgaW50byBwbGF5IGhlcmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBjcnVjaWFsIGZvciB0aGUgc2VjdXJpdHkgYW5kIGludGVncml0eSBvZiB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZS4gSWYgdGhhdCBtYWNybyBpcyBlbmFibGVkLCB0aGVuIEknZCBleHBlY3QgYHZhbGlkX3JlZ2RiYCB0byBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nIHRoZSBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZSwgcHJldmVudGluZyB0YW1wZXJpbmcuIElmIGl0IGlzbid0LCB0aGUgc2VjdXJpdHkgbW9kZWwgaXMgZHJhbWF0aWNhbGx5IGRpZmZlcmVudC4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZhbGlkX3JlZ2RiYCB0byBkZXRlcm1pbmUgaG93IHRoZSBkYXRhYmFzZSB2YWxpZGF0aW9uIHdvcmtzIGluIHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zLiBUaGUgZGV0YWlscyBpbiB0aGUgYHZhbGlkX3JlZ2RiYCBmdW5jdGlvbiBhcmUgd2hhdCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjQ1LjM2NzU0ODMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MzM0NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZhbGlkX3JlZ2RiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3JlZy5jPTc5OD1zdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy04MDItXFxubmV0L3dpcmVsZXNzL3JlZy5jOjgwMzpzdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwNC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9OTk0PXN0YXRpYyBpbnQgcmVnZGJfbG9hZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTk5OS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MTAwMDpcXHRpZiAoIXZhbGlkX3JlZ2RiKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSkpIHtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMTAwMS1cXHRcXHRwcl9pbmZvKFxcXCJsb2FkZWQgcmVndWxhdG9yeS5kYiBpcyBtYWxmb3JtZWQgb3Igc2lnbmF0dXJlIGlzIG1pc3NpbmcvaW52YWxpZFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjQ1LjQ5NTg5MDgxNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDYyMjAxMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYHZhbGlkX3JlZ2RiYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB2YWxpZF9yZWdkYmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGlucHV0cywgd2hhdCBpdCBleHBlY3RzIHRoZSBkYXRhIGluIHRoZSByZWdpc3RlciBkYXRhYmFzZSAocmVnZGIpIHRvIGxvb2sgbGlrZS4gSXMgaXQgZXhwZWN0aW5nIGEgZmxhdCBzdHJ1Y3R1cmUsIHNvbWUgbmVzdGVkIGRpY3Rpb25hcnkgZm9ybWF0LCBvciBwZXJoYXBzIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG1ldGhvZHM/XG5cbk5leHQsIEknbGwgY29uc2lkZXIgdGhlIGRhdGEgdmFsaWRhdGlvbiBwZXJmb3JtZWQuIFdoYXQgY3JpdGVyaWEgYXJlIGJlaW5nIGNoZWNrZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGJhc2ljIHR5cGUgY2hlY2tzLCBtb3JlIGludHJpY2F0ZSBjb25zdHJhaW50cyBvbiByZWdpc3RlciBhZGRyZXNzIHJhbmdlcyBvciBiaXRmaWVsZCBkZWZpbml0aW9ucywgb3IgbWF5YmUgZXZlbiBjcm9zcy1yZWZlcmVuY2VzIHRvIG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbiBkYXRhPyBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgaXQgY291bGQgaW5jbHVkZSB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3Igb3ZlcmxhcHBpbmcgcmVnaXN0ZXJzLCB2ZXJpZnlpbmcgdGhhdCBiaXRmaWVsZHMgZG9u4oCZdCBleGNlZWQgcmVnaXN0ZXIgYm91bmRhcmllcywgb3IgZW5zdXJpbmcgdGhhdCBhZGRyZXNzZXMgYXJlIGFsaWduZWQgYXMgbmVjZXNzYXJ5IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gVGhlIG92ZXJhbGwgZ29hbCwgSSBwcmVzdW1lLCBpcyB0byBndWFyYW50ZWUgdGhlIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgb2YgdGhpcyByZWdpc3RlciBtYXAgYmVmb3JlIGl0J3MgdXNlZCBlbHNld2hlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB2YWxpZGF0aW9uIHN0cmF0ZWd5LiBJIGV4cGVjdCBpdCBpcyBhIHNlcmllcyBvZiBjaGVja3MuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZXhjZXB0aW9ucyBvciByZXR1cm4gdmFsdWVzIGl0IHVzZXMgdG8gc2lnbmFsIGZhaWx1cmUgb3Igc3VjY2Vzcy4gQXJlIHRoZXJlIHNwZWNpZmljIGVycm9yIGNvZGVzLCBvciBkb2VzIGl0IHRocm93IGV4Y2VwdGlvbnM/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBpbXBvcnRhbnQuIFVuZGVyc3RhbmRpbmcgaG93IGB2YWxpZF9yZWdkYmAgY29tbXVuaWNhdGVzIHByb2JsZW1zIGlzIGtleSB0byBpbnRlZ3JhdGluZyBpdCBjb3JyZWN0bHkgaW50byBhIGxhcmdlciBzeXN0ZW0gb3IgZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMuIEknbGwgZm9jdXMgb24gaG93IGl0IHJlcG9ydHMgcHJvYmxlbXMuIEkgYW50aWNpcGF0ZSBpdCBzaG91bGQgYmUgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4ODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODo1MC45NTgwOTUwNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDM6XFx0c3RhdGljIGJvb2wgdmFsaWRfcmVnZGIoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxcbiA4MDQ6XFx0e1xcbiA4MDU6XFx0XFx0Y29uc3Qgc3RydWN0IGZ3ZGJfaGVhZGVyICpoZHIgPSAodm9pZCAqKWRhdGE7XFxuIDgwNjpcXHRcXHRjb25zdCBzdHJ1Y3QgZndkYl9jb3VudHJ5ICpjb3VudHJ5O1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjIHNpemVvZigqaGRyKSlcXG4gODA5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0aWYgKGhkci1cXHUwMDNlbWFnaWMgIT0gY3B1X3RvX2JlMzIoRldEQl9NQUdJQykpXFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgxMzpcXHRcXG4gODE0OlxcdFxcdGlmIChoZHItXFx1MDAzZXZlcnNpb24gIT0gY3B1X3RvX2JlMzIoRldEQl9WRVJTSU9OKSlcXG4gODE1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODE2OlxcdFxcbiA4MTc6XFx0XFx0aWYgKCFyZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGRhdGEsIHNpemUpKVxcbiA4MTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRjb3VudHJ5ID0gXFx1MDAyNmhkci1cXHUwMDNlY291bnRyeVswXTtcXG4gODIxOlxcdFxcdHdoaWxlICgodTggKikoY291bnRyeSArIDEpIFxcdTAwM2M9IGRhdGEgKyBzaXplKSB7XFxuIDgyMjpcXHRcXHRcXHRpZiAoIWNvdW50cnktXFx1MDAzZWNvbGxfcHRyKVxcbiA4MjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgyNDpcXHRcXHRcXHRpZiAoIXZhbGlkX2NvdW50cnkoZGF0YSwgc2l6ZSwgY291bnRyeSkpXFxuIDgyNTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgyNjpcXHRcXHRcXHRjb3VudHJ5Kys7XFxuIDgyNzpcXHRcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdFxcdHJldHVybiB0cnVlO1xcbiA4MzA6XFx0fVxcbiA4MzE6XFx0XFxuIDgzMjpcXHRzdGF0aWMgdm9pZCBzZXRfd21tX3J1bGUoY29uc3Qgc3RydWN0IGZ3ZGJfaGVhZGVyICpkYixcXG4gODMzOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZndkYl9jb3VudHJ5ICpjb3VudHJ5LFxcbiA4MzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmd2RiX3J1bGUgKnJ1bGUsXFxuIDgzNTpcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcnJ1bGUpXFxuIDgzNjpcXHR7XFxuIDgzNzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3dtbV9ydWxlICp3bW1fcnVsZSA9IFxcdTAwMjZycnVsZS1cXHUwMDNld21tX3J1bGU7XFxuIDgzODpcXHRcXHRzdHJ1Y3QgZndkYl93bW1fcnVsZSAqd21tO1xcbiA4Mzk6XFx0XFx0dW5zaWduZWQgaW50IGksIHdtbV9wdHI7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdHdtbV9wdHIgPSBiZTE2X3RvX2NwdShydWxlLVxcdTAwM2V3bW1fcHRyKSBcXHUwMDNjXFx1MDAzYyAyO1xcbiA4NDI6XFx0XFx0d21tID0gKHZvaWQgKikoKHU4ICopZGIgKyB3bW1fcHRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6NTAuOTU4NTMwOTc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTE5ODM4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMgb3Iga2VybmVsLWxldmVsIHNlY3VyaXR5OlxuXG4qKlZhbGlkYXRpbmcgdGhlIFJlZ2lzdHJ5IERhdGFiYXNlIFNpZ25hdHVyZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBteSBtaW5kIGp1bXBzIHRvIHdoZW4gZGVhbGluZyB3aXRoIHRoZSByZWdpc3RyeSBkYXRhYmFzZSBpcyBzZWN1cml0eS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIk9rYXksIGJlZm9yZSB3ZSBldmVuICp0b3VjaCogdGhpcyB0aGluZywgbGV0J3MgbWFrZSBzdXJlIGl0J3MgbGVnaXRpbWF0ZS5cIiBJIHNlZSB0aGUgY29kZSBjaGVja2luZyBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAuIFRoYXQncyBjcml0aWNhbC4gQmVmb3JlIHdlIHRydXN0IGFueSBkYXRhIG9yIHByb2NlZWQgd2l0aCBhbnkgb3BlcmF0aW9ucyBvbiBpdCwgaXQncyBwYXJhbW91bnQgdGhhdCB3ZSBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgcmVnaXN0cnkgZGF0YWJhc2UuIFRoYXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlci4gSXQncyB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3QgdGFtcGVyaW5nLCBjb3JydXB0aW9uLCBvciBtYWxpY2lvdXMgbW9kaWZpY2F0aW9uLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGlzIGEgdHJ1c3RlZCwgdW5hbHRlcmVkIHZlcnNpb24gb2YgdGhlIHJlZ2lzdHJ5IGJlZm9yZSBtb3ZpbmcgZm9yd2FyZCwgb3RoZXJ3aXNlIGV2ZXJ5dGhpbmcgaXMgY29tcHJvbWlzZWQuIFRoZSBzaWduYXR1cmUgY2hlY2sgaXMgYSBtdXN0IGJlZm9yZSBhbnkgb3BlcmF0aW9uIG9uIHRoaXMgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjU0LjA1MDUxODcwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzNjc2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz03NjM9TU9EVUxFX0ZJUk1XQVJFKFxcXCJyZWd1bGF0b3J5LmRiLnA3c1xcXCIpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy03NjQtXFxubmV0L3dpcmVsZXNzL3JlZy5jOjc2NTpzdGF0aWMgYm9vbCByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzY2LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz03ODg9c3RhdGljIGludCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc5Mi1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzkzOnN0YXRpYyBib29sIHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxcbm5ldC93aXJlbGVzcy9yZWcuYy03OTQte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTgwMz1zdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtODE2LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo4MTc6XFx0aWYgKCFyZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGRhdGEsIHNpemUpKVxcbm5ldC93aXJlbGVzcy9yZWcuYy04MTgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODo1NC4xMzQ4OTQ3MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMjk4MDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBxdWVzdGlvbiBpcyBhYm91dCBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAuIEkgbmVlZCB0byBzdGFydCBieSBjbGVhcmx5IGRlZmluaW5nIHdoYXQgd2UgbWVhbiBieSBcInZhbGlkIHNpZ25hdHVyZVwiIGluIHRoZSBjb250ZXh0IG9mIHRoZSByZWdpc3RyeSBkYXRhYmFzZS4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBwb3RlbnRpYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgZGF0YSwgXCJ2YWxpZFwiIG5lZWRzIHRvIGJlIG1vcmUgdGhhbiBqdXN0IHN5bnRhY3RpY2FsbHkgY29ycmVjdDsgaXQgaGFzIHRvIGltcGx5IGNyeXB0b2dyYXBoaWMgaW50ZWdyaXR5IGFuZCB0cnVzdC5cblxuU28sIGZpcnN0IEkgbmVlZCB0byBsb29rIHVwIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIG9mIGByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlYCwgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBmb3IgdGhpcyBjaGVjayB0byByZXR1cm4gdHJ1ZS4gV2hlcmUgYXJlIHRoZSB0d28gZGVmaW5pdGlvbnM/IElzIHRoaXMgYSBtdWx0aS1mYWNldGVkIGZ1bmN0aW9uLCBwb3RlbnRpYWxseSBjaGVja2luZyB0aGUgZmlsZSdzIHNpZ25hdHVyZSwgY29tcGFyaW5nIGl0IHRvIGFuIGFsbG93ZWQgaXNzdWVyLCBhbmQgbWF5YmUgdmVyaWZ5aW5nIGEgcmV2b2NhdGlvbiBsaXN0PyBPciBpcyB0aGlzIGEgbXVjaCBzaW1wbGVyIGNoZWNrLCBvbmx5IHZlcmlmeWluZyBmb3JtYXQgdmFsaWRpdHk/XG5cbkkgbmVlZCB0byBxdWlja2x5IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2Ugc2NlbmFyaW9zLiBEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHksIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG90aGVyIHNlY3VyaXR5IHN5c3RlbXMgYXJlIGluIHBsYWNlLCBzbyBJIGNhbiBzZWUgd2hhdCBwcm90ZWN0aW9ucyBpdCBpcyBwcm92aWRpbmcuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvICpkbyosIHRvIGJlIGFibGUgdG8gYXNzZXNzIGl0cyBlZmZlY3RpdmVuZXNzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSByZWdpc3RyeSBhbmQgb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMuIEknbSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBcInZhbGlkXCIgKm1lYW5zKiwgYW5kIHdoYXQgYWN0aW9ucyBkZXBlbmQgb24gdGhhdCB2YWxpZGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODo1Ny44Njc4Nzg2NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjU6XFx0c3RhdGljIGJvb2wgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxuIDc2NjpcXHR7XFxuIDc2NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnNpZztcXG4gNzY4OlxcdFxcdGJvb2wgcmVzdWx0O1xcbiA3Njk6XFx0XFxuIDc3MDpcXHRcXHRpZiAocmVxdWVzdF9maXJtd2FyZShcXHUwMDI2c2lnLCBcXFwicmVndWxhdG9yeS5kYi5wN3NcXFwiLCBcXHUwMDI2cmVnX2ZkZXYtXFx1MDAzZWRldikpXFxuIDc3MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc3MjpcXHRcXG4gNzczOlxcdFxcdHJlc3VsdCA9IHZlcmlmeV9wa2NzN19zaWduYXR1cmUoZGF0YSwgc2l6ZSwgc2lnLVxcdTAwM2VkYXRhLCBzaWctXFx1MDAzZXNpemUsXFxuIDc3NDpcXHRcXHRcXHRcXHRcXHRcXHRidWlsdGluX3JlZ2RiX2tleXMsXFxuIDc3NTpcXHRcXHRcXHRcXHRcXHRcXHRWRVJJRllJTkdfVU5TUEVDSUZJRURfU0lHTkFUVVJFLFxcbiA3NzY6XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCkgPT0gMDtcXG4gNzc3OlxcdFxcbiA3Nzg6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShzaWcpO1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiA3ODE6XFx0fVxcbiA3ODI6XFx0XFxuIDc4MzpcXHRzdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcXG4gNzg0OlxcdHtcXG4gNzg1OlxcdFxcdGtleV9wdXQoYnVpbHRpbl9yZWdkYl9rZXlzKTtcXG4gNzg2OlxcdH1cXG4gNzg3OlxcdCNlbHNlXFxuIDc4ODpcXHRzdGF0aWMgaW50IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXFxuIDc4OTpcXHR7XFxuIDc5MDpcXHRcXHRyZXR1cm4gMDtcXG4gNzkxOlxcdH1cXG4gNzkyOlxcdFxcbiA3OTM6XFx0c3RhdGljIGJvb2wgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxuIDc5NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjU3Ljg2ODExMjM0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQxMzQ3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IFRhcmdldGVkIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVGhlIHByZWNpc2UgaXNzdWUgaXNuJ3QgY2xlYXIgZnJvbSB0aGUgb3V0c2V0LCBidXQgSSBrbm93IHRoZSByZWxldmFudCBhcmVhIGlzIGxpa2VseSBuZWFyIGxpbmUgNzY1LiBNeSBtZW50YWwgbW9kZWwgc3VnZ2VzdHMgdGhhdCBhIGJ1ZyBvciBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IGlzIHNpdHVhdGVkIHNvbWV3aGVyZSBhcm91bmQgdGhhdCBsb2NhdGlvbi4gUmF0aGVyIHRoYW4gYSBicnV0ZS1mb3JjZSBhcHByb2FjaCwgdGhlIGZvY3VzIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHNlY3Rpb24gb2YgY29kZSBhZGphY2VudCB0byB0aGF0IGxpbmUuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGNvbnRleHTigJR0aGUgcHJlY2VkaW5nIGxpbmVzIGFyZSBqdXN0IGFzIGltcG9ydGFudCBhcyB0aGUgb25lIHVuZGVyIHNjcnV0aW55LiBJcyB0aGVyZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24/IEEgY29uZGl0aW9uYWwgYmxvY2s/IERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uPyBUaGUgbGluZXMgYWJvdmUgd2lsbCBvZmZlciB0aG9zZSBjbHVlcy4gVGhhdCBpcyB0aGUgZmlyc3Qgc3RlcCwgdW5kZXJzdGFuZGluZyB0aGUgbmVhcmJ5IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTk6MDIuNDA5NDYyNzY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvcmVnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzM1OlxcdHN0YXRpYyBpbnQgX19pbml0IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXFxuIDczNjpcXHR7XFxuIDczNzpcXHRcXHRidWlsdGluX3JlZ2RiX2tleXMgPVxcbiA3Mzg6XFx0XFx0XFx0a2V5cmluZ19hbGxvYyhcXFwiLmJ1aWx0aW5fcmVnZGJfa2V5c1xcXCIsXFxuIDczOTpcXHRcXHRcXHRcXHQgICAgICBLVUlEVF9JTklUKDApLCBLR0lEVF9JTklUKDApLCBjdXJyZW50X2NyZWQoKSxcXG4gNzQwOlxcdFxcdFxcdFxcdCAgICAgICgoS0VZX1BPU19BTEwgXFx1MDAyNiB+S0VZX1BPU19TRVRBVFRSKSB8XFxuIDc0MTpcXHRcXHRcXHRcXHQgICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCksXFxuIDc0MjpcXHRcXHRcXHRcXHQgICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMLCBOVUxMKTtcXG4gNzQzOlxcdFxcdGlmIChJU19FUlIoYnVpbHRpbl9yZWdkYl9rZXlzKSlcXG4gNzQ0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1aWx0aW5fcmVnZGJfa2V5cyk7XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHByX25vdGljZShcXFwiTG9hZGluZyBjb21waWxlZC1pbiBYLjUwOSBjZXJ0aWZpY2F0ZXMgZm9yIHJlZ3VsYXRvcnkgZGF0YWJhc2VcXFxcblxcXCIpO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiA3NDk6XFx0XFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3Qoc2hpcHBlZF9yZWdkYl9jZXJ0cyxcXG4gNzUwOlxcdFxcdFxcdFxcdFxcdCAgIHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuLFxcbiA3NTE6XFx0XFx0XFx0XFx0XFx0ICAgYnVpbHRpbl9yZWdkYl9rZXlzKTtcXG4gNzUyOlxcdCNlbmRpZlxcbiA3NTM6XFx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG4gNzU0OlxcdFxcdGlmIChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSWzBdICE9ICdcXFxcMCcpXFxuIDc1NTpcXHRcXHRcXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChleHRyYV9yZWdkYl9jZXJ0cyxcXG4gNzU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dHJhX3JlZ2RiX2NlcnRzX2xlbixcXG4gNzU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGJ1aWx0aW5fcmVnZGJfa2V5cyk7XFxuIDc1ODpcXHQjZW5kaWZcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdE1PRFVMRV9GSVJNV0FSRShcXFwicmVndWxhdG9yeS5kYi5wN3NcXFwiKTtcXG4gNzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OTowMi40MDk2MjAwMzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MDk0MDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWlzc2luZyBQcmVwcm9jZXNzb3IgRGlyZWN0aXZlOiBBIFF1aWNrIENvbmNlcm4qKlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJ20gc2Nhbm5pbmcgdGhyb3VnaCB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGUgYHJlZ2RiYCBhbmQgSSBjYW4ndCBpbW1lZGlhdGVseSBzZWUgdGhlIGAjaWZkZWZgIGJsb2NrIGd1YXJkaW5nIHRoZSB1c2Ugb2YgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgLiBUaGF0J3MgYSBiaXQgb2YgYSByZWQgZmxhZy4gSSBhc3N1bWVkIGl0IHdvdWxkIGJlIHRoZXJlIGdpdmVuIGl0cyBjb25kaXRpb25hbCBuYXR1cmUsIGFuZCB0aGUgY29tcGxleGl0eSBvZiBpdHMgdW5kZXJseWluZyBsb2dpYy4gSXMgaXQgbWlzc2luZywgb3IgYW0gSSBqdXN0IG1pc3NpbmcgaXQ/XG5cbklzIHRoZSBzeW1ib2wgZGVmaW5lZCBlbHNld2hlcmUsIGluIGEgaGVhZGVyIEkgaGF2ZW4ndCBpbmNsdWRlZCB5ZXQ/IE9yLCBtb3JlIGNvbmNlcm5pbmdseSwgaXMgaXQgYmVpbmcgY29tcGlsZWQgaW4gdW5jb25kaXRpb25hbGx5LCB3aGVuIHBlcmhhcHMgaXQgKnNob3VsZG4ndCogYmU/IFRoYXQgY291bGQgaW50cm9kdWNlIHNvbWUgc3VidGxlIGJ1Z3MgaWYgdGhpcyBzaWduYXR1cmUgY2hlY2sgaXNuJ3QgY29uc2lzdGVudGx5IGVuYWJsZWQgYWNyb3NzIGFsbCBidWlsZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSBob3cgdGhpcyBzaWduYXR1cmUgdmFsaWRhdGlvbiBpcyBjb250cm9sbGVkLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBnZXQgdGhpcyBzb3J0ZWQgb3V0IGJlZm9yZSBpdCBjb21lcyBiYWNrIHRvIGJpdGUgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OTowNi4wMDA1NjM2MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDU6XFx0XFx0LyogbWFrZSBzdXJlIHdlIGNhbiByZWFkIGxlbi9uX3J1bGVzICovXFxuIDcwNjpcXHRcXHRpZiAoKHU4ICopY29sbCArIG9mZnNldG9mZW5kKHR5cGVvZigqY29sbCksIG5fcnVsZXMpIFxcdTAwM2UgZGF0YSArIHNpemUpXFxuIDcwNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdC8qIG1ha2Ugc3VyZSBiYXNlIHN0cnVjdCBhbmQgYWxsIHJ1bGVzIGZpdCAqL1xcbiA3MTA6XFx0XFx0aWYgKCh1OCAqKWNvbGwgKyBBTElHTihjb2xsLVxcdTAwM2VsZW4sIDIpICtcXG4gNzExOlxcdFxcdCAgICAoY29sbC1cXHUwMDNlbl9ydWxlcyAqIDIpIFxcdTAwM2UgZGF0YSArIHNpemUpXFxuIDcxMjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcxMzpcXHRcXG4gNzE0OlxcdFxcdC8qIG1hbmRhdG9yeSBmaWVsZHMgbXVzdCBleGlzdCAqL1xcbiA3MTU6XFx0XFx0aWYgKGNvbGwtXFx1MDAzZWxlbiBcXHUwMDNjIG9mZnNldG9mZW5kKHN0cnVjdCBmd2RiX2NvbGxlY3Rpb24sIGRmc19yZWdpb24pKVxcbiA3MTY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRydWxlc19wdHIgPSAodm9pZCAqKSgodTggKiljb2xsICsgQUxJR04oY29sbC1cXHUwMDNlbGVuLCAyKSk7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb2xsLVxcdTAwM2VuX3J1bGVzOyBpKyspIHtcXG4gNzIxOlxcdFxcdFxcdHUxNiBydWxlX3B0ciA9IGJlMTZfdG9fY3B1KHJ1bGVzX3B0cltpXSk7XFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdFxcdGlmICghdmFsaWRfcnVsZShkYXRhLCBzaXplLCBydWxlX3B0cikpXFxuIDcyNDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcyNTpcXHRcXHR9XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdHJldHVybiB0cnVlO1xcbiA3Mjg6XFx0fVxcbiA3Mjk6XFx0XFxuIDczMDpcXHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxuIDczMTpcXHQjaW5jbHVkZSBcXHUwMDNja2V5cy9hc3ltbWV0cmljLXR5cGUuaFxcdTAwM2VcXG4gNzMyOlxcdFxcbiA3MzM6XFx0c3RhdGljIHN0cnVjdCBrZXkgKmJ1aWx0aW5fcmVnZGJfa2V5cztcXG4gNzM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OTowNi4wMDA4NjUxNDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NDMzMzg0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgY2ZnODAyMTEgUmVndWxhdG9yeSBEYXRhYmFzZSBMb2FkaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgdG8gdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGluZyBpbiBgY2ZnODAyMTFgIGFuZCBoYXZlIGEgY2xlYXIgc3RyYXRlZ3kuICBUaGUga2V5IGlzIHRvIHRhcmdldCBgcmVnZGJfbG9hZGAgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgc2luY2UgdGhlIGZpcm13YXJlIGxvYWRpbmcgbG9naWMgaGFzIGJlZW4gdXBkYXRlZCBhbmQgdGhlcmUncyBhIG5ldyBgcmVnZGJfbG9hZGAgZnVuY3Rpb24uICBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgY2FuIGhpdCBhbGwgdGhlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC5cblxuVGhlIGNvcmUgb2YgbXkgY29uY2VybiByZXZvbHZlcyBhcm91bmQgYENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAuIElmIHRoYXQncyBlbmFibGVkLCB0aGVuIGEgc2lnbmF0dXJlIGNoZWNrIGhhcHBlbnMuIElmIGl0J3MgKm5vdCogZW5hYmxlZCwgb3IgdGhlIHNpZ25hdHVyZSdzIHZhbGlkLCB0aGVuIGl0IHNraXBzIHRoZSBzaWduYXR1cmUgY2hlY2sgZW50aXJlbHkuIEJlY2F1c2Ugc3l6a2FsbGVyIGNhbiBmZWVkIGluIGFyYml0cmFyeSBmaXJtd2FyZSwgYSBmYWlsZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiB3aWxsIGJhaWwgb3V0IG9mIHRoZSBsb2FkaW5nIHByb2Nlc3MgcHJlbWF0dXJlbHkuICBUaGVyZWZvcmUsIEkgd2FudCB0byBhdm9pZCBkZWFsaW5nIHdpdGggc2lnbmVkIGRhdGFiYXNlcyBmb3IgZnV6emluZy5cblxuR29vZCBuZXdzOiB0aGUgZGVmYXVsdCBmb3IgYENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgaW4gYG5ldC93aXJlbGVzcy9LY29uZmlnYCBpcyBgZmFsc2VgLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiAgSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHByb3ZpZGluZyBhIHZhbGlkIHNpZ25hdHVyZSBvciBkaXNhYmxpbmcgaXQuXG5cbk15IHN0cmF0ZWd5IGlzIHRvIGVuYWJsZSBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBUaGUgYG1hYzgwMjExX2h3c2ltYCB3aWxsIGdpdmUgbWUgYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2UgdG8gaW50ZXJhY3Qgd2l0aC5cblxuSSd2ZSB2ZXJpZmllZCB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYCBpcyByZWFjaGFibGUgdGhyb3VnaCBgd2lwaHlfcmVnaXN0ZXJgLCBgcmVnX3JlbG9hZF9yZWdkYmAgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rLCBgcXVlcnlfcmVnZGJfZmlsZWAgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYHJlZ19xdWVyeV9kYXRhYmFzZWAsIGFuZCBgcmVnZGJfZndfY2JfcmVzdG9yZWAgaXMgYSBmaXJtd2FyZSBjYWxsYmFjay4gYHJlZ2RiX2xvYWRgIGl0c2VsZiB0aWVzIHRoZW0gYWxsIHRvZ2V0aGVyLlxuXG5JJ3ZlIG1hZGUgc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGNhbiBoaXQgYWxsIG9mIHRoZSBpbXBvcnRhbnQgYXJlYXMgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBvdGhlciBmdW5jdGlvbiBjYWxscyB3aWxsIGJlIG1vZGlmaWVkLCBzbyB0aGVzZSB3aWxsIGJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uXG5cblNvLCBoZXJlJ3MgdGhlIGZpbmFsIHBsYW4uICBXZSBzaG91bGQgZnV6eiB0aGUgZm9sbG93aW5nOlxuXG4qKldvcnRoRnV6emluZzogdHJ1ZSoqXG5cbioqRm9jdXNTeW1ib2xzOioqXG5cbiogICBgcmVnZGJfbG9hZGBcbiogICBgcmVnZGJfZndfY2JfcmVzdG9yZWBcbiogICBgcXVlcnlfcmVnZGJfZmlsZWBcbiogICBgcmVnX3JlbG9hZF9yZWdkYmBcbiogICBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmBcblxuKipFbmFibGVDb25maWdzOioqXG5cbiogICBgQ0ZHODAyMTFgXG4qICAgYE1BQzgwMjExX0hXU0lNYFxuXG5UaGUgcmF0aW9uYWxlIGlzIGNsZWFyLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGZvciB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZS4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBwYXRocyB2aWEgc29mdHdhcmUgZW11bGF0ZWQgZGV2aWNlcyBhbmQgbmV0bGluay4gVGhlIGZ1enppbmcgZWZmb3J0cyBuZWVkIHRvIGJlIGNlbnRlcmVkIG9uIHRoZXNlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1NSwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OToxNi41NDQyMDcyNzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc0NDE2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2RiX2xvYWRcIixcbiAgICBcInJlZ2RiX2Z3X2NiX3Jlc3RvcmVcIixcbiAgICBcInF1ZXJ5X3JlZ2RiX2ZpbGVcIixcbiAgICBcInJlZ19yZWxvYWRfcmVnZGJcIixcbiAgICBcIndpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2RiX2xvYWRcIixcbiAgICBcInJlZ2RiX2Z3X2NiX3Jlc3RvcmVcIixcbiAgICBcInF1ZXJ5X3JlZ2RiX2ZpbGVcIixcbiAgICBcInJlZ19yZWxvYWRfcmVnZGJcIixcbiAgICBcIndpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowncqhm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 16:50:58 +0000 UTC FinishedAt: 2026-06-26 16:59:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "972c4dd19cb92e03d75b66c426cfade07582a1ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "972c4dd19cb92e03d75b66c426cfade07582a1ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211_HWSIM" ], "series_id": "34579119-2aa2-4230-8c8a-d63da7df7146" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "regdb_load", "regdb_fw_cb_restore", "query_regdb_file", "reg_reload_regdb", "wiphy_regulatory_register" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnZGJfbG9hZCYjMzQ7LAogICAgJiMzNDtyZWdkYl9md19jYl9yZXN0b3JlJiMzNDssCiAgICAmIzM0O3F1ZXJ5X3JlZ2RiX2ZpbGUmIzM0OywKICAgICYjMzQ7cmVnX3JlbG9hZF9yZWdkYiYjMzQ7LAogICAgJiMzNDt3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgbG9hZGluZyB0aGUgYHJlZ3VsYXRvcnkuZGJgIGZpcm13YXJlIGluIHRoZSBjZmc4MDIxMSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgYHJlZ2RiX2xvYWRgIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGhvdyBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aHMgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSBkdXJpbmcgd2lwaHkgcmVnaXN0cmF0aW9uIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZmlybXdhcmUgbG9hZGluZyBhbmQgcmVndWxhdG9yeSByZWdpc3RyYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTY6NTg6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jXG5pbmRleCAxZTgyMTRkNmI2ZDg4MS4uZDdiODY0ZDMyYmExZWEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTk4OCw3OCAmIzQzOzk4OCw5OCBAQCBzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiKGNvbnN0IGNoYXIgKmFscGhhMilcbiBcdHJldHVybiAtRU5PREFUQTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVnZGJfZndfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFwmIzM0O3JlZ3VsYXRvcnkuZGJcJiMzNDspO1xuJiM0MztcbiYjNDM7LyogVmFsaWRhdGUgYW5kIHN0b3JlIGZpcm13YXJlIGltYWdlIGFzIHJlZ2RiLiBVc2VkIGJ5IGFsbCBsb2FkIHBhdGhzLiAqL1xuJiM0MztzdGF0aWMgaW50IHJlZ2RiX2xvYWQoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiB7XG4tXHRpbnQgc2V0X2Vycm9yID0gMDtcbi1cdGJvb2wgcmVzdG9yZSA9IHRydWU7XG4gXHR2b2lkICpkYjtcbiBcbi1cdGlmICghZncpIHtcbi1cdFx0cHJfaW5mbyhcJiMzNDtmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxuXCYjMzQ7KTtcbi1cdFx0c2V0X2Vycm9yID0gLUVOT0RBVEE7XG4tXHR9IGVsc2UgaWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmICghdmFsaWRfcmVnZGIoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSkpIHtcbiBcdFx0cHJfaW5mbyhcJiMzNDtsb2FkZWQgcmVndWxhdG9yeS5kYiBpcyBtYWxmb3JtZWQgb3Igc2lnbmF0dXJlIGlzIG1pc3NpbmcvaW52YWxpZFxcblwmIzM0Oyk7XG4tXHRcdHNldF9lcnJvciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRkYiA9IGttZW1kdXAoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkYilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZWdkYiA9IGRiO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWdkYl9md19jYl9yZXN0b3JlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHJ0bmxfbG9jaygpO1xuLVx0aWYgKHJlZ2RiIFx1MDAyNlx1MDAyNiAhSVNfRVJSKHJlZ2RiKSkge1xuLVx0XHQvKiBuZWdhdGl2ZSBjYXNlIC0gYSBidWdcbi1cdFx0ICogcG9zaXRpdmUgY2FzZSAtIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2UgaW4gY2FzZSBvZiBtdWx0aXBsZSBjYiYjMzk7cyBpblxuLVx0XHQgKiBxdWV1ZSwgZHVlIHRvIHVzYWdlIG9mIGFzeW5jaHJvbm91cyBjYWxsYmFja1xuLVx0XHQgKlxuLVx0XHQgKiBFaXRoZXIgY2FzZSwganVzdCByZXN0b3JlIGFuZCBmcmVlIG5ldyBkYi5cbi1cdFx0ICovXG4tXHR9IGVsc2UgaWYgKHNldF9lcnJvcikge1xuLVx0XHRyZWdkYiA9IEVSUl9QVFIoc2V0X2Vycm9yKTtcbi1cdH0gZWxzZSBpZiAoZncpIHtcbi1cdFx0ZGIgPSBrbWVtZHVwKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuLVx0XHRpZiAoZGIpIHtcbi1cdFx0XHRyZWdkYiA9IGRiO1xuLVx0XHRcdHJlc3RvcmUgPSBjb250ZXh0IFx1MDAyNlx1MDAyNiBxdWVyeV9yZWdkYihjb250ZXh0KTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXN0b3JlID0gdHJ1ZTtcbi1cdFx0fVxuLVx0fVxuIFxuLVx0aWYgKHJlc3RvcmUpXG4mIzQzO1x0LyogU2tpcCBpZiBhIGNvbmN1cnJlbnQgd2lwaHkgcmVnaXN0cmF0aW9uIGFscmVhZHkgbG9hZGVkIHRoZSBkYi4gKi9cbiYjNDM7XHRpZiAocmVnZGIgXHUwMDI2XHUwMDI2ICFJU19FUlIocmVnZGIpKVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlcGxheSBhbGwgcGVuZGluZyByZWd1bGF0b3J5IGhpbnRzIHRoYXQgYXJyaXZlZCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBkYXRhYmFzZSB3YXMgbm90IHlldCBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgbG9hZCBvdXRjb21lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZncpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7ZmFpbGVkIHRvIGxvYWQgcmVndWxhdG9yeS5kYlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZWdkYiA9IEVSUl9QVFIoLUVOT0RBVEEpO1xuIFx0XHRyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSwgZmFsc2UpO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiBcbi1cdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0ZXJyID0gcmVnZGJfbG9hZChmdyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJlZ2RiID0gRVJSX1BUUihlcnIpO1xuIFxuLVx0a2ZyZWUoY29udGV4dCk7XG4mIzQzO1x0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcbiBcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gfVxuIFxuLU1PRFVMRV9GSVJNV0FSRShcJiMzNDtyZWd1bGF0b3J5LmRiXCYjMzQ7KTtcbi1cbiBzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuIFx0aW50IGVycjtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4tXHRpZiAocmVnZGIpXG4mIzQzO1x0aWYgKHJlZ2RiIFx1MDAyNlx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcbiBcdFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XG4gXG4tXHRhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWFscGhhMilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMb2FkIGZhaWxlZCBvciBhc3luYyB1ZGV2IGxvYWQgaW4gcHJvZ3Jlc3MuIElmIC1FSU5QUk9HUkVTUyxcbiYjNDM7XHQgKiBoaW50cyBhcmUgcHJlc2VydmVkIGFuZCByZXBsYXllZCBvbmNlIHRoZSB1ZGV2IGxvYWQgY29tcGxldGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19FUlIocmVnZGIpIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHJlZ2RiKSAhPSAtRUlOUFJPR1JFU1MpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyZWdkYik7XG4gXG4tXHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgXCYjMzQ7cmVndWxhdG9yeS5kYlwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNnJlZ19mZGV2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCxcbi1cdFx0XHRcdCAgICAgICh2b2lkICopYWxwaGEyLCByZWdkYl9md19jYik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVzZXJ2ZSB0aGUgaGludCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgb24gZGlyZWN0IHBhdGhzO1xuJiM0MztcdCAqIGFuIGFzeW5jIHVkZXYgbG9hZCB3aWxsIGJlIHRyaWdnZXJlZCBvbiB3aXBoeSByZWdpc3RyYXRpb25cbiYjNDM7XHQgKiBhbmQgd2lsbCByZXBsYXkgYWxsIHBlbmRpbmcgaGludHMgb24gY29tcGxldGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZmdywgXCYjMzQ7cmVndWxhdG9yeS5kYlwmIzM0OywgXHUwMDI2cmVnX2ZkZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChlcnIpXG4tXHRcdGtmcmVlKGFscGhhMik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcbiYjNDM7XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gcXVlcnlfcmVnZGIoYWxwaGEyKTtcbiB9XG4gXG4gaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLVx0dm9pZCAqZGI7XG4gXHRpbnQgZXJyO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1cnJlbnRfcmVnZG9tYWluO1xuIFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDtcbkBAIC0xMDY4LDIxICYjNDM7MTA4OCwxNCBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghdmFsaWRfcmVnZGIoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSkpIHtcbi1cdFx0ZXJyID0gLUVOT0RBVEE7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0ZGIgPSBrbWVtZHVwKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFkYikge1xuLVx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHJ0bmxfbG9jaygpO1xuIFx0aWYgKCFJU19FUlJfT1JfTlVMTChyZWdkYikpXG4gXHRcdGtmcmVlKHJlZ2RiKTtcbi1cdHJlZ2RiID0gZGI7XG4mIzQzO1x0ZXJyID0gcmVnZGJfbG9hZChmdyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cmVnZGIgPSBFUlJfUFRSKGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0LyogcmVzZXQgcmVndWxhdG9yeSBkb21haW4gKi9cbiBcdGN1cnJlbnRfcmVnZG9tYWluID0gZ2V0X2NmZzgwMjExX3JlZ2RvbSgpO1xuQEAgLTExMDMsNyAmIzQzOzExMTYsNiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxuIFxuIG91dF91bmxvY2s6XG4gXHRydG5sX3VubG9jaygpO1xuLSBvdXQ6XG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTQwODUsNiAmIzQzOzQwOTcsOCBAQCB2b2lkIHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiB7XG4gXHRzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsciA9IGdldF9sYXN0X3JlcXVlc3QoKTtcbiBcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiBcdC8qIHNlbGYtbWFuYWdlZCBkZXZpY2VzIGlnbm9yZSBiZWFjb24gaGludHMgYW5kIGNvdW50cnkgSUUgKi9cbiBcdGlmICh3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFx1MDAyNiBSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRCkge1xuIFx0XHR3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIHw9IFJFR1VMQVRPUllfRElTQUJMRV9CRUFDT05fSElOVFMgfFxuQEAgLTQwOTcsNiAmIzQzOzQxMTEsMTYgQEAgdm9pZCB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4gXHRcdCAqL1xuIFx0XHRpZiAobHItXHUwMDNlaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKVxuIFx0XHRcdHJlZ19jYWxsX25vdGlmaWVyKHdpcGh5LCBscik7XG4mIzQzO1x0fSBlbHNlIGlmICghcmVnZGIpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiByZWd1bGF0b3J5LmRiIG5vdCB5ZXQgbG9hZGVkOyB0cmlnZ2VyIGFuIGFzeW5jIHVkZXZcbiYjNDM7XHRcdCAqIHJlcXVlc3QgdG8gbG9hZCBpdCB3aGVuIHRoZSBmaXJzdCB3aXBoeSByZWdpc3RlcnMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghZmlybXdhcmVfcmVxdWVzdF9ub3dhaXRfbm93YXJuKFRISVNfTU9EVUxFLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXCYjMzQ7cmVndWxhdG9yeS5kYlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnJlZ19mZGV2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIE5VTEwsIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUpKVxuJiM0MztcdFx0XHRyZWdkYiA9IEVSUl9QVFIoLUVJTlBST0dSRVNTKTtcbiBcdH1cbiBcbiBcdGlmICghcmVnX2Rldl9pZ25vcmVfY2VsbF9oaW50KHdpcGh5KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2RiX2xvYWQmIzM0OywKICAgICYjMzQ7cmVnZGJfZndfY2JfcmVzdG9yZSYjMzQ7LAogICAgJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgICAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAgICYjMzQ7d2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTY6NTg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggMWU4MjE0ZDZiNmQ4ODEuLmQ3Yjg2NGQzMmJhMWVhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC05ODgsNzggJiM0Mzs5ODgsOTggQEAgc3RhdGljIGludCBxdWVyeV9yZWdkYihjb25zdCBjaGFyICphbHBoYTIpCiAJcmV0dXJuIC1FTk9EQVRBOwogfQogCi1zdGF0aWMgdm9pZCByZWdkYl9md19jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KQomIzQzO01PRFVMRV9GSVJNV0FSRSgmIzM0O3JlZ3VsYXRvcnkuZGImIzM0Oyk7CiYjNDM7CiYjNDM7LyogVmFsaWRhdGUgYW5kIHN0b3JlIGZpcm13YXJlIGltYWdlIGFzIHJlZ2RiLiBVc2VkIGJ5IGFsbCBsb2FkIHBhdGhzLiAqLwomIzQzO3N0YXRpYyBpbnQgcmVnZGJfbG9hZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogewotCWludCBzZXRfZXJyb3IgPSAwOwotCWJvb2wgcmVzdG9yZSA9IHRydWU7CiAJdm9pZCAqZGI7CiAKLQlpZiAoIWZ3KSB7Ci0JCXByX2luZm8oJiMzNDtmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXG4mIzM0Oyk7Ci0JCXNldF9lcnJvciA9IC1FTk9EQVRBOwotCX0gZWxzZSBpZiAoIXZhbGlkX3JlZ2RiKGZ3LSZndDtkYXRhLCBmdy0mZ3Q7c2l6ZSkpIHsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKCF2YWxpZF9yZWdkYihmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUpKSB7CiAJCXByX2luZm8oJiMzNDtsb2FkZWQgcmVndWxhdG9yeS5kYiBpcyBtYWxmb3JtZWQgb3Igc2lnbmF0dXJlIGlzIG1pc3NpbmcvaW52YWxpZFxuJiMzNDspOwotCQlzZXRfZXJyb3IgPSAtRUlOVkFMOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWRiID0ga21lbWR1cChmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRiKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlZ2RiID0gZGI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWdkYl9md19jYl9yZXN0b3JlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwogCXJ0bmxfbG9jaygpOwotCWlmIChyZWdkYiAmYW1wOyZhbXA7ICFJU19FUlIocmVnZGIpKSB7Ci0JCS8qIG5lZ2F0aXZlIGNhc2UgLSBhIGJ1ZwotCQkgKiBwb3NpdGl2ZSBjYXNlIC0gY2FuIGhhcHBlbiBkdWUgdG8gcmFjZSBpbiBjYXNlIG9mIG11bHRpcGxlIGNiJiMzOTtzIGluCi0JCSAqIHF1ZXVlLCBkdWUgdG8gdXNhZ2Ugb2YgYXN5bmNocm9ub3VzIGNhbGxiYWNrCi0JCSAqCi0JCSAqIEVpdGhlciBjYXNlLCBqdXN0IHJlc3RvcmUgYW5kIGZyZWUgbmV3IGRiLgotCQkgKi8KLQl9IGVsc2UgaWYgKHNldF9lcnJvcikgewotCQlyZWdkYiA9IEVSUl9QVFIoc2V0X2Vycm9yKTsKLQl9IGVsc2UgaWYgKGZ3KSB7Ci0JCWRiID0ga21lbWR1cChmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoZGIpIHsKLQkJCXJlZ2RiID0gZGI7Ci0JCQlyZXN0b3JlID0gY29udGV4dCAmYW1wOyZhbXA7IHF1ZXJ5X3JlZ2RiKGNvbnRleHQpOwotCQl9IGVsc2UgewotCQkJcmVzdG9yZSA9IHRydWU7Ci0JCX0KLQl9CiAKLQlpZiAocmVzdG9yZSkKJiM0MzsJLyogU2tpcCBpZiBhIGNvbmN1cnJlbnQgd2lwaHkgcmVnaXN0cmF0aW9uIGFscmVhZHkgbG9hZGVkIHRoZSBkYi4gKi8KJiM0MzsJaWYgKHJlZ2RiICZhbXA7JmFtcDsgIUlTX0VSUihyZWdkYikpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlcGxheSBhbGwgcGVuZGluZyByZWd1bGF0b3J5IGhpbnRzIHRoYXQgYXJyaXZlZCB3aGlsZSB0aGUKJiM0MzsJICogZGF0YWJhc2Ugd2FzIG5vdCB5ZXQgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIGxvYWQgb3V0Y29tZS4KJiM0MzsJICovCiYjNDM7CWlmICghZncpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXG4mIzM0Oyk7CiYjNDM7CQlyZWdkYiA9IEVSUl9QVFIoLUVOT0RBVEEpOwogCQlyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSwgZmFsc2UpOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiAKLQlydG5sX3VubG9jaygpOwomIzQzOwllcnIgPSByZWdkYl9sb2FkKGZ3KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJlZ2RiID0gRVJSX1BUUihlcnIpOwogCi0Ja2ZyZWUoY29udGV4dCk7CiYjNDM7CXJlc3RvcmVfcmVndWxhdG9yeV9zZXR0aW5ncyh0cnVlLCBmYWxzZSk7CiAKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlydG5sX3VubG9jaygpOwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogfQogCi1NT0RVTEVfRklSTVdBUkUoJiMzNDtyZWd1bGF0b3J5LmRiJiMzNDspOwotCiBzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKQogewomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCBlcnI7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKHJlZ2RiKQomIzQzOwlpZiAocmVnZGIgJmFtcDsmYW1wOyAhSVNfRVJSKHJlZ2RiKSkKIAkJcmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7CiAKLQlhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhbHBoYTIpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkvKgomIzQzOwkgKiBMb2FkIGZhaWxlZCBvciBhc3luYyB1ZGV2IGxvYWQgaW4gcHJvZ3Jlc3MuIElmIC1FSU5QUk9HUkVTUywKJiM0MzsJICogaGludHMgYXJlIHByZXNlcnZlZCBhbmQgcmVwbGF5ZWQgb25jZSB0aGUgdWRldiBsb2FkIGNvbXBsZXRlcy4KJiM0MzsJICovCiYjNDM7CWlmIChJU19FUlIocmVnZGIpICZhbXA7JmFtcDsgUFRSX0VSUihyZWdkYikgIT0gLUVJTlBST0dSRVNTKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmVnZGIpOwogCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIHRydWUsICYjMzQ7cmVndWxhdG9yeS5kYiYjMzQ7LAotCQkJCSAgICAgICZhbXA7cmVnX2ZkZXYtJmd0O2RldiwgR0ZQX0tFUk5FTCwKLQkJCQkgICAgICAodm9pZCAqKWFscGhhMiwgcmVnZGJfZndfY2IpOwomIzQzOwkvKgomIzQzOwkgKiBQcmVzZXJ2ZSB0aGUgaGludCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgb24gZGlyZWN0IHBhdGhzOwomIzQzOwkgKiBhbiBhc3luYyB1ZGV2IGxvYWQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gd2lwaHkgcmVnaXN0cmF0aW9uCiYjNDM7CSAqIGFuZCB3aWxsIHJlcGxheSBhbGwgcGVuZGluZyBoaW50cyBvbiBjb21wbGV0aW9uLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdywgJiMzNDtyZWd1bGF0b3J5LmRiJiMzNDssICZhbXA7cmVnX2ZkZXYtJmd0O2Rldik7CiAJaWYgKGVycikKLQkJa2ZyZWUoYWxwaGEyKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwllcnIgPSByZWdkYl9sb2FkKGZ3KTsKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXJlZ2RiID0gRVJSX1BUUihlcnIpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQogCi0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7CiB9CiAKIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpCiB7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQl2b2lkICpkYjsKIAlpbnQgZXJyOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjdXJyZW50X3JlZ2RvbWFpbjsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwpAQCAtMTA2OCwyMSAmIzQzOzEwODgsMTQgQEAgaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZCkKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCF2YWxpZF9yZWdkYihmdy0mZ3Q7ZGF0YSwgZnctJmd0O3NpemUpKSB7Ci0JCWVyciA9IC1FTk9EQVRBOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkYiA9IGttZW1kdXAoZnctJmd0O2RhdGEsIGZ3LSZndDtzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRiKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJ0bmxfbG9jaygpOwogCWlmICghSVNfRVJSX09SX05VTEwocmVnZGIpKQogCQlrZnJlZShyZWdkYik7Ci0JcmVnZGIgPSBkYjsKJiM0MzsJZXJyID0gcmVnZGJfbG9hZChmdyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXJlZ2RiID0gRVJSX1BUUihlcnIpOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiAKIAkvKiByZXNldCByZWd1bGF0b3J5IGRvbWFpbiAqLwogCWN1cnJlbnRfcmVnZG9tYWluID0gZ2V0X2NmZzgwMjExX3JlZ2RvbSgpOwpAQCAtMTEwMyw3ICYjNDM7MTExNiw2IEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpCiAKIG91dF91bmxvY2s6CiAJcnRubF91bmxvY2soKTsKLSBvdXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQwODUsNiAmIzQzOzQwOTcsOCBAQCB2b2lkIHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpsciA9IGdldF9sYXN0X3JlcXVlc3QoKTsKIAomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwogCS8qIHNlbGYtbWFuYWdlZCBkZXZpY2VzIGlnbm9yZSBiZWFjb24gaGludHMgYW5kIGNvdW50cnkgSUUgKi8KIAlpZiAod2lwaHktJmd0O3JlZ3VsYXRvcnlfZmxhZ3MgJmFtcDsgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpIHsKIAkJd2lwaHktJmd0O3JlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyB8CkBAIC00MDk3LDYgJiM0Mzs0MTExLDE2IEBAIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogCQkgKi8KIAkJaWYgKGxyLSZndDtpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIpCiAJCQlyZWdfY2FsbF9ub3RpZmllcih3aXBoeSwgbHIpOwomIzQzOwl9IGVsc2UgaWYgKCFyZWdkYikgewomIzQzOwkJLyoKJiM0MzsJCSAqIHJlZ3VsYXRvcnkuZGIgbm90IHlldCBsb2FkZWQ7IHRyaWdnZXIgYW4gYXN5bmMgdWRldgomIzQzOwkJICogcmVxdWVzdCB0byBsb2FkIGl0IHdoZW4gdGhlIGZpcnN0IHdpcGh5IHJlZ2lzdGVycy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFmaXJtd2FyZV9yZXF1ZXN0X25vd2FpdF9ub3dhcm4oVEhJU19NT0RVTEUsCiYjNDM7CQkJCQkJICAgICYjMzQ7cmVndWxhdG9yeS5kYiYjMzQ7LAomIzQzOwkJCQkJCSAgICAmYW1wO3JlZ19mZGV2LSZndDtkZXYsIEdGUF9LRVJORUwsCiYjNDM7CQkJCQkJICAgIE5VTEwsIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUpKQomIzQzOwkJCXJlZ2RiID0gRVJSX1BUUigtRUlOUFJPR1JFU1MpOwogCX0KIAogCWlmICghcmVnX2Rldl9pZ25vcmVfY2VsbF9oaW50KHdpcGh5KSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSZWd1bGF0b3J5IERhdGFiYXNlIExvYWRpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSByZWZhY3RvciBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaW52b2x2ZXMgaG93IHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIChgcmVndWxhdG9yeS5kYmApIGlzIGxvYWRlZC4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBgcmVnZGJfbG9hZCgpYCwgcmVuYW1lZCBgcmVnZGJfZndfY2JgIHRvIGByZWdkYl9md19jYl9yZXN0b3JlYCwgYW5kIHR3ZWFrZWQgYSBmZXcgb3RoZXIgZnVuY3Rpb25zOiBgcXVlcnlfcmVnZGJfZmlsZWAsIGByZWdfcmVsb2FkX3JlZ2RiYCwgYW5kIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYC4gVGhpcyBpcyBhbGwgY3JpdGljYWwgc3R1ZmYsIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiB0aGUgY2ZnODAyMTEgYW5kIG1hYzgwMjExIHN1YnN5c3RlbXMsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIHdpcmVsZXNzIHN0YWNrIGhhbmRsZXMgcmVndWxhdG9yeSBpbmZvcm1hdGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIGFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCB0ZXN0aW5nIGVudmlyb25tZW50LiBGb3J0dW5hdGVseSwgd2l0aCB3aXJlbGVzcyBjb2RlLCBgbWFjODAyMTFfaHdzaW1gIGlzIHVzdWFsbHkgbXkgZ28tdG8uIFNpbmNlIGBtYWM4MDIxMV9od3NpbWAgaXMgYSBzb2Z0d2FyZSBzaW11bGF0b3IsIGl0IHNob3VsZCBiZSBmaW5lIGluIGEgVk0uIFRoYXQmIzM5O3MgZ29vZDsgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBCYXNlZCBvbiB0aGUgcGF0Y2gsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIGF0IGFyZToKCiogICBgcmVnZGJfbG9hZGAgKG5ldyBmdW5jdGlvbiwgb2J2aW91c2x5IGltcG9ydGFudCkKKiAgIGByZWdkYl9md19jYl9yZXN0b3JlYCAocmVuYW1lZCBmcm9tIGByZWdkYl9md19jYmAsIHNvIHdvcnRoIGEgbG9vayBhdCB0aGUgY2hhbmdlcykKKiAgIGBxdWVyeV9yZWdkYl9maWxlYAoqICAgYHJlZ19yZWxvYWRfcmVnZGJgCiogICBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmAKCkZpbmFsbHksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIOKAkyBgbmV0L3dpcmVsZXNzL3JlZy5jYCDigJMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYWZmZWN0IHRoaXMgY29kZS4gU3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfQ0ZHODAyMTFgIG9yIGBDT05GSUdfTUFDODAyMTFgIGFyZSByZXF1aXJlZC4gSSYjMzk7bGwgY2hlY2sgZWl0aGVyIHRoZSBgTWFrZWZpbGVgIG9yIHRoZSBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIGBuZXQvd2lyZWxlc3MvYC4gTmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBidWlsZGluZyB3aXRoIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBzbyBteSBmdXp6aW5nIGlzbiYjMzk7dCBhIHdhc3RlIG9mIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLS4qcmVnXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIE1ha2VmaWxlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHN0b3A6IGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGJlaW5nIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb21waWxhdGlvbiBwcm9jZXNzLiBUaGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgdGhhdCwgYW5kIGEgcXVpY2sgaW5zcGVjdGlvbiBzaG91bGQgY2xhcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IHZhcmlhYmxlcywgaW5jbHVkZSBkaXJlY3RpdmVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hpY2ggZHJpdmVycyBnZXQgYnVpbHQgYmFzZWQgb24gY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgY2hhbmdlcyBJIG5lZWQgdG8gbWFrZSB0byB0aGUgd2lyZWxlc3Mgc3RhY2suIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbiAgIDM6XHRvYmoteSAmIzQzOz0gdGVzdHMvXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgJiM0Mzs9IHdleHQtY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgJiM0Mzs9IHdleHQtcHJpdi5vXG4gICA4Olx0XG4gICA5Olx0Y2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xuICAxMDpcdGNmZzgwMjExLXkgJiM0Mzs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXG4gIDExOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWljaGFlbC1taWMubyBwbXNyLm9cbiAgMTI6XHRjZmc4MDIxMS0kKENPTkZJR19PRikgJiM0Mzs9IG9mLm9cbiAgMTM6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG4gIDE0Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xuICAxNTpcdFxuICAxNjpcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG4gIDE3Olx0XG4gIDE4Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5vXG4gIDE5Olx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxuICAyMDpcdGNmZzgwMjExLXkgJiM0Mzs9IGV4dHJhLWNlcnRzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVndWxhdG9yeSBEYXRhYmFzZSBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHJlZ3VsYXRvcnkgZGF0YWJhc2Ugc2l0dWF0aW9uLiBSaWdodCwgYHJlZy5vYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBjZmc4MDIxMS15YCBidWlsZCBjaGFpbiwgd2hpY2ggbWFrZXMgc2Vuc2UgLSBpdCYjMzk7cyBvbmx5IGJ1aWx0IGlmIGBDT05GSUdfQ0ZHODAyMTFgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBgcmVnLm9gIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHRyaWdnZXJlZC4gQWgsIHJpZ2h0LCB0byBnZXQgdGhlIHdpcGh5cyBpbnN0YW50aWF0ZWQgYW5kIGNhbGwgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLCBJIGFsc28gbmVlZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYC4gVGhhdCBwcm92aWRlcyB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTWFrZXMgc2Vuc2UuCgpOb3csIGlzIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIHRoYXQgY29udHJvbHMgKmhvdyogdGhpcyByZWd1bGF0b3J5IGRhdGFiYXNlIGlzIGhhbmRsZWQ/IEkgc2VlbSB0byByZWNhbGwgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nLCBsaWtlIGBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJgIG9yIGEgc2ltaWxhciBvcHRpb24uIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzZWUgaWYgdGhleSBpbXBhY3QgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGluZyBvciB2ZXJpZmljYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWd1bGF0b3J5IERhdGFiYXNlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvd2lyZWxlc3MvcmVnLmNgIGZpbGUuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgb3IgYENGRzgwMjExX0NSREFfU1VQUE9SVGAgaGF2ZSBhbnkgcmVsZXZhbmNlIGhlcmU7IHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSByZWd1bGF0b3J5IGNoYW5nZXMuIEkgbm90aWNlIGl0JiMzOTtzIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgYW5kIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAgdG8gaGFuZGxlIGByZWd1bGF0b3J5LmRiYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgcmVseWluZyBvbiBgQ09ORklHX0ZXX0xPQURFUmAuIFRoYXQgbWVhbnMgdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgY2FuIGdldCB0byBpdC4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zLiBgQ0ZHODAyMTFgIGlzIGEgZ2l2ZW4sIG9idmlvdXNseS4gYE1BQzgwMjExX0hXU0lNYCBtaWdodCBiZSByZWxldmFudCBmb3IgdGVzdGluZywgdG9vLiBJJiMzOTtsbCBpbmNsdWRlIGBNQUM4MDIxMV9IV1NJTWAgaW4gdGhlIGxpc3QsIHRob3VnaCBpdCYjMzk7cyBsZXNzIGNyaXRpY2FsLiBHaXZlbiB0aGUgdXNlIG9mIGZpcm13YXJlIGxvYWRpbmcsIGBGV19MT0FERVJgIGlzIHJlbGV2YW50LCBidXQgaXQmIzM5O3Mgc3VjaCBhIGdlbmVyYWwgY29uZmlnIEkgcHJvYmFibHkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXNzZW50aWFsIHN5bWJvbHMgaW4gbWluZC4gVGhlIHByaW1hcnkgdGFyZ2V0cyBhcmUgZGVmaW5pdGVseSBgcmVnZGJfbG9hZGAsIGByZWdkYl9md19jYl9yZXN0b3JlYCwgYHF1ZXJ5X3JlZ2RiX2ZpbGVgLCBgcmVnX3JlbG9hZF9yZWdkYmAsIGFuZCBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmAuCgpKdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiBgcmVnZGJfbG9hZGAgaXMgc3RhdGljLiBBbHJpZ2h0LCBgcmVnZGJfZndfY2JfcmVzdG9yZWAgaXMgYWxzbyBzdGF0aWMuIEFuZCBgcXVlcnlfcmVnZGJfZmlsZWAgdG9vLiBOb3csIGByZWdfcmVsb2FkX3JlZ2RiYCBpcyBleHBvcnRlZCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuIE9rYXksIHRoYXQgZmVlbHMgcHJldHR5IGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTAwNDg9c3RhdGljIGludCBubDgwMjExX3JlbG9hZF9yZWdkYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDA0OS17XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwMDUwOlx0cmV0dXJuIHJlZ19yZWxvYWRfcmVnZGIoKTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTAwNTEtfVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0xMDQ1PXN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNzktXG5uZXQvd2lyZWxlc3MvcmVnLmM6MTA4MDppbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwODEte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuaD0xNjg9Ym9vbCByZWdfZGZzX2RvbWFpbl9zYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHkxLCBzdHJ1Y3Qgd2lwaHkgKndpcGh5Mik7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oLTE3MC0vKipcbm5ldC93aXJlbGVzcy9yZWcuaDoxNzE6ICogcmVnX3JlbG9hZF9yZWdkYiAtIHJlbG9hZCB0aGUgcmVndWxhdG9yeS5kYiBmaXJtd2FyZSBmaWxlXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTcyLSAqIFJldHVybjogMCBmb3Igc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2Vcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzMtICovXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTc0OmludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpO1xubmV0L3dpcmVsZXNzL3JlZy5oLTE3NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmVsb2FkIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIHJlbG9hZCBtZWNoYW5pc20gaGVyZS4gSXQgbG9va3MgbGlrZSBgcmVnX3JlbG9hZF9yZWdkYmAgaXMgdGhlIGtleSBmdW5jdGlvbiBpbiB0aGUgcHJvY2Vzcy4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBgbmw4MDIxMV9yZWxvYWRfcmVnZGJgIG5ldGxpbmsgY29tbWFuZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGR5bmFtaWNhbGx5IHVwZGF0aW5nIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlLCBzbyBhIG5ldGxpbmsgaW50ZXJmYWNlIGlzIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgIGlzIGFub3RoZXIga2V5IHBvaW50LiBJdCBzZWVtcyB0aGF0IHRoaXMgZnVuY3Rpb24mIzM5O3MgY2FsbGVkIHdoZW5ldmVyIGEgd2lyZWxlc3MgUEhZIChgd2lwaHlgKSBpcyByZWdpc3RlcmVkLCB3aGljaCBhbHNvIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBUaGF0JiMzOTtzIGEgbG9naWNhbCBwb2ludCB0byBraWNrIG9mZiB0aGUgcmVndWxhdG9yeSBpbml0aWFsaXphdGlvbiBvciB1cGRhdGUsIHNpbmNlIHRoZSBQSFkmIzM5O3MgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24gd291bGQgYmUgcmVxdWlyZWQgYXQgdGhhdCBwb2ludC4KCkdpdmVuIHRob3NlIHR3byBwb2ludHMsIEkmIzM5O20gZ29pbmcgdG8gY2VudGVyIG15IGludmVzdGlnYXRpb24gYXJvdW5kIHRoZSBmb2xsb3dpbmcgc2V0IG9mIHN5bWJvbHM6IGByZWdkYl9sb2FkYCwgYHJlZ2RiX2Z3X2NiX3Jlc3RvcmVgLCBgcXVlcnlfcmVnZGJfZmlsZWAsIGByZWdfcmVsb2FkX3JlZ2RiYCwgYW5kIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIG9mIHRoaXMgcHV6emxlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBJJiMzOTttIG1pc3NpbmcgYW55IGNydWNpYWwgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgYHF1ZXJ5X3JlZ2RiX2ZpbGVgIGFuZCB0aGF0IG1heSBoaWdobGlnaHQgYW55dGhpbmcgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmM9MTAxMz1zdGF0aWMgdm9pZCByZWdkYl9md19jYl9yZXN0b3JlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNDQtXG5uZXQvd2lyZWxlc3MvcmVnLmM6MTA0NTpzdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKVxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNDYte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0xMTIzPXN0YXRpYyBib29sIHJlZ19xdWVyeV9kYXRhYmFzZShzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KVxubmV0L3dpcmVsZXNzL3JlZy5jLTExMjQte1xubmV0L3dpcmVsZXNzL3JlZy5jOjExMjU6XHRpZiAocXVlcnlfcmVnZGJfZmlsZShyZXF1ZXN0LVx1MDAzZWFscGhhMikgPT0gMClcbm5ldC93aXJlbGVzcy9yZWcuYy0xMTI2LVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmV0cmlldmFsKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHF1ZXJ5X3JlZ2RiX2ZpbGVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGByZWdfcXVlcnlfZGF0YWJhc2VgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSBob3cgYENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCYCBjb21lcyBpbnRvIHBsYXkgaGVyZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGNydWNpYWwgZm9yIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlLiBJZiB0aGF0IG1hY3JvIGlzIGVuYWJsZWQsIHRoZW4gSSYjMzk7ZCBleHBlY3QgYHZhbGlkX3JlZ2RiYCB0byBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nIHRoZSBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZSwgcHJldmVudGluZyB0YW1wZXJpbmcuIElmIGl0IGlzbiYjMzk7dCwgdGhlIHNlY3VyaXR5IG1vZGVsIGlzIGRyYW1hdGljYWxseSBkaWZmZXJlbnQuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmFsaWRfcmVnZGJgIHRvIGRldGVybWluZSBob3cgdGhlIGRhdGFiYXNlIHZhbGlkYXRpb24gd29ya3MgaW4gdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MuIFRoZSBkZXRhaWxzIGluIHRoZSBgdmFsaWRfcmVnZGJgIGZ1bmN0aW9uIGFyZSB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZhbGlkX3JlZ2RiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmM9Nzk4PXN0YXRpYyB2b2lkIGZyZWVfcmVnZGJfa2V5cmluZyh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy04MDItXG5uZXQvd2lyZWxlc3MvcmVnLmM6ODAzOnN0YXRpYyBib29sIHZhbGlkX3JlZ2RiKGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbm5ldC93aXJlbGVzcy9yZWcuYy04MDQte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz05OTQ9c3RhdGljIGludCByZWdkYl9sb2FkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTk5OS1cbm5ldC93aXJlbGVzcy9yZWcuYzoxMDAwOlx0aWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xubmV0L3dpcmVsZXNzL3JlZy5jLTEwMDEtXHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHJlZ3VsYXRvcnkuZGIgaXMgbWFsZm9ybWVkIG9yIHNpZ25hdHVyZSBpcyBtaXNzaW5nL2ludmFsaWRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGB2YWxpZF9yZWdkYmAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2YWxpZF9yZWdkYmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGlucHV0cywgd2hhdCBpdCBleHBlY3RzIHRoZSBkYXRhIGluIHRoZSByZWdpc3RlciBkYXRhYmFzZSAocmVnZGIpIHRvIGxvb2sgbGlrZS4gSXMgaXQgZXhwZWN0aW5nIGEgZmxhdCBzdHJ1Y3R1cmUsIHNvbWUgbmVzdGVkIGRpY3Rpb25hcnkgZm9ybWF0LCBvciBwZXJoYXBzIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG1ldGhvZHM/CgpOZXh0LCBJJiMzOTtsbCBjb25zaWRlciB0aGUgZGF0YSB2YWxpZGF0aW9uIHBlcmZvcm1lZC4gV2hhdCBjcml0ZXJpYSBhcmUgYmVpbmcgY2hlY2tlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYmFzaWMgdHlwZSBjaGVja3MsIG1vcmUgaW50cmljYXRlIGNvbnN0cmFpbnRzIG9uIHJlZ2lzdGVyIGFkZHJlc3MgcmFuZ2VzIG9yIGJpdGZpZWxkIGRlZmluaXRpb25zLCBvciBtYXliZSBldmVuIGNyb3NzLXJlZmVyZW5jZXMgdG8gb3RoZXIgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIGRhdGE/IE15IGh5cG90aGVzaXMgaXMgdGhhdCBpdCBjb3VsZCBpbmNsdWRlIHRoaW5ncyBsaWtlIGNoZWNraW5nIGZvciBvdmVybGFwcGluZyByZWdpc3RlcnMsIHZlcmlmeWluZyB0aGF0IGJpdGZpZWxkcyBkb27igJl0IGV4Y2VlZCByZWdpc3RlciBib3VuZGFyaWVzLCBvciBlbnN1cmluZyB0aGF0IGFkZHJlc3NlcyBhcmUgYWxpZ25lZCBhcyBuZWNlc3NhcnkgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBUaGUgb3ZlcmFsbCBnb2FsLCBJIHByZXN1bWUsIGlzIHRvIGd1YXJhbnRlZSB0aGUgaW50ZWdyaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiB0aGlzIHJlZ2lzdGVyIG1hcCBiZWZvcmUgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB2YWxpZGF0aW9uIHN0cmF0ZWd5LiBJIGV4cGVjdCBpdCBpcyBhIHNlcmllcyBvZiBjaGVja3MuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBleGNlcHRpb25zIG9yIHJldHVybiB2YWx1ZXMgaXQgdXNlcyB0byBzaWduYWwgZmFpbHVyZSBvciBzdWNjZXNzLiBBcmUgdGhlcmUgc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIGRvZXMgaXQgdGhyb3cgZXhjZXB0aW9ucz8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGltcG9ydGFudC4gVW5kZXJzdGFuZGluZyBob3cgYHZhbGlkX3JlZ2RiYCBjb21tdW5pY2F0ZXMgcHJvYmxlbXMgaXMga2V5IHRvIGludGVncmF0aW5nIGl0IGNvcnJlY3RseSBpbnRvIGEgbGFyZ2VyIHN5c3RlbSBvciBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IHJlcG9ydHMgcHJvYmxlbXMuIEkgYW50aWNpcGF0ZSBpdCBzaG91bGQgYmUgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3JlZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDM6XHRzdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXG4gODA0Olx0e1xuIDgwNTpcdFx0Y29uc3Qgc3RydWN0IGZ3ZGJfaGVhZGVyICpoZHIgPSAodm9pZCAqKWRhdGE7XG4gODA2Olx0XHRjb25zdCBzdHJ1Y3QgZndkYl9jb3VudHJ5ICpjb3VudHJ5O1xuIDgwNzpcdFxuIDgwODpcdFx0aWYgKHNpemUgXHUwMDNjIHNpemVvZigqaGRyKSlcbiA4MDk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxMDpcdFxuIDgxMTpcdFx0aWYgKGhkci1cdTAwM2VtYWdpYyAhPSBjcHVfdG9fYmUzMihGV0RCX01BR0lDKSlcbiA4MTI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxMzpcdFxuIDgxNDpcdFx0aWYgKGhkci1cdTAwM2V2ZXJzaW9uICE9IGNwdV90b19iZTMyKEZXREJfVkVSU0lPTikpXG4gODE1Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4MTY6XHRcbiA4MTc6XHRcdGlmICghcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShkYXRhLCBzaXplKSlcbiA4MTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxOTpcdFxuIDgyMDpcdFx0Y291bnRyeSA9IFx1MDAyNmhkci1cdTAwM2Vjb3VudHJ5WzBdO1xuIDgyMTpcdFx0d2hpbGUgKCh1OCAqKShjb3VudHJ5ICYjNDM7IDEpIFx1MDAzYz0gZGF0YSAmIzQzOyBzaXplKSB7XG4gODIyOlx0XHRcdGlmICghY291bnRyeS1cdTAwM2Vjb2xsX3B0cilcbiA4MjM6XHRcdFx0XHRicmVhaztcbiA4MjQ6XHRcdFx0aWYgKCF2YWxpZF9jb3VudHJ5KGRhdGEsIHNpemUsIGNvdW50cnkpKVxuIDgyNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4MjY6XHRcdFx0Y291bnRyeSYjNDM7JiM0Mzs7XG4gODI3Olx0XHR9XG4gODI4Olx0XG4gODI5Olx0XHRyZXR1cm4gdHJ1ZTtcbiA4MzA6XHR9XG4gODMxOlx0XG4gODMyOlx0c3RhdGljIHZvaWQgc2V0X3dtbV9ydWxlKGNvbnN0IHN0cnVjdCBmd2RiX2hlYWRlciAqZGIsXG4gODMzOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmd2RiX2NvdW50cnkgKmNvdW50cnksXG4gODM0Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmd2RiX3J1bGUgKnJ1bGUsXG4gODM1Olx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJydWxlKVxuIDgzNjpcdHtcbiA4Mzc6XHRcdHN0cnVjdCBpZWVlODAyMTFfd21tX3J1bGUgKndtbV9ydWxlID0gXHUwMDI2cnJ1bGUtXHUwMDNld21tX3J1bGU7XG4gODM4Olx0XHRzdHJ1Y3QgZndkYl93bW1fcnVsZSAqd21tO1xuIDgzOTpcdFx0dW5zaWduZWQgaW50IGksIHdtbV9wdHI7XG4gODQwOlx0XG4gODQxOlx0XHR3bW1fcHRyID0gYmUxNl90b19jcHUocnVsZS1cdTAwM2V3bW1fcHRyKSBcdTAwM2NcdTAwM2MgMjtcbiA4NDI6XHRcdHdtbSA9ICh2b2lkICopKCh1OCAqKWRiICYjNDM7IHdtbV9wdHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZW1iZWRkZWQgc3lzdGVtcyBvciBrZXJuZWwtbGV2ZWwgc2VjdXJpdHk6CgoqKlZhbGlkYXRpbmcgdGhlIFJlZ2lzdHJ5IERhdGFiYXNlIFNpZ25hdHVyZSoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgbXkgbWluZCBqdW1wcyB0byB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgcmVnaXN0cnkgZGF0YWJhc2UgaXMgc2VjdXJpdHkuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgYmVmb3JlIHdlIGV2ZW4gKnRvdWNoKiB0aGlzIHRoaW5nLCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGxlZ2l0aW1hdGUuJiMzNDsgSSBzZWUgdGhlIGNvZGUgY2hlY2tpbmcgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgLiBUaGF0JiMzOTtzIGNyaXRpY2FsLiBCZWZvcmUgd2UgdHJ1c3QgYW55IGRhdGEgb3IgcHJvY2VlZCB3aXRoIGFueSBvcGVyYXRpb25zIG9uIGl0LCBpdCYjMzk7cyBwYXJhbW91bnQgdGhhdCB3ZSBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgcmVnaXN0cnkgZGF0YWJhc2UuIFRoYXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlci4gSXQmIzM5O3MgdGhlIGZpcnN0IGxpbmUgb2YgZGVmZW5zZSBhZ2FpbnN0IHRhbXBlcmluZywgY29ycnVwdGlvbiwgb3IgbWFsaWNpb3VzIG1vZGlmaWNhdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyBhIHRydXN0ZWQsIHVuYWx0ZXJlZCB2ZXJzaW9uIG9mIHRoZSByZWdpc3RyeSBiZWZvcmUgbW92aW5nIGZvcndhcmQsIG90aGVyd2lzZSBldmVyeXRoaW5nIGlzIGNvbXByb21pc2VkLiBUaGUgc2lnbmF0dXJlIGNoZWNrIGlzIGEgbXVzdCBiZWZvcmUgYW55IG9wZXJhdGlvbiBvbiB0aGlzIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmM9NzYzPU1PRFVMRV9GSVJNV0FSRShcJiMzNDtyZWd1bGF0b3J5LmRiLnA3c1wmIzM0Oyk7XG5uZXQvd2lyZWxlc3MvcmVnLmMtNzY0LVxubmV0L3dpcmVsZXNzL3JlZy5jOjc2NTpzdGF0aWMgYm9vbCByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbm5ldC93aXJlbGVzcy9yZWcuYy03NjYte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03ODg9c3RhdGljIGludCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03OTItXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzkzOnN0YXRpYyBib29sIHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxubmV0L3dpcmVsZXNzL3JlZy5jLTc5NC17XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTgwMz1zdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTgxNi1cbm5ldC93aXJlbGVzcy9yZWcuYzo4MTc6XHRpZiAoIXJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoZGF0YSwgc2l6ZSkpXG5uZXQvd2lyZWxlc3MvcmVnLmMtODE4LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFib3V0IGByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlYC4gSSBuZWVkIHRvIHN0YXJ0IGJ5IGNsZWFybHkgZGVmaW5pbmcgd2hhdCB3ZSBtZWFuIGJ5ICYjMzQ7dmFsaWQgc2lnbmF0dXJlJiMzNDsgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlZ2lzdHJ5IGRhdGFiYXNlLiBTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBwb3RlbnRpYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgZGF0YSwgJiMzNDt2YWxpZCYjMzQ7IG5lZWRzIHRvIGJlIG1vcmUgdGhhbiBqdXN0IHN5bnRhY3RpY2FsbHkgY29ycmVjdDsgaXQgaGFzIHRvIGltcGx5IGNyeXB0b2dyYXBoaWMgaW50ZWdyaXR5IGFuZCB0cnVzdC4KClNvLCBmaXJzdCBJIG5lZWQgdG8gbG9vayB1cCB0aGUgcHJlY2lzZSBkZWZpbml0aW9ucyBvZiBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAsIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgY2hlY2sgdG8gcmV0dXJuIHRydWUuIFdoZXJlIGFyZSB0aGUgdHdvIGRlZmluaXRpb25zPyBJcyB0aGlzIGEgbXVsdGktZmFjZXRlZCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgY2hlY2tpbmcgdGhlIGZpbGUmIzM5O3Mgc2lnbmF0dXJlLCBjb21wYXJpbmcgaXQgdG8gYW4gYWxsb3dlZCBpc3N1ZXIsIGFuZCBtYXliZSB2ZXJpZnlpbmcgYSByZXZvY2F0aW9uIGxpc3Q/IE9yIGlzIHRoaXMgYSBtdWNoIHNpbXBsZXIgY2hlY2ssIG9ubHkgdmVyaWZ5aW5nIGZvcm1hdCB2YWxpZGl0eT8KCkkgbmVlZCB0byBxdWlja2x5IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2Ugc2NlbmFyaW9zLiBEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHksIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBvdGhlciBzZWN1cml0eSBzeXN0ZW1zIGFyZSBpbiBwbGFjZSwgc28gSSBjYW4gc2VlIHdoYXQgcHJvdGVjdGlvbnMgaXQgaXMgcHJvdmlkaW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gKmRvKiwgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXRzIGVmZmVjdGl2ZW5lc3MgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBhbmQgdGhlIHJlZ2lzdHJ5IGFuZCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCAmIzM0O3ZhbGlkJiMzNDsgKm1lYW5zKiwgYW5kIHdoYXQgYWN0aW9ucyBkZXBlbmQgb24gdGhhdCB2YWxpZGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NTpcdHN0YXRpYyBib29sIHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxuIDc2NjpcdHtcbiA3Njc6XHRcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc2lnO1xuIDc2ODpcdFx0Ym9vbCByZXN1bHQ7XG4gNzY5Olx0XG4gNzcwOlx0XHRpZiAocmVxdWVzdF9maXJtd2FyZShcdTAwMjZzaWcsIFwmIzM0O3JlZ3VsYXRvcnkuZGIucDdzXCYjMzQ7LCBcdTAwMjZyZWdfZmRldi1cdTAwM2VkZXYpKVxuIDc3MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzcyOlx0XG4gNzczOlx0XHRyZXN1bHQgPSB2ZXJpZnlfcGtjczdfc2lnbmF0dXJlKGRhdGEsIHNpemUsIHNpZy1cdTAwM2VkYXRhLCBzaWctXHUwMDNlc2l6ZSxcbiA3NzQ6XHRcdFx0XHRcdFx0YnVpbHRpbl9yZWdkYl9rZXlzLFxuIDc3NTpcdFx0XHRcdFx0XHRWRVJJRllJTkdfVU5TUEVDSUZJRURfU0lHTkFUVVJFLFxuIDc3NjpcdFx0XHRcdFx0XHROVUxMLCBOVUxMKSA9PSAwO1xuIDc3NzpcdFxuIDc3ODpcdFx0cmVsZWFzZV9maXJtd2FyZShzaWcpO1xuIDc3OTpcdFxuIDc4MDpcdFx0cmV0dXJuIHJlc3VsdDtcbiA3ODE6XHR9XG4gNzgyOlx0XG4gNzgzOlx0c3RhdGljIHZvaWQgZnJlZV9yZWdkYl9rZXlyaW5nKHZvaWQpXG4gNzg0Olx0e1xuIDc4NTpcdFx0a2V5X3B1dChidWlsdGluX3JlZ2RiX2tleXMpO1xuIDc4NjpcdH1cbiA3ODc6XHQjZWxzZVxuIDc4ODpcdHN0YXRpYyBpbnQgbG9hZF9idWlsdGluX3JlZ2RiX2tleXModm9pZClcbiA3ODk6XHR7XG4gNzkwOlx0XHRyZXR1cm4gMDtcbiA3OTE6XHR9XG4gNzkyOlx0XG4gNzkzOlx0c3RhdGljIGJvb2wgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXG4gNzk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogVGFyZ2V0ZWQgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgc3BlY2lmaWMgd2l0aGluIHRoaXMgY29kZWJhc2UuIFRoZSBwcmVjaXNlIGlzc3VlIGlzbiYjMzk7dCBjbGVhciBmcm9tIHRoZSBvdXRzZXQsIGJ1dCBJIGtub3cgdGhlIHJlbGV2YW50IGFyZWEgaXMgbGlrZWx5IG5lYXIgbGluZSA3NjUuIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyB0aGF0IGEgYnVnIG9yIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3QgaXMgc2l0dWF0ZWQgc29tZXdoZXJlIGFyb3VuZCB0aGF0IGxvY2F0aW9uLiBSYXRoZXIgdGhhbiBhIGJydXRlLWZvcmNlIGFwcHJvYWNoLCB0aGUgZm9jdXMgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgc2VjdGlvbiBvZiBjb2RlIGFkamFjZW50IHRvIHRoYXQgbGluZS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dOKAlHRoZSBwcmVjZWRpbmcgbGluZXMgYXJlIGp1c3QgYXMgaW1wb3J0YW50IGFzIHRoZSBvbmUgdW5kZXIgc2NydXRpbnkuIElzIHRoZXJlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbj8gQSBjb25kaXRpb25hbCBibG9jaz8gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IFRoZSBsaW5lcyBhYm92ZSB3aWxsIG9mZmVyIHRob3NlIGNsdWVzLiBUaGF0IGlzIHRoZSBmaXJzdCBzdGVwLCB1bmRlcnN0YW5kaW5nIHRoZSBuZWFyYnkgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3JlZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MzU6XHRzdGF0aWMgaW50IF9faW5pdCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxuIDczNjpcdHtcbiA3Mzc6XHRcdGJ1aWx0aW5fcmVnZGJfa2V5cyA9XG4gNzM4Olx0XHRcdGtleXJpbmdfYWxsb2MoXCYjMzQ7LmJ1aWx0aW5fcmVnZGJfa2V5c1wmIzM0OyxcbiA3Mzk6XHRcdFx0XHQgICAgICBLVUlEVF9JTklUKDApLCBLR0lEVF9JTklUKDApLCBjdXJyZW50X2NyZWQoKSxcbiA3NDA6XHRcdFx0XHQgICAgICAoKEtFWV9QT1NfQUxMIFx1MDAyNiB+S0VZX1BPU19TRVRBVFRSKSB8XG4gNzQxOlx0XHRcdFx0ICAgICAgS0VZX1VTUl9WSUVXIHwgS0VZX1VTUl9SRUFEIHwgS0VZX1VTUl9TRUFSQ0gpLFxuIDc0MjpcdFx0XHRcdCAgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwsIE5VTEwpO1xuIDc0MzpcdFx0aWYgKElTX0VSUihidWlsdGluX3JlZ2RiX2tleXMpKVxuIDc0NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihidWlsdGluX3JlZ2RiX2tleXMpO1xuIDc0NTpcdFxuIDc0NjpcdFx0cHJfbm90aWNlKFwmIzM0O0xvYWRpbmcgY29tcGlsZWQtaW4gWC41MDkgY2VydGlmaWNhdGVzIGZvciByZWd1bGF0b3J5IGRhdGFiYXNlXFxuXCYjMzQ7KTtcbiA3NDc6XHRcbiA3NDg6XHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuIDc0OTpcdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3Qoc2hpcHBlZF9yZWdkYl9jZXJ0cyxcbiA3NTA6XHRcdFx0XHRcdCAgIHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuLFxuIDc1MTpcdFx0XHRcdFx0ICAgYnVpbHRpbl9yZWdkYl9rZXlzKTtcbiA3NTI6XHQjZW5kaWZcbiA3NTM6XHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxuIDc1NDpcdFx0aWYgKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJbMF0gIT0gJiMzOTtcXDAmIzM5OylcbiA3NTU6XHRcdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXG4gNzU2Olx0XHRcdFx0XHRcdCAgIGV4dHJhX3JlZ2RiX2NlcnRzX2xlbixcbiA3NTc6XHRcdFx0XHRcdFx0ICAgYnVpbHRpbl9yZWdkYl9rZXlzKTtcbiA3NTg6XHQjZW5kaWZcbiA3NTk6XHRcbiA3NjA6XHRcdHJldHVybiAwO1xuIDc2MTpcdH1cbiA3NjI6XHRcbiA3NjM6XHRNT0RVTEVfRklSTVdBUkUoXCYjMzQ7cmVndWxhdG9yeS5kYi5wN3NcJiMzNDspO1xuIDc2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1pc3NpbmcgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZTogQSBRdWljayBDb25jZXJuKioKCkhtbSwgd2FpdCBhIHNlY29uZC4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHNjYW5uaW5nIHRocm91Z2ggdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGByZWdkYmAgYW5kIEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHNlZSB0aGUgYCNpZmRlZmAgYmxvY2sgZ3VhcmRpbmcgdGhlIHVzZSBvZiBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByZWQgZmxhZy4gSSBhc3N1bWVkIGl0IHdvdWxkIGJlIHRoZXJlIGdpdmVuIGl0cyBjb25kaXRpb25hbCBuYXR1cmUsIGFuZCB0aGUgY29tcGxleGl0eSBvZiBpdHMgdW5kZXJseWluZyBsb2dpYy4gSXMgaXQgbWlzc2luZywgb3IgYW0gSSBqdXN0IG1pc3NpbmcgaXQ/CgpJcyB0aGUgc3ltYm9sIGRlZmluZWQgZWxzZXdoZXJlLCBpbiBhIGhlYWRlciBJIGhhdmVuJiMzOTt0IGluY2x1ZGVkIHlldD8gT3IsIG1vcmUgY29uY2VybmluZ2x5LCBpcyBpdCBiZWluZyBjb21waWxlZCBpbiB1bmNvbmRpdGlvbmFsbHksIHdoZW4gcGVyaGFwcyBpdCAqc2hvdWxkbiYjMzk7dCogYmU/IFRoYXQgY291bGQgaW50cm9kdWNlIHNvbWUgc3VidGxlIGJ1Z3MgaWYgdGhpcyBzaWduYXR1cmUgY2hlY2sgaXNuJiMzOTt0IGNvbnNpc3RlbnRseSBlbmFibGVkIGFjcm9zcyBhbGwgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgaG93IHRoaXMgc2lnbmF0dXJlIHZhbGlkYXRpb24gaXMgY29udHJvbGxlZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCB0aGlzIHNvcnRlZCBvdXQgYmVmb3JlIGl0IGNvbWVzIGJhY2sgdG8gYml0ZSB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvcmVnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwNTpcdFx0LyogbWFrZSBzdXJlIHdlIGNhbiByZWFkIGxlbi9uX3J1bGVzICovXG4gNzA2Olx0XHRpZiAoKHU4ICopY29sbCAmIzQzOyBvZmZzZXRvZmVuZCh0eXBlb2YoKmNvbGwpLCBuX3J1bGVzKSBcdTAwM2UgZGF0YSAmIzQzOyBzaXplKVxuIDcwNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzA4Olx0XG4gNzA5Olx0XHQvKiBtYWtlIHN1cmUgYmFzZSBzdHJ1Y3QgYW5kIGFsbCBydWxlcyBmaXQgKi9cbiA3MTA6XHRcdGlmICgodTggKiljb2xsICYjNDM7IEFMSUdOKGNvbGwtXHUwMDNlbGVuLCAyKSAmIzQzO1xuIDcxMTpcdFx0ICAgIChjb2xsLVx1MDAzZW5fcnVsZXMgKiAyKSBcdTAwM2UgZGF0YSAmIzQzOyBzaXplKVxuIDcxMjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzEzOlx0XG4gNzE0Olx0XHQvKiBtYW5kYXRvcnkgZmllbGRzIG11c3QgZXhpc3QgKi9cbiA3MTU6XHRcdGlmIChjb2xsLVx1MDAzZWxlbiBcdTAwM2Mgb2Zmc2V0b2ZlbmQoc3RydWN0IGZ3ZGJfY29sbGVjdGlvbiwgZGZzX3JlZ2lvbikpXG4gNzE2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA3MTc6XHRcbiA3MTg6XHRcdHJ1bGVzX3B0ciA9ICh2b2lkICopKCh1OCAqKWNvbGwgJiM0MzsgQUxJR04oY29sbC1cdTAwM2VsZW4sIDIpKTtcbiA3MTk6XHRcbiA3MjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbGwtXHUwMDNlbl9ydWxlczsgaSYjNDM7JiM0MzspIHtcbiA3MjE6XHRcdFx0dTE2IHJ1bGVfcHRyID0gYmUxNl90b19jcHUocnVsZXNfcHRyW2ldKTtcbiA3MjI6XHRcbiA3MjM6XHRcdFx0aWYgKCF2YWxpZF9ydWxlKGRhdGEsIHNpemUsIHJ1bGVfcHRyKSlcbiA3MjQ6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzI1Olx0XHR9XG4gNzI2Olx0XG4gNzI3Olx0XHRyZXR1cm4gdHJ1ZTtcbiA3Mjg6XHR9XG4gNzI5Olx0XG4gNzMwOlx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxuIDczMTpcdCNpbmNsdWRlIFx1MDAzY2tleXMvYXN5bW1ldHJpYy10eXBlLmhcdTAwM2VcbiA3MzI6XHRcbiA3MzM6XHRzdGF0aWMgc3RydWN0IGtleSAqYnVpbHRpbl9yZWdkYl9rZXlzO1xuIDczNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY1NQoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiA2NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgY2ZnODAyMTEgUmVndWxhdG9yeSBEYXRhYmFzZSBMb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgY2hhbmdlcyB0byB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBsb2FkaW5nIGluIGBjZmc4MDIxMWAgYW5kIGhhdmUgYSBjbGVhciBzdHJhdGVneS4gIFRoZSBrZXkgaXMgdG8gdGFyZ2V0IGByZWdkYl9sb2FkYCBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBzaW5jZSB0aGUgZmlybXdhcmUgbG9hZGluZyBsb2dpYyBoYXMgYmVlbiB1cGRhdGVkIGFuZCB0aGVyZSYjMzk7cyBhIG5ldyBgcmVnZGJfbG9hZGAgZnVuY3Rpb24uICBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgY2FuIGhpdCBhbGwgdGhlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4KClRoZSBjb3JlIG9mIG15IGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIGBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJgLiBJZiB0aGF0JiMzOTtzIGVuYWJsZWQsIHRoZW4gYSBzaWduYXR1cmUgY2hlY2sgaGFwcGVucy4gSWYgaXQmIzM5O3MgKm5vdCogZW5hYmxlZCwgb3IgdGhlIHNpZ25hdHVyZSYjMzk7cyB2YWxpZCwgdGhlbiBpdCBza2lwcyB0aGUgc2lnbmF0dXJlIGNoZWNrIGVudGlyZWx5LiBCZWNhdXNlIHN5emthbGxlciBjYW4gZmVlZCBpbiBhcmJpdHJhcnkgZmlybXdhcmUsIGEgZmFpbGVkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gd2lsbCBiYWlsIG91dCBvZiB0aGUgbG9hZGluZyBwcm9jZXNzIHByZW1hdHVyZWx5LiAgVGhlcmVmb3JlLCBJIHdhbnQgdG8gYXZvaWQgZGVhbGluZyB3aXRoIHNpZ25lZCBkYXRhYmFzZXMgZm9yIGZ1enppbmcuCgpHb29kIG5ld3M6IHRoZSBkZWZhdWx0IGZvciBgQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCYCBpbiBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGlzIGBmYWxzZWAsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuICBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHByb3ZpZGluZyBhIHZhbGlkIHNpZ25hdHVyZSBvciBkaXNhYmxpbmcgaXQuCgpNeSBzdHJhdGVneSBpcyB0byBlbmFibGUgYENGRzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhlIGBtYWM4MDIxMV9od3NpbWAgd2lsbCBnaXZlIG1lIGEgc29mdHdhcmUtZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlIHRvIGludGVyYWN0IHdpdGguCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYCBpcyByZWFjaGFibGUgdGhyb3VnaCBgd2lwaHlfcmVnaXN0ZXJgLCBgcmVnX3JlbG9hZF9yZWdkYmAgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rLCBgcXVlcnlfcmVnZGJfZmlsZWAgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYHJlZ19xdWVyeV9kYXRhYmFzZWAsIGFuZCBgcmVnZGJfZndfY2JfcmVzdG9yZWAgaXMgYSBmaXJtd2FyZSBjYWxsYmFjay4gYHJlZ2RiX2xvYWRgIGl0c2VsZiB0aWVzIHRoZW0gYWxsIHRvZ2V0aGVyLgoKSSYjMzk7dmUgbWFkZSBzdXJlIHRoYXQgdGhlIGZ1enppbmcgY2FuIGhpdCBhbGwgb2YgdGhlIGltcG9ydGFudCBhcmVhcyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guIE5vIG90aGVyIGZ1bmN0aW9uIGNhbGxzIHdpbGwgYmUgbW9kaWZpZWQsIHNvIHRoZXNlIHdpbGwgYmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4KClNvLCBoZXJlJiMzOTtzIHRoZSBmaW5hbCBwbGFuLiAgV2Ugc2hvdWxkIGZ1enogdGhlIGZvbGxvd2luZzoKCioqV29ydGhGdXp6aW5nOiB0cnVlKioKCioqRm9jdXNTeW1ib2xzOioqCgoqICAgYHJlZ2RiX2xvYWRgCiogICBgcmVnZGJfZndfY2JfcmVzdG9yZWAKKiAgIGBxdWVyeV9yZWdkYl9maWxlYAoqICAgYHJlZ19yZWxvYWRfcmVnZGJgCiogICBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmAKCioqRW5hYmxlQ29uZmlnczoqKgoKKiAgIGBDRkc4MDIxMWAKKiAgIGBNQUM4MDIxMV9IV1NJTWAKClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgdGhlIGZpcm13YXJlIGxvYWRpbmcgZm9yIHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHBhdGhzIHZpYSBzb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzIGFuZCBuZXRsaW5rLiBUaGUgZnV6emluZyBlZmZvcnRzIG5lZWQgdG8gYmUgY2VudGVyZWQgb24gdGhlc2UgZmlybXdhcmUgbG9hZGluZyBhbmQgcmVndWxhdG9yeSByZWdpc3RyYXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2RiX2xvYWQmIzM0OywKICAgICYjMzQ7cmVnZGJfZndfY2JfcmVzdG9yZSYjMzQ7LAogICAgJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgICAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAgICYjMzQ7d2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2RiX2xvYWQmIzM0OywKICAgICYjMzQ7cmVnZGJfZndfY2JfcmVzdG9yZSYjMzQ7LAogICAgJiMzNDtxdWVyeV9yZWdkYl9maWxlJiMzNDssCiAgICAmIzM0O3JlZ19yZWxvYWRfcmVnZGImIzM0OywKICAgICYjMzQ7d2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6MTUuODEzMDExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MTg2OTAwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnZGJfbG9hZFwiLFxuICAgIFwicmVnZGJfZndfY2JfcmVzdG9yZVwiLFxuICAgIFwicXVlcnlfcmVnZGJfZmlsZVwiLFxuICAgIFwicmVnX3JlbG9hZF9yZWdkYlwiLFxuICAgIFwid2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgbG9hZGluZyB0aGUgYHJlZ3VsYXRvcnkuZGJgIGZpcm13YXJlIGluIHRoZSBjZmc4MDIxMSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgYHJlZ2RiX2xvYWRgIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGhvdyBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcgcGF0aHMgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSBkdXJpbmcgd2lwaHkgcmVnaXN0cmF0aW9uIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZmlybXdhcmUgbG9hZGluZyBhbmQgcmVndWxhdG9yeSByZWdpc3RyYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjE1LjgxMzAyNzc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE0MzMzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDE2OjU4OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuY1xcbmluZGV4IDFlODIxNGQ2YjZkODgxLi5kN2I4NjRkMzJiYTFlYSAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcXG4rKysgYi9uZXQvd2lyZWxlc3MvcmVnLmNcXG5AQCAtOTg4LDc4ICs5ODgsOTggQEAgc3RhdGljIGludCBxdWVyeV9yZWdkYihjb25zdCBjaGFyICphbHBoYTIpXFxuIFxcdHJldHVybiAtRU5PREFUQTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVnZGJfZndfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcXG4rTU9EVUxFX0ZJUk1XQVJFKFxcXCJyZWd1bGF0b3J5LmRiXFxcIik7XFxuK1xcbisvKiBWYWxpZGF0ZSBhbmQgc3RvcmUgZmlybXdhcmUgaW1hZ2UgYXMgcmVnZGIuIFVzZWQgYnkgYWxsIGxvYWQgcGF0aHMuICovXFxuK3N0YXRpYyBpbnQgcmVnZGJfbG9hZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiB7XFxuLVxcdGludCBzZXRfZXJyb3IgPSAwO1xcbi1cXHRib29sIHJlc3RvcmUgPSB0cnVlO1xcbiBcXHR2b2lkICpkYjtcXG4gXFxuLVxcdGlmICghZncpIHtcXG4tXFx0XFx0cHJfaW5mbyhcXFwiZmFpbGVkIHRvIGxvYWQgcmVndWxhdG9yeS5kYlxcXFxuXFxcIik7XFxuLVxcdFxcdHNldF9lcnJvciA9IC1FTk9EQVRBO1xcbi1cXHR9IGVsc2UgaWYgKCF2YWxpZF9yZWdkYihmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpKSB7XFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoIXZhbGlkX3JlZ2RiKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSkpIHtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHJlZ3VsYXRvcnkuZGIgaXMgbWFsZm9ybWVkIG9yIHNpZ25hdHVyZSBpcyBtaXNzaW5nL2ludmFsaWRcXFxcblxcXCIpO1xcbi1cXHRcXHRzZXRfZXJyb3IgPSAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0ZGIgPSBrbWVtZHVwKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGIpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmVnZGIgPSBkYjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4gXFx0cnRubF9sb2NrKCk7XFxuLVxcdGlmIChyZWdkYiBcXHUwMDI2XFx1MDAyNiAhSVNfRVJSKHJlZ2RiKSkge1xcbi1cXHRcXHQvKiBuZWdhdGl2ZSBjYXNlIC0gYSBidWdcXG4tXFx0XFx0ICogcG9zaXRpdmUgY2FzZSAtIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2UgaW4gY2FzZSBvZiBtdWx0aXBsZSBjYidzIGluXFxuLVxcdFxcdCAqIHF1ZXVlLCBkdWUgdG8gdXNhZ2Ugb2YgYXN5bmNocm9ub3VzIGNhbGxiYWNrXFxuLVxcdFxcdCAqXFxuLVxcdFxcdCAqIEVpdGhlciBjYXNlLCBqdXN0IHJlc3RvcmUgYW5kIGZyZWUgbmV3IGRiLlxcbi1cXHRcXHQgKi9cXG4tXFx0fSBlbHNlIGlmIChzZXRfZXJyb3IpIHtcXG4tXFx0XFx0cmVnZGIgPSBFUlJfUFRSKHNldF9lcnJvcik7XFxuLVxcdH0gZWxzZSBpZiAoZncpIHtcXG4tXFx0XFx0ZGIgPSBrbWVtZHVwKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuLVxcdFxcdGlmIChkYikge1xcbi1cXHRcXHRcXHRyZWdkYiA9IGRiO1xcbi1cXHRcXHRcXHRyZXN0b3JlID0gY29udGV4dCBcXHUwMDI2XFx1MDAyNiBxdWVyeV9yZWdkYihjb250ZXh0KTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmVzdG9yZSA9IHRydWU7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXG4tXFx0aWYgKHJlc3RvcmUpXFxuK1xcdC8qIFNraXAgaWYgYSBjb25jdXJyZW50IHdpcGh5IHJlZ2lzdHJhdGlvbiBhbHJlYWR5IGxvYWRlZCB0aGUgZGIuICovXFxuK1xcdGlmIChyZWdkYiBcXHUwMDI2XFx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVwbGF5IGFsbCBwZW5kaW5nIHJlZ3VsYXRvcnkgaGludHMgdGhhdCBhcnJpdmVkIHdoaWxlIHRoZVxcbitcXHQgKiBkYXRhYmFzZSB3YXMgbm90IHlldCBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgbG9hZCBvdXRjb21lLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFmdykge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmVnZGIgPSBFUlJfUFRSKC1FTk9EQVRBKTtcXG4gXFx0XFx0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuIFxcbi1cXHRydG5sX3VubG9jaygpO1xcbitcXHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmVnZGIgPSBFUlJfUFRSKGVycik7XFxuIFxcbi1cXHRrZnJlZShjb250ZXh0KTtcXG4rXFx0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcXG4gXFxuK291dF91bmxvY2s6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbiB9XFxuIFxcbi1NT0RVTEVfRklSTVdBUkUoXFxcInJlZ3VsYXRvcnkuZGJcXFwiKTtcXG4tXFxuIHN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcbi1cXHRpZiAocmVnZGIpXFxuK1xcdGlmIChyZWdkYiBcXHUwMDI2XFx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcXG4gXFx0XFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XFxuIFxcbi1cXHRhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghYWxwaGEyKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0LypcXG4rXFx0ICogTG9hZCBmYWlsZWQgb3IgYXN5bmMgdWRldiBsb2FkIGluIHByb2dyZXNzLiBJZiAtRUlOUFJPR1JFU1MsXFxuK1xcdCAqIGhpbnRzIGFyZSBwcmVzZXJ2ZWQgYW5kIHJlcGxheWVkIG9uY2UgdGhlIHVkZXYgbG9hZCBjb21wbGV0ZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfRVJSKHJlZ2RiKSBcXHUwMDI2XFx1MDAyNiBQVFJfRVJSKHJlZ2RiKSAhPSAtRUlOUFJPR1JFU1MpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJlZ2RiKTtcXG4gXFxuLVxcdGVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCB0cnVlLCBcXFwicmVndWxhdG9yeS5kYlxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZyZWdfZmRldi1cXHUwMDNlZGV2LCBHRlBfS0VSTkVMLFxcbi1cXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKWFscGhhMiwgcmVnZGJfZndfY2IpO1xcbitcXHQvKlxcbitcXHQgKiBQcmVzZXJ2ZSB0aGUgaGludCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgb24gZGlyZWN0IHBhdGhzO1xcbitcXHQgKiBhbiBhc3luYyB1ZGV2IGxvYWQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gd2lwaHkgcmVnaXN0cmF0aW9uXFxuK1xcdCAqIGFuZCB3aWxsIHJlcGxheSBhbGwgcGVuZGluZyBoaW50cyBvbiBjb21wbGV0aW9uLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3LCBcXFwicmVndWxhdG9yeS5kYlxcXCIsIFxcdTAwMjZyZWdfZmRldi1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0a2ZyZWUoYWxwaGEyKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGVyciA9IHJlZ2RiX2xvYWQoZncpO1xcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XFxuIH1cXG4gXFxuIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4tXFx0dm9pZCAqZGI7XFxuIFxcdGludCBlcnI7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjdXJyZW50X3JlZ2RvbWFpbjtcXG4gXFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDtcXG5AQCAtMTA2OCwyMSArMTA4OCwxNCBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKCF2YWxpZF9yZWdkYihmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9EQVRBO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0ZGIgPSBrbWVtZHVwKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghZGIpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHJlZ2RiKSlcXG4gXFx0XFx0a2ZyZWUocmVnZGIpO1xcbi1cXHRyZWdkYiA9IGRiO1xcbitcXHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuIFxcbiBcXHQvKiByZXNldCByZWd1bGF0b3J5IGRvbWFpbiAqL1xcbiBcXHRjdXJyZW50X3JlZ2RvbWFpbiA9IGdldF9jZmc4MDIxMV9yZWdkb20oKTtcXG5AQCAtMTEwMyw3ICsxMTE2LDYgQEAgaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcXG4gXFxuIG91dF91bmxvY2s6XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuLSBvdXQ6XFxuIFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuQEAgLTQwODUsNiArNDA5Nyw4IEBAIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxcbiB7XFxuIFxcdHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpO1xcbiBcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuIFxcdC8qIHNlbGYtbWFuYWdlZCBkZXZpY2VzIGlnbm9yZSBiZWFjb24gaGludHMgYW5kIGNvdW50cnkgSUUgKi9cXG4gXFx0aWYgKHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpIHtcXG4gXFx0XFx0d2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyB8XFxuQEAgLTQwOTcsNiArNDExMSwxNiBAQCB2b2lkIHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChsci1cXHUwMDNlaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKVxcbiBcXHRcXHRcXHRyZWdfY2FsbF9ub3RpZmllcih3aXBoeSwgbHIpO1xcbitcXHR9IGVsc2UgaWYgKCFyZWdkYikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiByZWd1bGF0b3J5LmRiIG5vdCB5ZXQgbG9hZGVkOyB0cmlnZ2VyIGFuIGFzeW5jIHVkZXZcXG4rXFx0XFx0ICogcmVxdWVzdCB0byBsb2FkIGl0IHdoZW4gdGhlIGZpcnN0IHdpcGh5IHJlZ2lzdGVycy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghZmlybXdhcmVfcmVxdWVzdF9ub3dhaXRfbm93YXJuKFRISVNfTU9EVUxFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcInJlZ3VsYXRvcnkuZGJcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJlZ19mZGV2LVxcdTAwM2VkZXYsIEdGUF9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLCByZWdkYl9md19jYl9yZXN0b3JlKSlcXG4rXFx0XFx0XFx0cmVnZGIgPSBFUlJfUFRSKC1FSU5QUk9HUkVTUyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcmVnX2Rldl9pZ25vcmVfY2VsbF9oaW50KHdpcGh5KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6MTYuNDE1MjAwMzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDMxNjQ1NzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdkYl9sb2FkXCIsXG4gICAgXCJyZWdkYl9md19jYl9yZXN0b3JlXCIsXG4gICAgXCJxdWVyeV9yZWdkYl9maWxlXCIsXG4gICAgXCJyZWdfcmVsb2FkX3JlZ2RiXCIsXG4gICAgXCJ3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBsb2FkaW5nIHRoZSBgcmVndWxhdG9yeS5kYmAgZmlybXdhcmUgaW4gdGhlIGNmZzgwMjExIHdpcmVsZXNzIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIG5ldyBgcmVnZGJfbG9hZGAgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaG93IGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgZmlybXdhcmUgbG9hZGluZyBwYXRocyBpbnRlcmFjdCwgcGFydGljdWxhcmx5IGR1cmluZyB3aXBoeSByZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgY29tbWFuZHMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBuZXRsaW5rIGludGVyZmFjZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmaXJtd2FyZSBsb2FkaW5nIGFuZCByZWd1bGF0b3J5IHJlZ2lzdHJhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMjdmZGMxMjZiZmM0YTg5MzU1NzYxMjRmMzMzZGU1ODEzODk3MDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTY6NTg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IDFlODIxNGQ2YjZkODgxLi5kN2I4NjRkMzJiYTFlYSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jXG5AQCAtOTg4LDc4ICs5ODgsOTggQEAgc3RhdGljIGludCBxdWVyeV9yZWdkYihjb25zdCBjaGFyICphbHBoYTIpXG4gXHRyZXR1cm4gLUVOT0RBVEE7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4rTU9EVUxFX0ZJUk1XQVJFKFwicmVndWxhdG9yeS5kYlwiKTtcbitcbisvKiBWYWxpZGF0ZSBhbmQgc3RvcmUgZmlybXdhcmUgaW1hZ2UgYXMgcmVnZGIuIFVzZWQgYnkgYWxsIGxvYWQgcGF0aHMuICovXG4rc3RhdGljIGludCByZWdkYl9sb2FkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4ge1xuLVx0aW50IHNldF9lcnJvciA9IDA7XG4tXHRib29sIHJlc3RvcmUgPSB0cnVlO1xuIFx0dm9pZCAqZGI7XG4gXG4tXHRpZiAoIWZ3KSB7XG4tXHRcdHByX2luZm8oXCJmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxuXCIpO1xuLVx0XHRzZXRfZXJyb3IgPSAtRU5PREFUQTtcbi1cdH0gZWxzZSBpZiAoIXZhbGlkX3JlZ2RiKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUpKSB7XG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xuIFx0XHRwcl9pbmZvKFwibG9hZGVkIHJlZ3VsYXRvcnkuZGIgaXMgbWFsZm9ybWVkIG9yIHNpZ25hdHVyZSBpcyBtaXNzaW5nL2ludmFsaWRcXG5cIik7XG4tXHRcdHNldF9lcnJvciA9IC1FSU5WQUw7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0ZGIgPSBrbWVtZHVwKGZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFkYilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZWdkYiA9IGRiO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcbit7XG4rXHRpbnQgZXJyO1xuK1xuIFx0cnRubF9sb2NrKCk7XG4tXHRpZiAocmVnZGIgXHUwMDI2XHUwMDI2ICFJU19FUlIocmVnZGIpKSB7XG4tXHRcdC8qIG5lZ2F0aXZlIGNhc2UgLSBhIGJ1Z1xuLVx0XHQgKiBwb3NpdGl2ZSBjYXNlIC0gY2FuIGhhcHBlbiBkdWUgdG8gcmFjZSBpbiBjYXNlIG9mIG11bHRpcGxlIGNiJ3MgaW5cbi1cdFx0ICogcXVldWUsIGR1ZSB0byB1c2FnZSBvZiBhc3luY2hyb25vdXMgY2FsbGJhY2tcbi1cdFx0ICpcbi1cdFx0ICogRWl0aGVyIGNhc2UsIGp1c3QgcmVzdG9yZSBhbmQgZnJlZSBuZXcgZGIuXG4tXHRcdCAqL1xuLVx0fSBlbHNlIGlmIChzZXRfZXJyb3IpIHtcbi1cdFx0cmVnZGIgPSBFUlJfUFRSKHNldF9lcnJvcik7XG4tXHR9IGVsc2UgaWYgKGZ3KSB7XG4tXHRcdGRiID0ga21lbWR1cChmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKGRiKSB7XG4tXHRcdFx0cmVnZGIgPSBkYjtcbi1cdFx0XHRyZXN0b3JlID0gY29udGV4dCBcdTAwMjZcdTAwMjYgcXVlcnlfcmVnZGIoY29udGV4dCk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmVzdG9yZSA9IHRydWU7XG4tXHRcdH1cbi1cdH1cbiBcbi1cdGlmIChyZXN0b3JlKVxuK1x0LyogU2tpcCBpZiBhIGNvbmN1cnJlbnQgd2lwaHkgcmVnaXN0cmF0aW9uIGFscmVhZHkgbG9hZGVkIHRoZSBkYi4gKi9cbitcdGlmIChyZWdkYiBcdTAwMjZcdTAwMjYgIUlTX0VSUihyZWdkYikpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdC8qXG4rXHQgKiBSZXBsYXkgYWxsIHBlbmRpbmcgcmVndWxhdG9yeSBoaW50cyB0aGF0IGFycml2ZWQgd2hpbGUgdGhlXG4rXHQgKiBkYXRhYmFzZSB3YXMgbm90IHlldCBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgbG9hZCBvdXRjb21lLlxuK1x0ICovXG4rXHRpZiAoIWZ3KSB7XG4rXHRcdHByX2luZm8oXCJmYWlsZWQgdG8gbG9hZCByZWd1bGF0b3J5LmRiXFxuXCIpO1xuK1x0XHRyZWdkYiA9IEVSUl9QVFIoLUVOT0RBVEEpO1xuIFx0XHRyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSwgZmFsc2UpO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4gXG4tXHRydG5sX3VubG9jaygpO1xuK1x0ZXJyID0gcmVnZGJfbG9hZChmdyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbiBcbi1cdGtmcmVlKGNvbnRleHQpO1xuK1x0cmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUsIGZhbHNlKTtcbiBcbitvdXRfdW5sb2NrOlxuK1x0cnRubF91bmxvY2soKTtcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIH1cbiBcbi1NT0RVTEVfRklSTVdBUkUoXCJyZWd1bGF0b3J5LmRiXCIpO1xuLVxuIHN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbiBcdGludCBlcnI7XG4gXG4gXHRBU1NFUlRfUlROTCgpO1xuIFxuLVx0aWYgKHJlZ2RiKVxuK1x0aWYgKHJlZ2RiIFx1MDAyNlx1MDAyNiAhSVNfRVJSKHJlZ2RiKSlcbiBcdFx0cmV0dXJuIHF1ZXJ5X3JlZ2RiKGFscGhhMik7XG4gXG4tXHRhbHBoYTIgPSBrbWVtZHVwKGFscGhhMiwgMiwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWFscGhhMilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHQvKlxuK1x0ICogTG9hZCBmYWlsZWQgb3IgYXN5bmMgdWRldiBsb2FkIGluIHByb2dyZXNzLiBJZiAtRUlOUFJPR1JFU1MsXG4rXHQgKiBoaW50cyBhcmUgcHJlc2VydmVkIGFuZCByZXBsYXllZCBvbmNlIHRoZSB1ZGV2IGxvYWQgY29tcGxldGVzLlxuK1x0ICovXG4rXHRpZiAoSVNfRVJSKHJlZ2RiKSBcdTAwMjZcdTAwMjYgUFRSX0VSUihyZWdkYikgIT0gLUVJTlBST0dSRVNTKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihyZWdkYik7XG4gXG4tXHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgXCJyZWd1bGF0b3J5LmRiXCIsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZyZWdfZmRldi1cdTAwM2VkZXYsIEdGUF9LRVJORUwsXG4tXHRcdFx0XHQgICAgICAodm9pZCAqKWFscGhhMiwgcmVnZGJfZndfY2IpO1xuK1x0LypcbitcdCAqIFByZXNlcnZlIHRoZSBoaW50IGlmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCBvbiBkaXJlY3QgcGF0aHM7XG4rXHQgKiBhbiBhc3luYyB1ZGV2IGxvYWQgd2lsbCBiZSB0cmlnZ2VyZWQgb24gd2lwaHkgcmVnaXN0cmF0aW9uXG4rXHQgKiBhbmQgd2lsbCByZXBsYXkgYWxsIHBlbmRpbmcgaGludHMgb24gY29tcGxldGlvbi5cbitcdCAqL1xuK1x0ZXJyID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncsIFwicmVndWxhdG9yeS5kYlwiLCBcdTAwMjZyZWdfZmRldi1cdTAwM2VkZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0a2ZyZWUoYWxwaGEyKTtcbitcdFx0cmV0dXJuIDA7XG4rXHRlcnIgPSByZWdkYl9sb2FkKGZ3KTtcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gcXVlcnlfcmVnZGIoYWxwaGEyKTtcbiB9XG4gXG4gaW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLVx0dm9pZCAqZGI7XG4gXHRpbnQgZXJyO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1cnJlbnRfcmVnZG9tYWluO1xuIFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDtcbkBAIC0xMDY4LDIxICsxMDg4LDE0IEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCF2YWxpZF9yZWdkYihmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKSkge1xuLVx0XHRlcnIgPSAtRU5PREFUQTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRkYiA9IGttZW1kdXAoZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWRiKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHJlZ2RiKSlcbiBcdFx0a2ZyZWUocmVnZGIpO1xuLVx0cmVnZGIgPSBkYjtcbitcdGVyciA9IHJlZ2RiX2xvYWQoZncpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZWdkYiA9IEVSUl9QVFIoZXJyKTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFxuIFx0LyogcmVzZXQgcmVndWxhdG9yeSBkb21haW4gKi9cbiBcdGN1cnJlbnRfcmVnZG9tYWluID0gZ2V0X2NmZzgwMjExX3JlZ2RvbSgpO1xuQEAgLTExMDMsNyArMTExNiw2IEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpXG4gXG4gb3V0X3VubG9jazpcbiBcdHJ0bmxfdW5sb2NrKCk7XG4tIG91dDpcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtNDA4NSw2ICs0MDk3LDggQEAgdm9pZCB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4ge1xuIFx0c3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqbHIgPSBnZXRfbGFzdF9yZXF1ZXN0KCk7XG4gXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuIFx0Lyogc2VsZi1tYW5hZ2VkIGRldmljZXMgaWdub3JlIGJlYWNvbiBoaW50cyBhbmQgY291bnRyeSBJRSAqL1xuIFx0aWYgKHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXHUwMDI2IFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEKSB7XG4gXHRcdHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyB8XG5AQCAtNDA5Nyw2ICs0MTExLDE2IEBAIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0XHQgKi9cbiBcdFx0aWYgKGxyLVx1MDAzZWluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUilcbiBcdFx0XHRyZWdfY2FsbF9ub3RpZmllcih3aXBoeSwgbHIpO1xuK1x0fSBlbHNlIGlmICghcmVnZGIpIHtcbitcdFx0LypcbitcdFx0ICogcmVndWxhdG9yeS5kYiBub3QgeWV0IGxvYWRlZDsgdHJpZ2dlciBhbiBhc3luYyB1ZGV2XG4rXHRcdCAqIHJlcXVlc3QgdG8gbG9hZCBpdCB3aGVuIHRoZSBmaXJzdCB3aXBoeSByZWdpc3RlcnMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWZpcm13YXJlX3JlcXVlc3Rfbm93YWl0X25vd2FybihUSElTX01PRFVMRSxcbitcdFx0XHRcdFx0XHQgICAgXCJyZWd1bGF0b3J5LmRiXCIsXG4rXHRcdFx0XHRcdFx0ICAgIFx1MDAyNnJlZ19mZGV2LVx1MDAzZWRldiwgR0ZQX0tFUk5FTCxcbitcdFx0XHRcdFx0XHQgICAgTlVMTCwgcmVnZGJfZndfY2JfcmVzdG9yZSkpXG4rXHRcdFx0cmVnZGIgPSBFUlJfUFRSKC1FSU5QUk9HUkVTUyk7XG4gXHR9XG4gXG4gXHRpZiAoIXJlZ19kZXZfaWdub3JlX2NlbGxfaGludCh3aXBoeSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODoxNi40MTUyMDE3ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg5OTI1ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFJlZ3VsYXRvcnkgRGF0YWJhc2UgTG9hZGluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSByZWZhY3RvciBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaW52b2x2ZXMgaG93IHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIChgcmVndWxhdG9yeS5kYmApIGlzIGxvYWRlZC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGByZWdkYl9sb2FkKClgLCByZW5hbWVkIGByZWdkYl9md19jYmAgdG8gYHJlZ2RiX2Z3X2NiX3Jlc3RvcmVgLCBhbmQgdHdlYWtlZCBhIGZldyBvdGhlciBmdW5jdGlvbnM6IGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBUaGlzIGlzIGFsbCBjcml0aWNhbCBzdHVmZiwgdGhlIG1lYXQgYW5kIHBvdGF0b2VzIG9mIHRoZSBjZmc4MDIxMSBhbmQgbWFjODAyMTEgc3Vic3lzdGVtcywgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyB0aGUgd2lyZWxlc3Mgc3RhY2sgaGFuZGxlcyByZWd1bGF0b3J5IGluZm9ybWF0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiBhY2Nlc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgdGVzdGluZyBlbnZpcm9ubWVudC4gRm9ydHVuYXRlbHksIHdpdGggd2lyZWxlc3MgY29kZSwgYG1hYzgwMjExX2h3c2ltYCBpcyB1c3VhbGx5IG15IGdvLXRvLiBTaW5jZSBgbWFjODAyMTFfaHdzaW1gIGlzIGEgc29mdHdhcmUgc2ltdWxhdG9yLCBpdCBzaG91bGQgYmUgZmluZSBpbiBhIFZNLiBUaGF0J3MgZ29vZDsgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cy4gQmFzZWQgb24gdGhlIHBhdGNoLCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBzaG91bGQgYmUgbG9va2luZyBhdCBhcmU6XG5cbiogICBgcmVnZGJfbG9hZGAgKG5ldyBmdW5jdGlvbiwgb2J2aW91c2x5IGltcG9ydGFudClcbiogICBgcmVnZGJfZndfY2JfcmVzdG9yZWAgKHJlbmFtZWQgZnJvbSBgcmVnZGJfZndfY2JgLCBzbyB3b3J0aCBhIGxvb2sgYXQgdGhlIGNoYW5nZXMpXG4qICAgYHF1ZXJ5X3JlZ2RiX2ZpbGVgXG4qICAgYHJlZ19yZWxvYWRfcmVnZGJgXG4qICAgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgXG5cbkZpbmFsbHksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIOKAkyBgbmV0L3dpcmVsZXNzL3JlZy5jYCDigJMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYWZmZWN0IHRoaXMgY29kZS4gU3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfQ0ZHODAyMTFgIG9yIGBDT05GSUdfTUFDODAyMTFgIGFyZSByZXF1aXJlZC4gSSdsbCBjaGVjayBlaXRoZXIgdGhlIGBNYWtlZmlsZWAgb3IgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gYG5ldC93aXJlbGVzcy9gLiBOZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYnVpbGRpbmcgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgc28gbXkgZnV6emluZyBpc24ndCBhIHdhc3RlIG9mIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODoyMy40MDUxMzAxMDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDI4MDc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLS4qcmVnXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjIzLjUyNTE2ODQ0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTg3MjE3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCBzdG9wOiBgbmV0L3dpcmVsZXNzL01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3aXJlbGVzcyBkcml2ZXJzIGFyZSBiZWluZyBidWlsdCBhbmQgbGlua2VkIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyBNYWtlZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIHRoYXQsIGFuZCBhIHF1aWNrIGluc3BlY3Rpb24gc2hvdWxkIGNsYXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLiBJJ20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IHZhcmlhYmxlcywgaW5jbHVkZSBkaXJlY3RpdmVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hpY2ggZHJpdmVycyBnZXQgYnVpbHQgYmFzZWQgb24gY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgY2hhbmdlcyBJIG5lZWQgdG8gbWFrZSB0byB0aGUgd2lyZWxlc3Mgc3RhY2suIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODoyNi43ODM4OTMwODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9cXG4gICAzOlxcdG9iai15ICs9IHRlc3RzL1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfV0VYVF9DT1JFKSArPSB3ZXh0LWNvcmUub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgKz0gd2V4dC1wcm9jLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vXFxuICAgODpcXHRcXG4gICA5OlxcdGNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xcbiAgMTA6XFx0Y2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8gbWVzaC5vIGFwLm8gdHJhY2UubyBvY2Iub1xcbiAgMTE6XFx0Y2ZnODAyMTEteSArPSBtaWNoYWVsLW1pYy5vIHBtc3Iub1xcbiAgMTI6XFx0Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG4gIDEzOlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbiAgMTQ6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxuICAxOTpcXHRpZm5lcSAoJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSwpXFxuICAyMDpcXHRjZmc4MDIxMS15ICs9IGV4dHJhLWNlcnRzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6MjYuNzgzOTkxMjE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MjA4NjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcmVndWxhdG9yeSBkYXRhYmFzZSBzaXR1YXRpb24uIFJpZ2h0LCBgcmVnLm9gIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYGNmZzgwMjExLXlgIGJ1aWxkIGNoYWluLCB3aGljaCBtYWtlcyBzZW5zZSAtIGl0J3Mgb25seSBidWlsdCBpZiBgQ09ORklHX0NGRzgwMjExYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBgcmVnLm9gIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHRyaWdnZXJlZC4gQWgsIHJpZ2h0LCB0byBnZXQgdGhlIHdpcGh5cyBpbnN0YW50aWF0ZWQgYW5kIGNhbGwgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLCBJIGFsc28gbmVlZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYC4gVGhhdCBwcm92aWRlcyB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGhhdCBjb250cm9scyAqaG93KiB0aGlzIHJlZ3VsYXRvcnkgZGF0YWJhc2UgaXMgaGFuZGxlZD8gSSBzZWVtIHRvIHJlY2FsbCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcsIGxpa2UgYENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgb3IgYSBzaW1pbGFyIG9wdGlvbi4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZSB0byBjaGVjayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc2VlIGlmIHRoZXkgaW1wYWN0IHRoZSByZWd1bGF0b3J5IGRhdGFiYXNlIGxvYWRpbmcgb3IgdmVyaWZpY2F0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODozMC45NzYwODA2NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4ODc4MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODozMS4xMTQ5NjQwNjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY0OTc4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVndWxhdG9yeSBEYXRhYmFzZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvd2lyZWxlc3MvcmVnLmNgIGZpbGUuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgb3IgYENGRzgwMjExX0NSREFfU1VQUE9SVGAgaGF2ZSBhbnkgcmVsZXZhbmNlIGhlcmU7IHRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgYW55IHJlZ3VsYXRvcnkgY2hhbmdlcy4gSSBub3RpY2UgaXQncyB1c2luZyBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIGFuZCBgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXRgIHRvIGhhbmRsZSBgcmVndWxhdG9yeS5kYmAsIHdoaWNoIHRlbGxzIG1lIGl0J3MgcmVseWluZyBvbiBgQ09ORklHX0ZXX0xPQURFUmAuIFRoYXQgbWVhbnMgdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgY2FuIGdldCB0byBpdC5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucy4gYENGRzgwMjExYCBpcyBhIGdpdmVuLCBvYnZpb3VzbHkuIGBNQUM4MDIxMV9IV1NJTWAgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHRlc3RpbmcsIHRvby4gSSdsbCBpbmNsdWRlIGBNQUM4MDIxMV9IV1NJTWAgaW4gdGhlIGxpc3QsIHRob3VnaCBpdCdzIGxlc3MgY3JpdGljYWwuIEdpdmVuIHRoZSB1c2Ugb2YgZmlybXdhcmUgbG9hZGluZywgYEZXX0xPQURFUmAgaXMgcmVsZXZhbnQsIGJ1dCBpdCdzIHN1Y2ggYSBnZW5lcmFsIGNvbmZpZyBJIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGVzc2VudGlhbCBzeW1ib2xzIGluIG1pbmQuIFRoZSBwcmltYXJ5IHRhcmdldHMgYXJlIGRlZmluaXRlbHkgYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLlxuXG5KdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmc6IGByZWdkYl9sb2FkYCBpcyBzdGF0aWMuIEFscmlnaHQsIGByZWdkYl9md19jYl9yZXN0b3JlYCBpcyBhbHNvIHN0YXRpYy4gQW5kIGBxdWVyeV9yZWdkYl9maWxlYCB0b28uIE5vdywgYHJlZ19yZWxvYWRfcmVnZGJgIGlzIGV4cG9ydGVkLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLiBPa2F5LCB0aGF0IGZlZWxzIHByZXR0eSBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjM3Ljg3OTk0NTc5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTEyMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ19yZWxvYWRfcmVnZGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEwMDQ4PXN0YXRpYyBpbnQgbmw4MDIxMV9yZWxvYWRfcmVnZGIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwMDQ5LXtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwMDUwOlxcdHJldHVybiByZWdfcmVsb2FkX3JlZ2RiKCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDA1MS19XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MTA0NT1zdGF0aWMgaW50IHF1ZXJ5X3JlZ2RiX2ZpbGUoY29uc3QgY2hhciAqYWxwaGEyKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNzktXFxubmV0L3dpcmVsZXNzL3JlZy5jOjEwODA6aW50IHJlZ19yZWxvYWRfcmVnZGIodm9pZClcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMTA4MS17XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmg9MTY4PWJvb2wgcmVnX2Rmc19kb21haW5fc2FtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5MSwgc3RydWN0IHdpcGh5ICp3aXBoeTIpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5oLTE3MC0vKipcXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTcxOiAqIHJlZ19yZWxvYWRfcmVnZGIgLSByZWxvYWQgdGhlIHJlZ3VsYXRvcnkuZGIgZmlybXdhcmUgZmlsZVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzItICogUmV0dXJuOiAwIGZvciBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzMtICovXFxubmV0L3dpcmVsZXNzL3JlZy5oOjE3NDppbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTc1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODozOC4wMTU4NjQ1OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTI2MDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmVsb2FkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZSByZWxvYWQgbWVjaGFuaXNtIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHJlZ19yZWxvYWRfcmVnZGJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuIEl0J3MgdHJpZ2dlcmVkIGJ5IHRoZSBgbmw4MDIxMV9yZWxvYWRfcmVnZGJgIG5ldGxpbmsgY29tbWFuZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgZHluYW1pY2FsbHkgdXBkYXRpbmcgdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UsIHNvIGEgbmV0bGluayBpbnRlcmZhY2UgaXMgcHJldHR5IHN0YW5kYXJkLlxuXG5Ob3csIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYCBpcyBhbm90aGVyIGtleSBwb2ludC4gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uJ3MgY2FsbGVkIHdoZW5ldmVyIGEgd2lyZWxlc3MgUEhZIChgd2lwaHlgKSBpcyByZWdpc3RlcmVkLCB3aGljaCBhbHNvIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBUaGF0J3MgYSBsb2dpY2FsIHBvaW50IHRvIGtpY2sgb2ZmIHRoZSByZWd1bGF0b3J5IGluaXRpYWxpemF0aW9uIG9yIHVwZGF0ZSwgc2luY2UgdGhlIFBIWSdzIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uIHdvdWxkIGJlIHJlcXVpcmVkIGF0IHRoYXQgcG9pbnQuXG5cbkdpdmVuIHRob3NlIHR3byBwb2ludHMsIEknbSBnb2luZyB0byBjZW50ZXIgbXkgaW52ZXN0aWdhdGlvbiBhcm91bmQgdGhlIGZvbGxvd2luZyBzZXQgb2Ygc3ltYm9sczogYHJlZ2RiX2xvYWRgLCBgcmVnZGJfZndfY2JfcmVzdG9yZWAsIGBxdWVyeV9yZWdkYl9maWxlYCwgYHJlZ19yZWxvYWRfcmVnZGJgLCBhbmQgYHdpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJgLiBUaGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgb2YgdGhpcyBwdXp6bGUuIEknbSB3b25kZXJpbmcgaWYgSSdtIG1pc3NpbmcgYW55IGNydWNpYWwgZnVuY3Rpb24uIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGBxdWVyeV9yZWdkYl9maWxlYCBhbmQgdGhhdCBtYXkgaGlnaGxpZ2h0IGFueXRoaW5nIEkgaGF2ZW4ndCBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjQxLjkxNzEyODE5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxNzMxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVlcnlfcmVnZGJfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz0xMDEzPXN0YXRpYyB2b2lkIHJlZ2RiX2Z3X2NiX3Jlc3RvcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0xMDQ0LVxcbm5ldC93aXJlbGVzcy9yZWcuYzoxMDQ1OnN0YXRpYyBpbnQgcXVlcnlfcmVnZGJfZmlsZShjb25zdCBjaGFyICphbHBoYTIpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTEwNDYte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTExMjM9c3RhdGljIGJvb2wgcmVnX3F1ZXJ5X2RhdGFiYXNlKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTExMjQte1xcbm5ldC93aXJlbGVzcy9yZWcuYzoxMTI1OlxcdGlmIChxdWVyeV9yZWdkYl9maWxlKHJlcXVlc3QtXFx1MDAzZWFscGhhMikgPT0gMClcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMTEyNi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6NDIuMDA5MzA3ODNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1ODIzNzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRGF0YWJhc2UgUmV0cmlldmFsKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgcXVlcnlfcmVnZGJfZmlsZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYHJlZ19xdWVyeV9kYXRhYmFzZWAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgY29tZXMgaW50byBwbGF5IGhlcmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBjcnVjaWFsIGZvciB0aGUgc2VjdXJpdHkgYW5kIGludGVncml0eSBvZiB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZS4gSWYgdGhhdCBtYWNybyBpcyBlbmFibGVkLCB0aGVuIEknZCBleHBlY3QgYHZhbGlkX3JlZ2RiYCB0byBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nIHRoZSBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZSwgcHJldmVudGluZyB0YW1wZXJpbmcuIElmIGl0IGlzbid0LCB0aGUgc2VjdXJpdHkgbW9kZWwgaXMgZHJhbWF0aWNhbGx5IGRpZmZlcmVudC4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZhbGlkX3JlZ2RiYCB0byBkZXRlcm1pbmUgaG93IHRoZSBkYXRhYmFzZSB2YWxpZGF0aW9uIHdvcmtzIGluIHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zLiBUaGUgZGV0YWlscyBpbiB0aGUgYHZhbGlkX3JlZ2RiYCBmdW5jdGlvbiBhcmUgd2hhdCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjQ1LjM2NzU0ODMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MzM0NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZhbGlkX3JlZ2RiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3JlZy5jPTc5OD1zdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy04MDItXFxubmV0L3dpcmVsZXNzL3JlZy5jOjgwMzpzdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwNC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9OTk0PXN0YXRpYyBpbnQgcmVnZGJfbG9hZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTk5OS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MTAwMDpcXHRpZiAoIXZhbGlkX3JlZ2RiKGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSkpIHtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMTAwMS1cXHRcXHRwcl9pbmZvKFxcXCJsb2FkZWQgcmVndWxhdG9yeS5kYiBpcyBtYWxmb3JtZWQgb3Igc2lnbmF0dXJlIGlzIG1pc3NpbmcvaW52YWxpZFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjQ1LjQ5NTg5MDgxNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDYyMjAxMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYHZhbGlkX3JlZ2RiYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB2YWxpZF9yZWdkYmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGlucHV0cywgd2hhdCBpdCBleHBlY3RzIHRoZSBkYXRhIGluIHRoZSByZWdpc3RlciBkYXRhYmFzZSAocmVnZGIpIHRvIGxvb2sgbGlrZS4gSXMgaXQgZXhwZWN0aW5nIGEgZmxhdCBzdHJ1Y3R1cmUsIHNvbWUgbmVzdGVkIGRpY3Rpb25hcnkgZm9ybWF0LCBvciBwZXJoYXBzIGEgbW9yZSBjb21wbGV4IG9iamVjdCB3aXRoIG1ldGhvZHM/XG5cbk5leHQsIEknbGwgY29uc2lkZXIgdGhlIGRhdGEgdmFsaWRhdGlvbiBwZXJmb3JtZWQuIFdoYXQgY3JpdGVyaWEgYXJlIGJlaW5nIGNoZWNrZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGJhc2ljIHR5cGUgY2hlY2tzLCBtb3JlIGludHJpY2F0ZSBjb25zdHJhaW50cyBvbiByZWdpc3RlciBhZGRyZXNzIHJhbmdlcyBvciBiaXRmaWVsZCBkZWZpbml0aW9ucywgb3IgbWF5YmUgZXZlbiBjcm9zcy1yZWZlcmVuY2VzIHRvIG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbiBkYXRhPyBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgaXQgY291bGQgaW5jbHVkZSB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3Igb3ZlcmxhcHBpbmcgcmVnaXN0ZXJzLCB2ZXJpZnlpbmcgdGhhdCBiaXRmaWVsZHMgZG9u4oCZdCBleGNlZWQgcmVnaXN0ZXIgYm91bmRhcmllcywgb3IgZW5zdXJpbmcgdGhhdCBhZGRyZXNzZXMgYXJlIGFsaWduZWQgYXMgbmVjZXNzYXJ5IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gVGhlIG92ZXJhbGwgZ29hbCwgSSBwcmVzdW1lLCBpcyB0byBndWFyYW50ZWUgdGhlIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgb2YgdGhpcyByZWdpc3RlciBtYXAgYmVmb3JlIGl0J3MgdXNlZCBlbHNld2hlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB2YWxpZGF0aW9uIHN0cmF0ZWd5LiBJIGV4cGVjdCBpdCBpcyBhIHNlcmllcyBvZiBjaGVja3MuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZXhjZXB0aW9ucyBvciByZXR1cm4gdmFsdWVzIGl0IHVzZXMgdG8gc2lnbmFsIGZhaWx1cmUgb3Igc3VjY2Vzcy4gQXJlIHRoZXJlIHNwZWNpZmljIGVycm9yIGNvZGVzLCBvciBkb2VzIGl0IHRocm93IGV4Y2VwdGlvbnM/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBpbXBvcnRhbnQuIFVuZGVyc3RhbmRpbmcgaG93IGB2YWxpZF9yZWdkYmAgY29tbXVuaWNhdGVzIHByb2JsZW1zIGlzIGtleSB0byBpbnRlZ3JhdGluZyBpdCBjb3JyZWN0bHkgaW50byBhIGxhcmdlciBzeXN0ZW0gb3IgZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMuIEknbGwgZm9jdXMgb24gaG93IGl0IHJlcG9ydHMgcHJvYmxlbXMuIEkgYW50aWNpcGF0ZSBpdCBzaG91bGQgYmUgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4ODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODo1MC45NTgwOTUwNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDM6XFx0c3RhdGljIGJvb2wgdmFsaWRfcmVnZGIoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxcbiA4MDQ6XFx0e1xcbiA4MDU6XFx0XFx0Y29uc3Qgc3RydWN0IGZ3ZGJfaGVhZGVyICpoZHIgPSAodm9pZCAqKWRhdGE7XFxuIDgwNjpcXHRcXHRjb25zdCBzdHJ1Y3QgZndkYl9jb3VudHJ5ICpjb3VudHJ5O1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNjIHNpemVvZigqaGRyKSlcXG4gODA5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0aWYgKGhkci1cXHUwMDNlbWFnaWMgIT0gY3B1X3RvX2JlMzIoRldEQl9NQUdJQykpXFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgxMzpcXHRcXG4gODE0OlxcdFxcdGlmIChoZHItXFx1MDAzZXZlcnNpb24gIT0gY3B1X3RvX2JlMzIoRldEQl9WRVJTSU9OKSlcXG4gODE1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODE2OlxcdFxcbiA4MTc6XFx0XFx0aWYgKCFyZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGRhdGEsIHNpemUpKVxcbiA4MTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRjb3VudHJ5ID0gXFx1MDAyNmhkci1cXHUwMDNlY291bnRyeVswXTtcXG4gODIxOlxcdFxcdHdoaWxlICgodTggKikoY291bnRyeSArIDEpIFxcdTAwM2M9IGRhdGEgKyBzaXplKSB7XFxuIDgyMjpcXHRcXHRcXHRpZiAoIWNvdW50cnktXFx1MDAzZWNvbGxfcHRyKVxcbiA4MjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgyNDpcXHRcXHRcXHRpZiAoIXZhbGlkX2NvdW50cnkoZGF0YSwgc2l6ZSwgY291bnRyeSkpXFxuIDgyNTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgyNjpcXHRcXHRcXHRjb3VudHJ5Kys7XFxuIDgyNzpcXHRcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdFxcdHJldHVybiB0cnVlO1xcbiA4MzA6XFx0fVxcbiA4MzE6XFx0XFxuIDgzMjpcXHRzdGF0aWMgdm9pZCBzZXRfd21tX3J1bGUoY29uc3Qgc3RydWN0IGZ3ZGJfaGVhZGVyICpkYixcXG4gODMzOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZndkYl9jb3VudHJ5ICpjb3VudHJ5LFxcbiA4MzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmd2RiX3J1bGUgKnJ1bGUsXFxuIDgzNTpcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcnJ1bGUpXFxuIDgzNjpcXHR7XFxuIDgzNzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3dtbV9ydWxlICp3bW1fcnVsZSA9IFxcdTAwMjZycnVsZS1cXHUwMDNld21tX3J1bGU7XFxuIDgzODpcXHRcXHRzdHJ1Y3QgZndkYl93bW1fcnVsZSAqd21tO1xcbiA4Mzk6XFx0XFx0dW5zaWduZWQgaW50IGksIHdtbV9wdHI7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdHdtbV9wdHIgPSBiZTE2X3RvX2NwdShydWxlLVxcdTAwM2V3bW1fcHRyKSBcXHUwMDNjXFx1MDAzYyAyO1xcbiA4NDI6XFx0XFx0d21tID0gKHZvaWQgKikoKHU4ICopZGIgKyB3bW1fcHRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTg6NTAuOTU4NTMwOTc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTE5ODM4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMgb3Iga2VybmVsLWxldmVsIHNlY3VyaXR5OlxuXG4qKlZhbGlkYXRpbmcgdGhlIFJlZ2lzdHJ5IERhdGFiYXNlIFNpZ25hdHVyZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBteSBtaW5kIGp1bXBzIHRvIHdoZW4gZGVhbGluZyB3aXRoIHRoZSByZWdpc3RyeSBkYXRhYmFzZSBpcyBzZWN1cml0eS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIk9rYXksIGJlZm9yZSB3ZSBldmVuICp0b3VjaCogdGhpcyB0aGluZywgbGV0J3MgbWFrZSBzdXJlIGl0J3MgbGVnaXRpbWF0ZS5cIiBJIHNlZSB0aGUgY29kZSBjaGVja2luZyBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAuIFRoYXQncyBjcml0aWNhbC4gQmVmb3JlIHdlIHRydXN0IGFueSBkYXRhIG9yIHByb2NlZWQgd2l0aCBhbnkgb3BlcmF0aW9ucyBvbiBpdCwgaXQncyBwYXJhbW91bnQgdGhhdCB3ZSBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgcmVnaXN0cnkgZGF0YWJhc2UuIFRoYXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlci4gSXQncyB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3QgdGFtcGVyaW5nLCBjb3JydXB0aW9uLCBvciBtYWxpY2lvdXMgbW9kaWZpY2F0aW9uLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGlzIGEgdHJ1c3RlZCwgdW5hbHRlcmVkIHZlcnNpb24gb2YgdGhlIHJlZ2lzdHJ5IGJlZm9yZSBtb3ZpbmcgZm9yd2FyZCwgb3RoZXJ3aXNlIGV2ZXJ5dGhpbmcgaXMgY29tcHJvbWlzZWQuIFRoZSBzaWduYXR1cmUgY2hlY2sgaXMgYSBtdXN0IGJlZm9yZSBhbnkgb3BlcmF0aW9uIG9uIHRoaXMgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjU0LjA1MDUxODcwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzNjc2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz03NjM9TU9EVUxFX0ZJUk1XQVJFKFxcXCJyZWd1bGF0b3J5LmRiLnA3c1xcXCIpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy03NjQtXFxubmV0L3dpcmVsZXNzL3JlZy5jOjc2NTpzdGF0aWMgYm9vbCByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzY2LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz03ODg9c3RhdGljIGludCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc5Mi1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzkzOnN0YXRpYyBib29sIHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmUoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKVxcbm5ldC93aXJlbGVzcy9yZWcuYy03OTQte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTgwMz1zdGF0aWMgYm9vbCB2YWxpZF9yZWdkYihjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtODE2LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo4MTc6XFx0aWYgKCFyZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlKGRhdGEsIHNpemUpKVxcbm5ldC93aXJlbGVzcy9yZWcuYy04MTgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODo1NC4xMzQ4OTQ3MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMjk4MDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBxdWVzdGlvbiBpcyBhYm91dCBgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZWAuIEkgbmVlZCB0byBzdGFydCBieSBjbGVhcmx5IGRlZmluaW5nIHdoYXQgd2UgbWVhbiBieSBcInZhbGlkIHNpZ25hdHVyZVwiIGluIHRoZSBjb250ZXh0IG9mIHRoZSByZWdpc3RyeSBkYXRhYmFzZS4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBwb3RlbnRpYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgZGF0YSwgXCJ2YWxpZFwiIG5lZWRzIHRvIGJlIG1vcmUgdGhhbiBqdXN0IHN5bnRhY3RpY2FsbHkgY29ycmVjdDsgaXQgaGFzIHRvIGltcGx5IGNyeXB0b2dyYXBoaWMgaW50ZWdyaXR5IGFuZCB0cnVzdC5cblxuU28sIGZpcnN0IEkgbmVlZCB0byBsb29rIHVwIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIG9mIGByZWdkYl9oYXNfdmFsaWRfc2lnbmF0dXJlYCwgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBmb3IgdGhpcyBjaGVjayB0byByZXR1cm4gdHJ1ZS4gV2hlcmUgYXJlIHRoZSB0d28gZGVmaW5pdGlvbnM/IElzIHRoaXMgYSBtdWx0aS1mYWNldGVkIGZ1bmN0aW9uLCBwb3RlbnRpYWxseSBjaGVja2luZyB0aGUgZmlsZSdzIHNpZ25hdHVyZSwgY29tcGFyaW5nIGl0IHRvIGFuIGFsbG93ZWQgaXNzdWVyLCBhbmQgbWF5YmUgdmVyaWZ5aW5nIGEgcmV2b2NhdGlvbiBsaXN0PyBPciBpcyB0aGlzIGEgbXVjaCBzaW1wbGVyIGNoZWNrLCBvbmx5IHZlcmlmeWluZyBmb3JtYXQgdmFsaWRpdHk/XG5cbkkgbmVlZCB0byBxdWlja2x5IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2Ugc2NlbmFyaW9zLiBEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHksIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG90aGVyIHNlY3VyaXR5IHN5c3RlbXMgYXJlIGluIHBsYWNlLCBzbyBJIGNhbiBzZWUgd2hhdCBwcm90ZWN0aW9ucyBpdCBpcyBwcm92aWRpbmcuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvICpkbyosIHRvIGJlIGFibGUgdG8gYXNzZXNzIGl0cyBlZmZlY3RpdmVuZXNzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSByZWdpc3RyeSBhbmQgb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMuIEknbSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBcInZhbGlkXCIgKm1lYW5zKiwgYW5kIHdoYXQgYWN0aW9ucyBkZXBlbmQgb24gdGhhdCB2YWxpZGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1ODo1Ny44Njc4Nzg2NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjU6XFx0c3RhdGljIGJvb2wgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxuIDc2NjpcXHR7XFxuIDc2NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnNpZztcXG4gNzY4OlxcdFxcdGJvb2wgcmVzdWx0O1xcbiA3Njk6XFx0XFxuIDc3MDpcXHRcXHRpZiAocmVxdWVzdF9maXJtd2FyZShcXHUwMDI2c2lnLCBcXFwicmVndWxhdG9yeS5kYi5wN3NcXFwiLCBcXHUwMDI2cmVnX2ZkZXYtXFx1MDAzZWRldikpXFxuIDc3MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDc3MjpcXHRcXG4gNzczOlxcdFxcdHJlc3VsdCA9IHZlcmlmeV9wa2NzN19zaWduYXR1cmUoZGF0YSwgc2l6ZSwgc2lnLVxcdTAwM2VkYXRhLCBzaWctXFx1MDAzZXNpemUsXFxuIDc3NDpcXHRcXHRcXHRcXHRcXHRcXHRidWlsdGluX3JlZ2RiX2tleXMsXFxuIDc3NTpcXHRcXHRcXHRcXHRcXHRcXHRWRVJJRllJTkdfVU5TUEVDSUZJRURfU0lHTkFUVVJFLFxcbiA3NzY6XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCkgPT0gMDtcXG4gNzc3OlxcdFxcbiA3Nzg6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShzaWcpO1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiA3ODE6XFx0fVxcbiA3ODI6XFx0XFxuIDc4MzpcXHRzdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcXG4gNzg0OlxcdHtcXG4gNzg1OlxcdFxcdGtleV9wdXQoYnVpbHRpbl9yZWdkYl9rZXlzKTtcXG4gNzg2OlxcdH1cXG4gNzg3OlxcdCNlbHNlXFxuIDc4ODpcXHRzdGF0aWMgaW50IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXFxuIDc4OTpcXHR7XFxuIDc5MDpcXHRcXHRyZXR1cm4gMDtcXG4gNzkxOlxcdH1cXG4gNzkyOlxcdFxcbiA3OTM6XFx0c3RhdGljIGJvb2wgcmVnZGJfaGFzX3ZhbGlkX3NpZ25hdHVyZShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpXFxuIDc5NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE2OjU4OjU3Ljg2ODExMjM0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQxMzQ3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IFRhcmdldGVkIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVGhlIHByZWNpc2UgaXNzdWUgaXNuJ3QgY2xlYXIgZnJvbSB0aGUgb3V0c2V0LCBidXQgSSBrbm93IHRoZSByZWxldmFudCBhcmVhIGlzIGxpa2VseSBuZWFyIGxpbmUgNzY1LiBNeSBtZW50YWwgbW9kZWwgc3VnZ2VzdHMgdGhhdCBhIGJ1ZyBvciBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IGlzIHNpdHVhdGVkIHNvbWV3aGVyZSBhcm91bmQgdGhhdCBsb2NhdGlvbi4gUmF0aGVyIHRoYW4gYSBicnV0ZS1mb3JjZSBhcHByb2FjaCwgdGhlIGZvY3VzIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHNlY3Rpb24gb2YgY29kZSBhZGphY2VudCB0byB0aGF0IGxpbmUuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGNvbnRleHTigJR0aGUgcHJlY2VkaW5nIGxpbmVzIGFyZSBqdXN0IGFzIGltcG9ydGFudCBhcyB0aGUgb25lIHVuZGVyIHNjcnV0aW55LiBJcyB0aGVyZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24/IEEgY29uZGl0aW9uYWwgYmxvY2s/IERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uPyBUaGUgbGluZXMgYWJvdmUgd2lsbCBvZmZlciB0aG9zZSBjbHVlcy4gVGhhdCBpcyB0aGUgZmlyc3Qgc3RlcCwgdW5kZXJzdGFuZGluZyB0aGUgbmVhcmJ5IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTY6NTk6MDIuNDA5NDYyNzY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvcmVnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzM1OlxcdHN0YXRpYyBpbnQgX19pbml0IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXFxuIDczNjpcXHR7XFxuIDczNzpcXHRcXHRidWlsdGluX3JlZ2RiX2tleXMgPVxcbiA3Mzg6XFx0XFx0XFx0a2V5cmluZ19hbGxvYyhcXFwiLmJ1aWx0aW5fcmVnZGJfa2V5c1xcXCIsXFxuIDczOTpcXHRcXHRcXHRcXHQgICAgICBLVUlEVF9JTklUKDApLCBLR0lEVF9JTklUKDApLCBjdXJyZW50X2NyZWQoKSxcXG4gNzQwOlxcdFxcdFxcdFxcdCAgICAgICgoS0VZX1BPU19BTEwgXFx1MDAyNiB+S0VZX1BPU19TRVRBVFRSKSB8XFxuIDc0MTpcXHRcXHRcXHRcXHQgICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCksXFxuIDc0MjpcXHRcXHRcXHRcXHQgICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMLCBOVUxMKTtcXG4gNzQzOlxcdFxcdGlmIChJU19FUlIoYnVpbHRpbl9yZWdkYl9rZXlzKSlcXG4gNzQ0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1aWx0aW5fcmVnZGJfa2V5cyk7XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHByX25vdGljZShcXFwiTG9hZGluZyBjb21waWxlZC1pbiBYLjUwOSBjZXJ0aWZpY2F0ZXMgZm9yIHJlZ3VsYXRvcnkgZGF0YWJhc2VcXFxcblxcXCIpO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiA3NDk6XFx0XFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3Qoc2hpcHBlZF9yZWdkYl9jZXJ0cyxcXG4gNzUwOlxcdFxcdFxcdFxcdFxcdCAgIHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuLFxcbiA3NTE6XFx0XFx0XFx0XFx0XFx0ICAgYnVpbHRpbl9yZWdkYl9rZXlzKTtcXG4gNzUyOlxcdCNlbmRpZlxcbiA3NTM6XFx0I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG4gNzU0OlxcdFxcdGlmIChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSWzBdICE9ICdcXFxcMCcpXFxuIDc1NTpcXHRcXHRcXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChleHRyYV9yZWdkYl9jZXJ0cyxcXG4gNzU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dHJhX3JlZ2RiX2NlcnRzX2xlbixcXG4gNzU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGJ1aWx0aW5fcmVnZGJfa2V5cyk7XFxuIDc1ODpcXHQjZW5kaWZcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdE1PRFVMRV9GSVJNV0FSRShcXFwicmVndWxhdG9yeS5kYi5wN3NcXFwiKTtcXG4gNzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OTowMi40MDk2MjAwMzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MDk0MDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWlzc2luZyBQcmVwcm9jZXNzb3IgRGlyZWN0aXZlOiBBIFF1aWNrIENvbmNlcm4qKlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJ20gc2Nhbm5pbmcgdGhyb3VnaCB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGUgYHJlZ2RiYCBhbmQgSSBjYW4ndCBpbW1lZGlhdGVseSBzZWUgdGhlIGAjaWZkZWZgIGJsb2NrIGd1YXJkaW5nIHRoZSB1c2Ugb2YgYHJlZ2RiX2hhc192YWxpZF9zaWduYXR1cmVgLiBUaGF0J3MgYSBiaXQgb2YgYSByZWQgZmxhZy4gSSBhc3N1bWVkIGl0IHdvdWxkIGJlIHRoZXJlIGdpdmVuIGl0cyBjb25kaXRpb25hbCBuYXR1cmUsIGFuZCB0aGUgY29tcGxleGl0eSBvZiBpdHMgdW5kZXJseWluZyBsb2dpYy4gSXMgaXQgbWlzc2luZywgb3IgYW0gSSBqdXN0IG1pc3NpbmcgaXQ/XG5cbklzIHRoZSBzeW1ib2wgZGVmaW5lZCBlbHNld2hlcmUsIGluIGEgaGVhZGVyIEkgaGF2ZW4ndCBpbmNsdWRlZCB5ZXQ/IE9yLCBtb3JlIGNvbmNlcm5pbmdseSwgaXMgaXQgYmVpbmcgY29tcGlsZWQgaW4gdW5jb25kaXRpb25hbGx5LCB3aGVuIHBlcmhhcHMgaXQgKnNob3VsZG4ndCogYmU/IFRoYXQgY291bGQgaW50cm9kdWNlIHNvbWUgc3VidGxlIGJ1Z3MgaWYgdGhpcyBzaWduYXR1cmUgY2hlY2sgaXNuJ3QgY29uc2lzdGVudGx5IGVuYWJsZWQgYWNyb3NzIGFsbCBidWlsZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSBob3cgdGhpcyBzaWduYXR1cmUgdmFsaWRhdGlvbiBpcyBjb250cm9sbGVkLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBnZXQgdGhpcyBzb3J0ZWQgb3V0IGJlZm9yZSBpdCBjb21lcyBiYWNrIHRvIGJpdGUgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OTowNi4wMDA1NjM2MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDU6XFx0XFx0LyogbWFrZSBzdXJlIHdlIGNhbiByZWFkIGxlbi9uX3J1bGVzICovXFxuIDcwNjpcXHRcXHRpZiAoKHU4ICopY29sbCArIG9mZnNldG9mZW5kKHR5cGVvZigqY29sbCksIG5fcnVsZXMpIFxcdTAwM2UgZGF0YSArIHNpemUpXFxuIDcwNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdC8qIG1ha2Ugc3VyZSBiYXNlIHN0cnVjdCBhbmQgYWxsIHJ1bGVzIGZpdCAqL1xcbiA3MTA6XFx0XFx0aWYgKCh1OCAqKWNvbGwgKyBBTElHTihjb2xsLVxcdTAwM2VsZW4sIDIpICtcXG4gNzExOlxcdFxcdCAgICAoY29sbC1cXHUwMDNlbl9ydWxlcyAqIDIpIFxcdTAwM2UgZGF0YSArIHNpemUpXFxuIDcxMjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcxMzpcXHRcXG4gNzE0OlxcdFxcdC8qIG1hbmRhdG9yeSBmaWVsZHMgbXVzdCBleGlzdCAqL1xcbiA3MTU6XFx0XFx0aWYgKGNvbGwtXFx1MDAzZWxlbiBcXHUwMDNjIG9mZnNldG9mZW5kKHN0cnVjdCBmd2RiX2NvbGxlY3Rpb24sIGRmc19yZWdpb24pKVxcbiA3MTY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRydWxlc19wdHIgPSAodm9pZCAqKSgodTggKiljb2xsICsgQUxJR04oY29sbC1cXHUwMDNlbGVuLCAyKSk7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb2xsLVxcdTAwM2VuX3J1bGVzOyBpKyspIHtcXG4gNzIxOlxcdFxcdFxcdHUxNiBydWxlX3B0ciA9IGJlMTZfdG9fY3B1KHJ1bGVzX3B0cltpXSk7XFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdFxcdGlmICghdmFsaWRfcnVsZShkYXRhLCBzaXplLCBydWxlX3B0cikpXFxuIDcyNDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDcyNTpcXHRcXHR9XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdHJldHVybiB0cnVlO1xcbiA3Mjg6XFx0fVxcbiA3Mjk6XFx0XFxuIDczMDpcXHQjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxuIDczMTpcXHQjaW5jbHVkZSBcXHUwMDNja2V5cy9hc3ltbWV0cmljLXR5cGUuaFxcdTAwM2VcXG4gNzMyOlxcdFxcbiA3MzM6XFx0c3RhdGljIHN0cnVjdCBrZXkgKmJ1aWx0aW5fcmVnZGJfa2V5cztcXG4gNzM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OTowNi4wMDA4NjUxNDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NDMzMzg0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgY2ZnODAyMTEgUmVndWxhdG9yeSBEYXRhYmFzZSBMb2FkaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgdG8gdGhlIHJlZ3VsYXRvcnkgZGF0YWJhc2UgbG9hZGluZyBpbiBgY2ZnODAyMTFgIGFuZCBoYXZlIGEgY2xlYXIgc3RyYXRlZ3kuICBUaGUga2V5IGlzIHRvIHRhcmdldCBgcmVnZGJfbG9hZGAgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgc2luY2UgdGhlIGZpcm13YXJlIGxvYWRpbmcgbG9naWMgaGFzIGJlZW4gdXBkYXRlZCBhbmQgdGhlcmUncyBhIG5ldyBgcmVnZGJfbG9hZGAgZnVuY3Rpb24uICBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgY2FuIGhpdCBhbGwgdGhlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC5cblxuVGhlIGNvcmUgb2YgbXkgY29uY2VybiByZXZvbHZlcyBhcm91bmQgYENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAuIElmIHRoYXQncyBlbmFibGVkLCB0aGVuIGEgc2lnbmF0dXJlIGNoZWNrIGhhcHBlbnMuIElmIGl0J3MgKm5vdCogZW5hYmxlZCwgb3IgdGhlIHNpZ25hdHVyZSdzIHZhbGlkLCB0aGVuIGl0IHNraXBzIHRoZSBzaWduYXR1cmUgY2hlY2sgZW50aXJlbHkuIEJlY2F1c2Ugc3l6a2FsbGVyIGNhbiBmZWVkIGluIGFyYml0cmFyeSBmaXJtd2FyZSwgYSBmYWlsZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiB3aWxsIGJhaWwgb3V0IG9mIHRoZSBsb2FkaW5nIHByb2Nlc3MgcHJlbWF0dXJlbHkuICBUaGVyZWZvcmUsIEkgd2FudCB0byBhdm9pZCBkZWFsaW5nIHdpdGggc2lnbmVkIGRhdGFiYXNlcyBmb3IgZnV6emluZy5cblxuR29vZCBuZXdzOiB0aGUgZGVmYXVsdCBmb3IgYENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQmAgaW4gYG5ldC93aXJlbGVzcy9LY29uZmlnYCBpcyBgZmFsc2VgLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiAgSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHByb3ZpZGluZyBhIHZhbGlkIHNpZ25hdHVyZSBvciBkaXNhYmxpbmcgaXQuXG5cbk15IHN0cmF0ZWd5IGlzIHRvIGVuYWJsZSBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBUaGUgYG1hYzgwMjExX2h3c2ltYCB3aWxsIGdpdmUgbWUgYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2UgdG8gaW50ZXJhY3Qgd2l0aC5cblxuSSd2ZSB2ZXJpZmllZCB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIGB3aXBoeV9yZWd1bGF0b3J5X3JlZ2lzdGVyYCBpcyByZWFjaGFibGUgdGhyb3VnaCBgd2lwaHlfcmVnaXN0ZXJgLCBgcmVnX3JlbG9hZF9yZWdkYmAgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rLCBgcXVlcnlfcmVnZGJfZmlsZWAgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYHJlZ19xdWVyeV9kYXRhYmFzZWAsIGFuZCBgcmVnZGJfZndfY2JfcmVzdG9yZWAgaXMgYSBmaXJtd2FyZSBjYWxsYmFjay4gYHJlZ2RiX2xvYWRgIGl0c2VsZiB0aWVzIHRoZW0gYWxsIHRvZ2V0aGVyLlxuXG5JJ3ZlIG1hZGUgc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGNhbiBoaXQgYWxsIG9mIHRoZSBpbXBvcnRhbnQgYXJlYXMgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBvdGhlciBmdW5jdGlvbiBjYWxscyB3aWxsIGJlIG1vZGlmaWVkLCBzbyB0aGVzZSB3aWxsIGJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uXG5cblNvLCBoZXJlJ3MgdGhlIGZpbmFsIHBsYW4uICBXZSBzaG91bGQgZnV6eiB0aGUgZm9sbG93aW5nOlxuXG4qKldvcnRoRnV6emluZzogdHJ1ZSoqXG5cbioqRm9jdXNTeW1ib2xzOioqXG5cbiogICBgcmVnZGJfbG9hZGBcbiogICBgcmVnZGJfZndfY2JfcmVzdG9yZWBcbiogICBgcXVlcnlfcmVnZGJfZmlsZWBcbiogICBgcmVnX3JlbG9hZF9yZWdkYmBcbiogICBgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcmBcblxuKipFbmFibGVDb25maWdzOioqXG5cbiogICBgQ0ZHODAyMTFgXG4qICAgYE1BQzgwMjExX0hXU0lNYFxuXG5UaGUgcmF0aW9uYWxlIGlzIGNsZWFyLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGZvciB0aGUgcmVndWxhdG9yeSBkYXRhYmFzZS4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBwYXRocyB2aWEgc29mdHdhcmUgZW11bGF0ZWQgZGV2aWNlcyBhbmQgbmV0bGluay4gVGhlIGZ1enppbmcgZWZmb3J0cyBuZWVkIHRvIGJlIGNlbnRlcmVkIG9uIHRoZXNlIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1NSwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNjo1OToxNi41NDQyMDcyNzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc0NDE2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2RiX2xvYWRcIixcbiAgICBcInJlZ2RiX2Z3X2NiX3Jlc3RvcmVcIixcbiAgICBcInF1ZXJ5X3JlZ2RiX2ZpbGVcIixcbiAgICBcInJlZ19yZWxvYWRfcmVnZGJcIixcbiAgICBcIndpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2RiX2xvYWRcIixcbiAgICBcInJlZ2RiX2Z3X2NiX3Jlc3RvcmVcIixcbiAgICBcInF1ZXJ5X3JlZ2RiX2ZpbGVcIixcbiAgICBcInJlZ19yZWxvYWRfcmVnZGJcIixcbiAgICBcIndpcGh5X3JlZ3VsYXRvcnlfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGxvYWRpbmcgdGhlIGByZWd1bGF0b3J5LmRiYCBmaXJtd2FyZSBpbiB0aGUgY2ZnODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByZWdkYl9sb2FkYCBmdW5jdGlvbiBhbmQgY2hhbmdlcyBob3cgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nIHBhdGhzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgZHVyaW5nIHdpcGh5IHJlZ2lzdHJhdGlvbiBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG5ldGxpbmsgaW50ZXJmYWNlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZpcm13YXJlIGxvYWRpbmcgYW5kIHJlZ3VsYXRvcnkgcmVnaXN0cmF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowncqhm[1] Phase: Succeeded StartedAt: 2026-06-26 16:59:27 +0000 UTC FinishedAt: 2026-06-26 16:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 16:59:27 +0000 UTC FinishedAt: 2026-06-26 16:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2] Phase: Succeeded StartedAt: 2026-06-26 16:59:27 +0000 UTC FinishedAt: 2026-06-26 21:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 16:59:27 +0000 UTC FinishedAt: 2026-06-26 21:12:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 16:59:27 +0000 UTC FinishedAt: 2026-06-26 16:59:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 16:59:27 +0000 UTC FinishedAt: 2026-06-26 16:59:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowncqhm/series-workflowncqhm-convert-artifact-330984368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 16:59:37 +0000 UTC FinishedAt: 2026-06-26 17:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 16:59:37 +0000 UTC FinishedAt: 2026-06-26 17:30:56 +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:*508f4847-eb56-477c-8f90-64e34e19c9b0,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-workflowncqhm/series-workflowncqhm-convert-artifact-330984368/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": "3822f7df-f418-4c2e-bb51-75a3efa5438d", "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-workflowncqhm/series-workflowncqhm-build-action-2755287222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 16:59:37 +0000 UTC FinishedAt: 2026-06-26 17:30:46 +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:*508f4847-eb56-477c-8f90-64e34e19c9b0,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-workflowncqhm/series-workflowncqhm-convert-artifact-330984368/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": "3822f7df-f418-4c2e-bb51-75a3efa5438d", "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-workflowncqhm/series-workflowncqhm-build-action-2755287222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 17:30:56 +0000 UTC FinishedAt: 2026-06-26 17:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 17:30:56 +0000 UTC FinishedAt: 2026-06-26 17:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 17:30:56 +0000 UTC FinishedAt: 2026-06-26 17:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 17:30:56 +0000 UTC FinishedAt: 2026-06-26 17:31:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowncqhm/series-workflowncqhm-convert-artifact-1987581335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 17:31:17 +0000 UTC FinishedAt: 2026-06-26 17:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 17:31:17 +0000 UTC FinishedAt: 2026-06-26 17:33:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3822f7df-f418-4c2e-bb51-75a3efa5438d,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-workflowncqhm/series-workflowncqhm-build-action-2755287222/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-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 17:33:28 +0000 UTC FinishedAt: 2026-06-26 17:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 17:33:28 +0000 UTC FinishedAt: 2026-06-26 17:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 17:33:28 +0000 UTC FinishedAt: 2026-06-26 18:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 17:33:28 +0000 UTC FinishedAt: 2026-06-26 18:07:23 +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:*508f4847-eb56-477c-8f90-64e34e19c9b0,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-workflowncqhm/series-workflowncqhm-convert-artifact-1987581335/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": "b7b08781-554f-46ef-8474-e1fc81ed7112", "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-workflowncqhm/series-workflowncqhm-build-action-3328396251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 17:33:28 +0000 UTC FinishedAt: 2026-06-26 18:06:44 +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:*508f4847-eb56-477c-8f90-64e34e19c9b0,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-workflowncqhm/series-workflowncqhm-convert-artifact-1987581335/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": "b7b08781-554f-46ef-8474-e1fc81ed7112", "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-workflowncqhm/series-workflowncqhm-build-action-3328396251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 18:07:23 +0000 UTC FinishedAt: 2026-06-26 18:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 18:07:23 +0000 UTC FinishedAt: 2026-06-26 18:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 18:07:23 +0000 UTC FinishedAt: 2026-06-26 18:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 18:07:23 +0000 UTC FinishedAt: 2026-06-26 18:10:14 +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:*b7b08781-554f-46ef-8474-e1fc81ed7112,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-workflowncqhm/series-workflowncqhm-build-action-3328396251/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-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 21:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 21:12:02 +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":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"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:*3822f7df-f418-4c2e-bb51-75a3efa5438d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7b08781-554f-46ef-8474-e1fc81ed7112,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-workflowncqhm/series-workflowncqhm-build-action-2755287222/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-workflowncqhm/series-workflowncqhm-build-action-3328396251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 18:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 18:10:44 +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":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"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-workflowncqhm/series-workflowncqhm-convert-artifact-2281652048/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 18:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 18:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 18:10:24 +0000 UTC FinishedAt: 2026-06-26 18:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 18:10:48 +0000 UTC FinishedAt: 2026-06-26 21:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowncqhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["regdb_load","regdb_fw_cb_restore","query_regdb_file","reg_reload_regdb","wiphy_regulatory_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"972c4dd19cb92e03d75b66c426cfade07582a1ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211_HWSIM"],"series_id":"34579119-2aa2-4230-8c8a-d63da7df7146","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 18:10:48 +0000 UTC FinishedAt: 2026-06-26 21:11:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3822f7df-f418-4c2e-bb51-75a3efa5438d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7b08781-554f-46ef-8474-e1fc81ed7112,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-workflowncqhm/series-workflowncqhm-build-action-2755287222/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-workflowncqhm/series-workflowncqhm-build-action-3328396251/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-workflowncqhm/series-workflowncqhm-convert-artifact-2281652048/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,}