Name: series-workflowdgffj Phase: Succeeded StartedAt: 2026-07-24 02:31:26 +0000 UTC FinishedAt: 2026-07-24 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[0] Phase: Succeeded StartedAt: 2026-07-24 02:31:26 +0000 UTC FinishedAt: 2026-07-24 02:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 02:31:26 +0000 UTC FinishedAt: 2026-07-24 02:46:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP" ], "series_id": "4a906561-2951-4411-98de-bbcf9d2f8ea7" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "sev_dbg_crypt_slow_alloc", "sev_dbg_decrypt_slow", "sev_dbg_encrypt_slow", "sev_dbg_crypt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2MmIzM0OywKICAgICYjMzQ7c2V2X2RiZ19kZWNyeXB0X3Nsb3cmIzM0OywKICAgICYjMzQ7c2V2X2RiZ19lbmNyeXB0X3Nsb3cmIzM0OywKICAgICYjMzQ7c2V2X2RiZ19jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZDEzZGRmYzQ5ODM3ZTJmNGNjZDM2YTZkNDgxZDkxZjEwMzQ2ZmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDI6NDQ6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi5lMzczM2VkOWQ1ODg2YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDYgJiM0MzsxMjgwLDE3IEBAIHN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbiBcdGlmIChXQVJOX09OX09OQ0UoKCpwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKCpwYSAmIzQzOyAqbnJfYnl0ZXMgLSAxKSBcdTAwMjYgUEFHRV9NQVNLKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgU05QIGlzIGVuYWJsZWQsIGkuZS4gdGhlIFJNUCBpcyBhY3RpdmUsIGFsbG9jYXRlIGEgZnVsbCBwYWdlIHRvXG4mIzQzO1x0ICogcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIHRoZSBwYWdlLiAgQXMgcmVxdWlyZWQgYnkgZmlybXdhcmUsXG4mIzQzO1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuJiM0MztcdCAqIHRoZSBwYWdlIHRvIEZpcm13YXJlIHdoaWxlIHRoZSB7REUsRU59Q1JZUFQgb3BlcmF0aW9uIGlzIGluLXByb2dyZXNzLFxuJiM0MztcdCAqIGFuZCBzbyBjb25jdXJyZW50IHNvZnR3YXJlIGFjY2Vzc2VzIHRvIHRoZSBwYWdlIHdpbGwgZW5jb3VudGVyXG4mIzQzO1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuJiM0MztcdFx0cmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4gXHRyZXR1cm4ga21hbGxvYygqbnJfYnl0ZXMsIEdGUF9LRVJORUwpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9kYmdfY3J5cHRfc2xvd19hbGxvYyYjMzQ7LAogICAgJiMzNDtzZXZfZGJnX2RlY3J5cHRfc2xvdyYjMzQ7LAogICAgJiMzNDtzZXZfZGJnX2VuY3J5cHRfc2xvdyYjMzQ7LAogICAgJiMzNDtzZXZfZGJnX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgS1ZNIFNFViBkZWJ1Z2dpbmcgY29tbWFuZHMgKEtWTV9TRVZfREJHX0RFQ1JZUFQsIEtWTV9TRVZfREJHX0VOQ1JZUFQpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEtWTV9NRU1PUllfRU5DUllQVF9PUCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQxM2RkZmM0OTgzN2UyZjRjY2QzNmE2ZDQ4MWQ5MWYxMDM0NmZiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDAyOjQ0OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNzRmYjE1NTUxZTgzZmEuLmUzNzMzZWQ5ZDU4ODZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTEyODAsNiAmIzQzOzEyODAsMTcgQEAgc3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLAogCWlmIChXQVJOX09OX09OQ0UoKCpwYSAmYW1wOyBQQUdFX01BU0spICE9ICgoKnBhICYjNDM7ICpucl9ieXRlcyAtIDEpICZhbXA7IFBBR0VfTUFTSykpKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiBTTlAgaXMgZW5hYmxlZCwgaS5lLiB0aGUgUk1QIGlzIGFjdGl2ZSwgYWxsb2NhdGUgYSBmdWxsIHBhZ2UgdG8KJiM0MzsJICogcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIHRoZSBwYWdlLiAgQXMgcmVxdWlyZWQgYnkgZmlybXdhcmUsCiYjNDM7CSAqIHRoZSBQU1AgZHJpdmVyIHVwZGF0ZXMgdGhlIFJNUCB0byB0ZW1wb3JhcmlseSB0cmFuc2ZlciBvd25lcnNoaXAgb2YKJiM0MzsJICogdGhlIHBhZ2UgdG8gRmlybXdhcmUgd2hpbGUgdGhlIHtERSxFTn1DUllQVCBvcGVyYXRpb24gaXMgaW4tcHJvZ3Jlc3MsCiYjNDM7CSAqIGFuZCBzbyBjb25jdXJyZW50IHNvZnR3YXJlIGFjY2Vzc2VzIHRvIHRoZSBwYWdlIHdpbGwgZW5jb3VudGVyCiYjNDM7CSAqIHNlZW1pbmdseSBzcHVyaW91cyBSTVAgI1BGIHZpb2xhdGlvbnMKJiM0MzsJICovCiYjNDM7CWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQomIzQzOwkJcmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsKIAlyZXR1cm4ga21hbGxvYygqbnJfYnl0ZXMsIEdGUF9LRVJORUwpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVk0gU0VWIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIGNvbmRpdGlvbmFsIGNoZWNrIGhlcmUsIHNwZWNpZmljYWxseSBgaWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpYC4gSWYgdGhhdCBjaGVjayBwYXNzZXMsIHdlJiMzOTtyZSBub3cgYWxsb2NhdGluZyBhIGZ1bGwgYFBBR0VfU0laRWAgd2l0aCBga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpYCByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQgYCpucl9ieXRlc2AgdXNpbmcgYGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKWAuIEkgbmVlZCB0byBkaWcgaW50byBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBTRVYtU05QIHN1cHBvcnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBhbGxvY2F0aW9uIHNpemUgY2hhbmdlIGlzIG5lY2Vzc2FyeSB3aGVuIFNOUCBpcyBlbmFibGVkLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IFdoYXQmIzM5O3MgaXQgYmVpbmcgdXNlZCBmb3I/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI0MD1zdGF0aWMgaW50IHNldl9pc3N1ZV9kYmdfY21kKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmNfcGEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjU2OnN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnBhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI5Nz1zdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzA2Olx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHNyY19wLCBzcmMsIGxlbiwgXHUwMDI2c3JjX3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDctXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMjI9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzMS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzMyOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzMtXHRpZiAoIWJ1ZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBLVk0gU0VWIERlYnVnZ2luZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLCB3aGljaCBJIGtub3cgaXMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gVGhvc2UgYXJlIHByZXR0eSBjbGVhcmx5IHJlbGF0ZWQgdG8gZGVidWdnaW5nIFNFViDigJMgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiDigJMgd2l0aGluIEtWTS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgd2hlcmUgdGhpcyBzdHVmZiBwbGF5czsgaW4gdGhpcyBjYXNlLCBJJiMzOTttIHRoaW5raW5nIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBZZXMsIFFFTVUgZG9lcyBzdXBwb3J0IFNFViBhbmQgdGhlIG5ld2VyIFNFVi1TTlAuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBTRVYgYW5kIFNFVi1TTlAgYXJlIGZ1bmRhbWVudGFsbHkgaGFyZHdhcmUgZmVhdHVyZXMuIFRoZXkmIzM5O3JlIHRpZWQgdG8gQU1EIEVQWUMgcHJvY2Vzc29ycy4gVGhpcyBsZWFkcyB0byB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb246IGNhbiB3ZSBlbXVsYXRlIG9yIGZ1enogdGhlc2UgaGFyZHdhcmUgYXNwZWN0cz8gVHlwaWNhbGx5IHdpdGggS1ZNIGZlYXR1cmVzLCB3ZSB1c2Ugc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGFuZCBgL2Rldi9rdm1gLiBTbywgY2FuIHdlIGFwcGx5IHRoZSB1c3VhbCBmdXp6aW5nIHRlY2huaXF1ZXMgaGVyZT8KCkZ1bmN0aW9uYWxseSwgdGhlIHBhdGNoIHNlZW1zIHNvdW5kLiBUaGUgbWFpbiBmb2N1cyBpcyBub3cgZmluZGluZyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHN1cHBvcnQgdGhlIGRlYnVnZ2luZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgU0VWIENvbmZpZ3VyYXRpb24gaW4gS1ZNIGZvciBBTUQgU3lzdGVtcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29uZmlnIG9wdGlvbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmUgYEtWTV9BTURgIGFuZCBgS1ZNX0FNRF9TRVZgLiBQcmV0dHkgc3RhbmRhcmQgc3R1ZmYuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcywgbmF0dXJhbGx5LCB3aXRoIGBLVk1fQU1EX1NFVmAuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBBTUQmIzM5O3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSB0ZWNobm9sb2d5IHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIE15IGludGVybmFsIGNoZWNrbGlzdCBpcyBhbHJlYWR5IHJ1bm5pbmcg4oCTIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24sIGd1ZXN0IGlzb2xhdGlvbiwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuIEkgd2FudCB0byBkaXZlIGludG8gKndoeSogd2UmIzM5O3JlIGNoZWNraW5nIHRoaXMgc3BlY2lmaWMgb3B0aW9uLiBBcmUgd2UgY29uZmlybWluZyBpdCYjMzk7cyBlbmFibGVkPyBEaXNhYmxlZD8gVHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IERlYnVnZ2luZyBhIFNFVi1yZWxhdGVkIGlzc3VlPyBNeSBuZXh0IHRob3VnaHQgaXMgbGlrZWx5IGdvaW5nIHRvIGludm9sdmUgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUsIG9yIG1heWJlIGV2ZW4gZGlnZ2luZyBpbnRvIHRoZSBjb2RlIHdoZXJlIHRoYXQgb3B0aW9uIGlzIHVzZWQgdG8gZ2V0IG1vcmUgY29udGV4dC4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFNFViBpcyBiZWluZyBoYW5kbGVkIGluIHRoaXMgc3BlY2lmaWMgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFzc2Vzc2luZyBTRVYgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBLVk0gc2V0dXAgYW5kIHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gSSBoYXZlIGlzLCBpcyBzaW1wbHkgZW5hYmxpbmcgYEtWTV9BTURfU0VWYCBzdWZmaWNpZW50LCBvciBhbSBJIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBtb3JlIG51YW5jZWQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApPyBXZSBhbGwga25vdyBTRVYgaXMgdGhlIHVtYnJlbGxhIHRlcm0sIGFuZCBTTlAgaXMgdGhlIGNyaXRpY2FsIHBhcnQgdGhhdCBwcm92aWRlcyB0aGUgc3Ryb25nZXN0IHNlY3VyaXR5IGd1YXJhbnRlZXMuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGgsICYjMzQ7SXMgdGhlIGRlZmF1bHQgU0VWIGNvbmZpZ3VyYXRpb24gcHJvdmlkaW5nIGZ1bGwgU05QIGZ1bmN0aW9uYWxpdHksIG9yIGlzIHRoZXJlIGEgc2VwYXJhdGUgc2V0IG9mIGtlcm5lbCBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQ/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgJiMzNDtzZXQgaXQgYW5kIGZvcmdldCBpdCYjMzQ7IHNpdHVhdGlvbiwgb3IgaWYgdGhlcmUgYXJlIGtub2Igc2V0dGluZ3MgdGhhdCBJIHNob3VsZCBhZGRyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NFVl9TTlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlcjoKCioqRGl2aW5nIGludG8gdGhlIHg4NiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3aWxsIGRpY3RhdGUgaG93IHRoZSBrZXJuZWwgYmVoYXZlcyBvbiB4ODYgcGxhdGZvcm1zLiBJJiMzOTttIGFudGljaXBhdGluZyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mg4oCTIHByb2Nlc3NvciBmZWF0dXJlcywgYm9vdCBvcHRpb25zLCBtZW1vcnkgbGF5b3V0IGNvbmZpZ3VyYXRpb25zIOKAkyB0aGUgbml0dHktZ3JpdHR5IHRoYXQgcmVhbGx5IGRlZmluZXMgYW4geDg2IGtlcm5lbCBidWlsZC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyAoYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nKSBhbnkga2VybmVsIGJlaGF2aW9yIHRoYXQmIzM5O3MgcGxhdGZvcm0gZGVwZW5kZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NFVl9TTlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIEtWTSBhbmQgQU1EIFNFViBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFRpbWUgdG8gemVybyBpbiBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgcGxhY2UgdG8gbG9vaywgbmF0dXJhbGx5LCBpcyB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZlYXR1cmUgdG9nZ2xlcyBsaXZlLCB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gZm9yIHg4NiBwcm9jZXNzb3JzIGFyZSBkZWZpbmVkLiBJIGFudGljaXBhdGUgZmluZGluZyBhIHJlbGV2YW50IG9wdGlvbiwgbGlrZWx5IG5hbWVkIHNvbWV0aGluZyBsaWtlIGBLVk1fQU1EX1NFVmAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgaXMgdGhlIGluZGljYXRvciBvZiB3aGV0aGVyIFNFViBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIEtWTSBrZXJuZWwgbW9kdWxlIG9yIG5vdC4gVW5kZXJzdGFuZGluZyB0aGlzIG9wdGlvbiBpcyBjcnVjaWFsIGJlZm9yZSBhdHRlbXB0aW5nIGFueSBkZXBsb3ltZW50IG9yIGRlYnVnZ2luZyB0aGF0IHV0aWxpemVzIEFNRCBTRVYgZmVhdHVyZXMuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhpcyBmZWF0dXJlIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBob3cgaXQmIzM5O3MgYWN0aXZhdGVkIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgdW5kZXJzdGFuZGluZyBpcyBmb3VuZGF0aW9uYWwgZm9yIGFueSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipDb25maWd1cmF0aW9uIEh1bnRpbmcgZm9yIEFNRC1TcGVjaWZpYyBLVk0gRmVhdHVyZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBLVk0gY29uZmlndXJhdGlvbnMg4oCTIGBLVk1fQU1EYCBhbmQgYEtWTV9BTURfU0VWYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgQU1EIHZpcnR1YWxpemF0aW9uLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGBDUllQVE9fREVWX1NQX1BTUGAgc2V0dGluZy4gSXQmIzM5O3MgcmVsYXRlZCB0byBzZWN1cml0eSBhbmQgQU1EIFBTUCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB0aGF0IGluIG15IGFzc2Vzc21lbnQuCgpJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIEFNRC1zcGVjaWZpYyBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSB1c2VkIGluIHRoZSBLZXJuZWwuIEkgc2VlIHRoZSBjb2RlIHVzaW5nIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSAqdGhhdCogb25lIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIGFuZCB3aGF0IGl0IGNvbnRyb2xzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0NfQVRUUl9IT1NUX1NFVl9TTlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby9jb3JlLmM9NzA9c3RhdGljIGJvb2wgbm9pbnN0ciBhbWRfY2NfcGxhdGZvcm1faGFzKGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTEwMy1cbmFyY2gveDg2L2NvY28vY29yZS5jOjEwNDpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDUtXHRcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTcwPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9jbGVhcihlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzItXHRzd2l0Y2ggKGF0dHIpIHtcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzQtXHRcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk0LVx0c3dpdGNoIChhdHRyKSB7XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxOTU6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVx0XHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAxO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MzU0PXN0YXRpYyB2b2lkIGJzcF9kZXRlcm1pbmVfc25wKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3MS1cdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzcyOlx0XHRcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cdFx0fSBlbHNlIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc0LVx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjM3NTpcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cdFx0fVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM6MTEyOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEyMzU9c3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjU4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI1OTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI2MC1cdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjU2PXN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5MTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkyLVx0XHRyZXR1cm4ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA1Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjAtXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzE2MTpcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTYyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkwNz1zdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTExLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTEyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTEzLVx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxMzA9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUxMzQ6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXHQgKi9cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmM6MTExOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cdFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jPTE5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2V2X2NvbmZpZyhjaGFyICpzdHIpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVx0XHRcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcdFx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMy1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEzNT1zdGF0aWMgdm9pZCBtZmRfcmVjb25maWd1cmUodm9pZCAqYXJnKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2LXtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEzNzpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzOC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE0Nj1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDktXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNTA6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTEtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNDg9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjUyLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjUzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjU0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NTYyPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU2My17XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1NjQ6XHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU2NS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzUyPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03NTYtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NTc6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03NTgtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTg3OD1pbnQgcHNtYXNoKHU2NCBwZm4pXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODgyLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6ODgzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODg0LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz05ODc9c3RhdGljIGludCBybXB1cGRhdGUodTY0IHBmbiwgc3RydWN0IHJtcF9zdGF0ZSAqc3RhdGUpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtOTkxLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6OTkyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtOTkzLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMDgwPXZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA4NS1cdCAqL1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTA4NjpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA4Ny1cdFx0d2JpbnZkKCk7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xMzU0PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxMzYzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzY0LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE5MDM9c3RhdGljIGludCBzZXZfZ2V0X2FwaV92ZXJzaW9uKHZvaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xOTEyLVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE5MTM6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkge1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xOTE0LVx0XHRyZXQgPSBzbnBfZ2V0X3BsYXRmb3JtX2RhdGEoc2V2LCBcdTAwMjZlcnJvcik7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yODMzPXU2NCBzZXZfZ2V0X3NucF9wb2xpY3lfYml0cyh2b2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjgzOC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjgzOTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjg0MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTMzNzI9c3RhdGljIF9faW5pdCB2b2lkIGlvbW11X3NucF9lbmFibGUodm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM3NC0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM3NTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzc2LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MDgtZGlzYWJsZV9zbnA6XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQwOTpcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDEwLSNlbmRpZlxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNTM0PXN0YXRpYyBpbnQgX19pbml0IGlvbW11X2dvX3RvX3N0YXRlKGVudW0gaW9tbXVfaW5pdF9zdGF0ZSBzdGF0ZSlcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU1NC1cdCAqL1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1NTU6XHRpZiAocmV0IFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1NTYtXHQgICAgIVdBUk5fT05fT05DRShhbWRfaW9tbXVfc25wX2VuKSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNTU3Olx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU1OC1cbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzY2MT12b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM2ODAtZGlzYWJsZV9zbnA6XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzY4MTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM2ODI6XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNjgzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg9MjI9ZW51bSBjY19hdHRyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTItXHQvKipcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5MzpcdCAqIEBDQ19BVFRSX0hPU1RfU0VWX1NOUDogQU1EIFNOUCBlbmFibGVkIG9uIHRoZSBob3N0LlxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk0LVx0ICpcbi0tXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTctXHQgKi9cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5ODpcdENDX0FUVFJfSE9TVF9TRVZfU05QLFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTY1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWIERlYnVnIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBmbGFnZ2VkIGluIGBpbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmhgLiBJdCYjMzk7cyBlbmFibGVkIGluIGBhbWQuY2AgaWYgYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIHdvcmtzLiBTdGFuZGFyZCBoYXJkd2FyZSBmZWF0dXJlIGNoZWNrLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIHRoZXJlLiBCdXQsIEkgc2VlIHRoZXkmIzM5O3JlIGVuYWJsaW5nIGBLVk1fQU1EX1NFVmAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAgdG8gZm9yY2UgY29tcGlsZSBzdXBwb3J0LCByZWdhcmRsZXNzIG9mIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW5jZS4gU21hcnQuCgpOb3csIHRoZSBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHRoYXTigJlzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgYW5kIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIEFoLCByaWdodCwgdGhvc2UgaW4gdHVybiBhcmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBgc2V2X2lzc3VlX2RiZ19jbWRgIGZsb3c6IGBzZXZfaXNzdWVfZGJnX2NtZGAgLSZndDsgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBvciBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnQsIHNvIEkgc2hvdWxkIHNlZSB3aGVyZSBgc2V2X2lzc3VlX2RiZ19jbWRgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGRlYnVnIGNvZGUgbWlnaHQgYmUgdHJpZ2dlcmVkLiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X2lzc3VlX2RiZ19jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTIxND1zdGF0aWMgaW50IHNldl9ndWVzdF9zdGF0dXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjM5LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjQwOnN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI0MS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BhLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwOS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxMDpcdHIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIHNyY19wYSwgX19zbWVfc2V0KF9fcGEoYnVmKSksXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMTEtXHRcdFx0ICAgICAgbnJfYnl0ZXMsIEtWTV9TRVZfREJHX0RFQ1JZUFQsIGVycik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzIyPXN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzMzY6XHRyID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLCBkc3RfcGEsIF9fc21lX3NldChfX3BhKGJ1ZikpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzM3LVx0XHRcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19ERUNSWVBULCBlcnIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM0Ny1cdGVsc2VcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM0ODpcdFx0ciA9IHNldl9pc3N1ZV9kYmdfY21kKGt2bSwgX19zbWVfc2V0KF9fcGEoYnVmKSksIGRzdF9wYSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM0OS1cdFx0XHRcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19FTkNSWVBULCBlcnIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM1NT1zdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDEwLVx0XHRpZiAoSVNfQUxJR05FRChzcmMsIDE2KSBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChkc3QsIDE2KSBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChsZW4sIDE2KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQxMTpcdFx0XHRyZXQgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0MTItXHRcdFx0XHRcdFx0X19zbWVfcGFnZV9wYShzcmNfcCkgJiM0Mzsgc19vZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU0VWIERlYnVnIENyeXB0b2dyYXBoeSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuIEl0IHNlZW1zIGBzZXZfZGJnX2NyeXB0YCBpcyB0aGUgY29yZSBjcnlwdG9ncmFwaGljIGZ1bmN0aW9uIGhlcmUuIEl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRgIGFuZCBgc2V2X2RiZ19lbmNyeXB0YCwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGZyb20gYHNldl9tZW1fZW5jX2lvY3RsYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24uIFNvLCBgc2V2X2RiZ19jcnlwdGAgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgY3J5cHRvZ3JhcGh5LCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkaW5nIHRoZSBzcGVjaWZpYyBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gY29udGV4dC4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXNseSB0byBkaXZlIGludG8gYHNldl9kYmdfY3J5cHRgIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9kYmdfY3J5cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI0MD1zdGF0aWMgaW50IHNldl9pc3N1ZV9kYmdfY21kKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmNfcGEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjU2OnN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnBhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI5Nz1zdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzA2Olx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHNyY19wLCBzcmMsIGxlbiwgXHUwMDI2c3JjX3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDctXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMjI9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzMS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzMyOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzMtXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNTU6c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzU2LVx0XHRcdCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzND1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2OTItXHRjYXNlIEtWTV9TRVZfREJHX0VOQ1JZUFQ6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2OTM6XHRcdHIgPSBzZXZfZGJnX2NyeXB0KGt2bSwgXHUwMDI2c2V2X2NtZCwgc2V2X2NtZC5pZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2OTQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQxNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFViBEZWJ1ZyBFbmNyeXB0aW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlLiBJdCYjMzk7cyBoYW5kbGluZyB0aGUgYEtWTV9TRVZfREJHX0RFQ1JZUFRgIGFuZCBgS1ZNX1NFVl9EQkdfRU5DUllQVGAgaW9jdGxzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgaG93IHVzZXJzcGFjZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGVzZSBpb2N0bHMgdGhlbiBmdW5uZWwgaW50byBgc2V2X2RiZ19jcnlwdGAsIGFuZCB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb25zIGFyZSBlaXRoZXIgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBvciBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLCBib3RoIG9mIHdoaWNoIHVzZSBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHRoZSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuCgpTbywgd2hlbiBJIHRoaW5rIGFib3V0IHdoZXJlIHRvIGZvY3VzIG15IGFuYWx5c2lzLCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCwgYHNldl9kYmdfZGVjcnlwdF9zbG93YCwgYHNldl9kYmdfZW5jcnlwdF9zbG93YCwgYW5kIGBzZXZfZGJnX2NyeXB0YCBpbW1lZGlhdGVseSBqdW1wIG91dCBhcyB0aGUgaGlnaC12YWx1ZSB0YXJnZXRzLiBUaGVzZSBhcmUgdGhlIHN5bWJvbHMgSSBzaG91bGQgYmUgZGlnZ2luZyBpbnRvLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBoYXZlIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIEFueSBvdGhlciByZWxldmFudCBjb25maWc/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURfU0VWYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCYjMzk7cyBjcnVjaWFsIHRvIHRyaWdnZXJpbmcgdGhpcyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDYyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIGEgYm9vbGVhbiwgZ29vZCB0byBrbm93LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM6IGBLVk1fQU1EYCBhbmQgYEtWTV9BTURfU0VWYCBhcmUgYWxzbyBpbiB0aGUgbWl4LiBUaGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgcGVydGluZW50IGFyZSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBXYWl0IGEgc2Vjb25kLCB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBmbGFnIGlzIGdvaW5nIHRvIGluZGljYXRlIGlmIFNOUCBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBUaGlzIGlzIGltcG9ydGFudC4gQ2FuIHdlIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBldmVuIGlmIHdlICpkb24mIzM5O3QqIGhhdmUgcmVhbCBTTlAgaGFyZHdhcmU/CgpUaGUgY29kZSBzZWVtcyB0byBhZGQgYSBjaGVjayBmb3IgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGFuZCB0aGVuIGFsbG9jYXRlcyBhIGZ1bGwgcGFnZSBpZiB0aGF0IGNoZWNrIGlzIHBvc2l0aXZlLiBJZiB0aGUgZnV6emVyIGlzIHJ1bm5pbmcgb24gbm9uLVNOUCBoYXJkd2FyZSwgdGhhdCBjaGVjayB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlLCBhbmQgdGhlIGNvZGUgd2lsbCBqdXN0IGdvIGJhY2sgdG8gdXNpbmcgYGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtgIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4gQnV0LCB0aGlzIHBhdGNoICpkb2VzKiBtYWtlIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgY2hhbmdlIGlzIHJlYWNoYWJsZS4KClNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgaGl0IHRoYXQgbmV3IGNvZGUgcGF0aCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVT8gQW5kIHRoZSBhbnN3ZXIsIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgaXMgeWVzLCBhcyBsb25nIGFzIHRoZSBlbnZpcm9ubWVudCBwcm92aWRlcyBzb21lIGxldmVsIG9mIFNFVi1TTlAgZW11bGF0aW9uIG9yIHdlIHJ1biBpdCBvbiBhY3R1YWwgU0VWLVNOUCBoYXJkd2FyZS4gUUVNVSBkb2VzIHN1cHBvcnQgU0VWLVNOUC4gVGhhdCBtZWFucyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkp1c3QgdG8gYmUgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgcmVjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzLiBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX1NQX1BTUGAgLSBHb3QgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgQU1EX01FTV9FTkNSWVBUYCBpc24mIzM5O3QgYSBmYWN0b3IgaGVyZSwganVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9NRU1fRU5DUllQVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE0OTY9Y29uZmlnIFg4Nl9NRU1fRU5DUllQVFxuLS1cbmFyY2gveDg2L0tjb25maWctMTUwMC1cbmFyY2gveDg2L0tjb25maWc6MTUwMTpjb25maWcgQU1EX01FTV9FTkNSWVBUXG5hcmNoL3g4Ni9LY29uZmlnLTE1MDItXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gKFNNRSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEFNRCBNZW1vcnkgRW5jcnlwdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBBTURfTUVNX0VOQ1JZUFRgIHRoaW5nLiBGaXJzdCwgSSBuZWVkIHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IHNvbWUgcHJldHR5IHRpZ2h0IGludGVncmF0aW9uIHdpdGggdGhlIG1lbW9yeSBjb250cm9sbGVyLCBvYnZpb3VzbHkuIFRoYXQgaW1wbGllcyB0aGUgbG93LWxldmVsIGZpcm13YXJlIGFuZCBwb3NzaWJseSB0aGUgbWljcm9jb2RlIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbC4gV2UmIzM5O3JlIGdvaW5nIHRvIGJlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBrZXlzIGFyZSBwcm92aXNpb25lZCwgbWFuYWdlZCwgYW5kIGhvdyB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGFjdHVhbGx5IG9jY3Vycy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBiaXQgZmxpcDsgdGhlcmUgaGFzIHRvIGJlIGFuIGFyY2hpdGVjdHVyZS1sZXZlbCBjb21taXRtZW50LgoKSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UuIFdoYXQgb3ZlcmhlYWQgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFdpbGwgdGhpcyBiZSB0cmFuc3BhcmVudCBhdCB0aGUgT1MgbGV2ZWwsIG9yIGFyZSB0aGVyZSBnb2luZyB0byBiZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1bml0IChNTVUpIG9yIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdHJhbnNsYXRpb24gcHJvY2Vzcz8gQXJlIHRoZXJlIG5ldyBUTEIgaW1wbGljYXRpb25zIHRvIGtlZXAgdHJhY2sgb2YgZW5jcnlwdGlvbiBrZXlzPyBBbHNvLCBkb2VzIGl0IGFmZmVjdCB0aGUgY2FjaGUgaGllcmFyY2h5PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHNpZGUtY2hhbm5lbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBob3cgdGhleSYjMzk7dmUgYWRkcmVzc2VkIHRoZW0uIERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHZlY3RvcnMsIGZvciBpbnN0YW5jZSwgaW4gdGhlIGNvbnRleHQgb2YgRE1BPyBXaGF0IGFyZSB0aGUga2V5IHJvdGF0aW9uIG1lY2hhbmlzbXM/IEFyZSB0aGV5IHJvYnVzdD8gV2hhdCBhYm91dCB0aGUgc29mdHdhcmUgaW50ZXJmYWNlLCB0aGUgQVBJcywgbGlicmFyaWVzPyBXaGF0JiMzOTtzIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sLCBpcyBpdCBhdCB0aGUgcHJvY2VzcyBsZXZlbCBvciBzb21ldGhpbmcgYnJvYWRlcj8gQW55IGhvb2tzPyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBzZWN1cml0eSByZXF1aXJlbWVudHMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgZ3JhcGggdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDE6XHRjb25maWcgQU1EX01FTV9FTkNSWVBUXG4xNTAyOlx0XHRib29sIFwmIzM0O0FNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gKFNNRSkgc3VwcG9ydFwmIzM0O1xuMTUwMzpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4xNTA0Olx0XHRkZXBlbmRzIG9uIEVGSV9TVFVCXG4xNTA1Olx0XHRzZWxlY3QgRE1BX0NPSEVSRU5UX1BPT0xcbjE1MDY6XHRcdHNlbGVjdCBBUkNIX1VTRV9NRU1SRU1BUF9QUk9UXG4xNTA3Olx0XHRzZWxlY3QgSU5TVFJVQ1RJT05fREVDT0RFUlxuMTUwODpcdFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4xNTA5Olx0XHRzZWxlY3QgWDg2X01FTV9FTkNSWVBUXG4xNTEwOlx0XHRzZWxlY3QgVU5BQ0NFUFRFRF9NRU1PUllcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0ODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOgoKKipLVk1fQU1EX1NFViBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiBzb21ldGhpbmcgaGVyZS4gSSYjMzk7bSByZXZpc2l0aW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgS1ZNX0FNRF9TRVZgIGFuZCBgQU1EX01FTV9FTkNSWVBUYC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBhbmQgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCAqc2hvdWxkbiYjMzk7dCogcmVseSBvbiBgQU1EX01FTV9FTkNSWVBUYC4gSnVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGNyaXRpY2FsIGFzc3VtcHRpb24uIE5lZWQgdG8gZW5zdXJlIHRoZSBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlIGlzIHNvdW5kLiBTbywgSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYEtWTV9BTURfU0VWYCBjb25maWd1cmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbi4gR290dGEgYmUgcHJlY2lzZSBoZXJlLCBubyByb29tIGZvciBhbWJpZ3VpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgU0VWIGZlYXR1cmUgaXMgaW5kZXBlbmRlbnQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1lbW9yeSBlbmNyeXB0aW9uIHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU2Olx0Y29uZmlnIEtWTV9BTURfU0VWXG4gMTU3Olx0XHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiAxNTg6XHRcdGRlZmF1bHQgeVxuIDE1OTpcdFx0ZGVwZW5kcyBvbiBLVk1fQU1EIFx1MDAyNlx1MDAyNiBYODZfNjRcbiAxNjA6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXHUwMDI2XHUwMDI2ICEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxuIDE2MTpcdFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gMTYyOlx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxNjM6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIDE2NDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY1Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTQ3CgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBLVk0gU0VWIERlYnVnZ2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIHRhcmdldHMgZm9yIGZ1enppbmcgaGVyZSBhcmUgY2xlYXJseSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBjb21wb25lbnRzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gSSYjMzk7bGwgZmxhZyBgV29ydGhGdXp6aW5nPXRydWVgIHNpbmNlIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGFyZWEgdG8gZXhwbG9yZS4KCk5vdywgZm9yIGZvY3VzLCBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBTRVYgZGVidWdnaW5nIGFuZCBjcnlwdG8gb3BlcmF0aW9ucy4gVGhlIGtleSBzeW1ib2xzIGFyZTogYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AsIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AsIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGFuZCBgc2V2X2RiZ19jcnlwdGAuIFRoZXNlIGFyZSB3aGVyZSBJIGV4cGVjdCB0aGUgYWxsb2NhdGlvbiBsb2dpYyBtb2RpZmljYXRpb25zIHRvIGNvbWUgaW50byBwbGF5LgoKSW4gdGVybXMgb2YgZW5hYmxlbWVudCwgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQgZW5hYmxpbmcgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlc2UgY29uZmlndXJhdGlvbnMgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHRhcmdldGVkIGNvZGUuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgdXNlZCBieSBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLiBUaGlzIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gbWVhbnMgSSBjYW4gaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gcGF0aHMsIG1ha2luZyBmdXp6aW5nIGEgdmlhYmxlIGFuZCBwb3RlbnRpYWxseSBlZmZlY3RpdmUgYXBwcm9hY2ggdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jJiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZGVjcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZW5jcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfY3J5cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcyAoS1ZNX1NFVl9EQkdfREVDUllQVCwgS1ZNX1NFVl9EQkdfRU5DUllQVCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgS1ZNX01FTU9SWV9FTkNSWVBUX09QIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jJiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZGVjcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZW5jcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfY3J5cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcyAoS1ZNX1NFVl9EQkdfREVDUllQVCwgS1ZNX1NFVl9EQkdfRU5DUllQVCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgS1ZNX01FTU9SWV9FTkNSWVBUX09QIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MDQuNTA2MjAyODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMDI3MzkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjA0LjUwNjIyNDg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk5ODEwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDEzZGRmYzQ5ODM3ZTJmNGNjZDM2YTZkNDgxZDkxZjEwMzQ2ZmJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDAyOjQ0OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNzRmYjE1NTUxZTgzZmEuLmUzNzMzZWQ5ZDU4ODZiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTEyODAsNiArMTI4MCwxNyBAQCBzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoKCpwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKCgqcGEgKyAqbnJfYnl0ZXMgLSAxKSBcXHUwMDI2IFBBR0VfTUFTSykpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElmIFNOUCBpcyBlbmFibGVkLCBpLmUuIHRoZSBSTVAgaXMgYWN0aXZlLCBhbGxvY2F0ZSBhIGZ1bGwgcGFnZSB0b1xcbitcXHQgKiBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gdGhlIHBhZ2UuICBBcyByZXF1aXJlZCBieSBmaXJtd2FyZSxcXG4rXFx0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxcbitcXHQgKiB0aGUgcGFnZSB0byBGaXJtd2FyZSB3aGlsZSB0aGUge0RFLEVOfUNSWVBUIG9wZXJhdGlvbiBpcyBpbi1wcm9ncmVzcyxcXG4rXFx0ICogYW5kIHNvIGNvbmN1cnJlbnQgc29mdHdhcmUgYWNjZXNzZXMgdG8gdGhlIHBhZ2Ugd2lsbCBlbmNvdW50ZXJcXG4rXFx0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xcbitcXHQgKi9cXG4rXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuK1xcdFxcdHJldHVybiBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuK1xcbiBcXHRyZXR1cm4ga21hbGxvYygqbnJfYnl0ZXMsIEdGUF9LRVJORUwpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDowNS4wMTY4ODczMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjM3OTIwNDY5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQxM2RkZmM0OTgzN2UyZjRjY2QzNmE2ZDQ4MWQ5MWYxMDM0NmZiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDAyOjQ0OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi5lMzczM2VkOWQ1ODg2YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDYgKzEyODAsMTcgQEAgc3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxuIFx0aWYgKFdBUk5fT05fT05DRSgoKnBhIFx1MDAyNiBQQUdFX01BU0spICE9ICgoKnBhICsgKm5yX2J5dGVzIC0gMSkgXHUwMDI2IFBBR0VfTUFTSykpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdC8qXG4rXHQgKiBJZiBTTlAgaXMgZW5hYmxlZCwgaS5lLiB0aGUgUk1QIGlzIGFjdGl2ZSwgYWxsb2NhdGUgYSBmdWxsIHBhZ2UgdG9cbitcdCAqIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4gIEFzIHJlcXVpcmVkIGJ5IGZpcm13YXJlLFxuK1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuK1x0ICogdGhlIHBhZ2UgdG8gRmlybXdhcmUgd2hpbGUgdGhlIHtERSxFTn1DUllQVCBvcGVyYXRpb24gaXMgaW4tcHJvZ3Jlc3MsXG4rXHQgKiBhbmQgc28gY29uY3VycmVudCBzb2Z0d2FyZSBhY2Nlc3NlcyB0byB0aGUgcGFnZSB3aWxsIGVuY291bnRlclxuK1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuK1x0ICovXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbitcdFx0cmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbitcbiBcdHJldHVybiBrbWFsbG9jKCpucl9ieXRlcywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MDUuMDE2ODg4NDU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MjQwNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNWTSBTRVYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgY29uZGl0aW9uYWwgY2hlY2sgaGVyZSwgc3BlY2lmaWNhbGx5IGBpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlgLiBJZiB0aGF0IGNoZWNrIHBhc3Nlcywgd2UncmUgbm93IGFsbG9jYXRpbmcgYSBmdWxsIGBQQUdFX1NJWkVgIHdpdGggYGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsbHkgcmVxdWVzdGVkIGAqbnJfYnl0ZXNgIHVzaW5nIGBrbWFsbG9jKCpucl9ieXRlcywgR0ZQX0tFUk5FTClgLiBJIG5lZWQgdG8gZGlnIGludG8gYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBTRVYtU05QIHN1cHBvcnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBhbGxvY2F0aW9uIHNpemUgY2hhbmdlIGlzIG5lY2Vzc2FyeSB3aGVuIFNOUCBpcyBlbmFibGVkLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gV2hhdCdzIGl0IGJlaW5nIHVzZWQgZm9yPyBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDowOS42NzkyOTY1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg3MzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNDA9c3RhdGljIGludCBzZXZfaXNzdWVfZGJnX2NtZChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjX3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI1NjpzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU3LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnBhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjk3PXN0YXRpYyBpbnQgc2V2X2RiZ19kZWNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzMDY6XFx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHNyY19wLCBzcmMsIGxlbiwgXFx1MDAyNnNyY19wYSwgXFx1MDAyNm5yX2J5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDctXFx0aWYgKCFidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMjI9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzMxLVxcdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMzMjpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2MoZHN0X3AsIGRzdCwgbGVuLCBcXHUwMDI2ZHN0X3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzMy1cXHRpZiAoIWJ1ZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MDkuNzcxMTc1NDUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNjE2NDY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgS1ZNIFNFViBEZWJ1Z2dpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLCB3aGljaCBJIGtub3cgaXMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gVGhvc2UgYXJlIHByZXR0eSBjbGVhcmx5IHJlbGF0ZWQgdG8gZGVidWdnaW5nIFNFViDigJMgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiDigJMgd2l0aGluIEtWTS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgd2hlcmUgdGhpcyBzdHVmZiBwbGF5czsgaW4gdGhpcyBjYXNlLCBJJ20gdGhpbmtpbmcgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gWWVzLCBRRU1VIGRvZXMgc3VwcG9ydCBTRVYgYW5kIHRoZSBuZXdlciBTRVYtU05QLlxuXG5CdXQgaGVyZSdzIHRoZSBraWNrZXI6IFNFViBhbmQgU0VWLVNOUCBhcmUgZnVuZGFtZW50YWxseSBoYXJkd2FyZSBmZWF0dXJlcy4gVGhleSdyZSB0aWVkIHRvIEFNRCBFUFlDIHByb2Nlc3NvcnMuIFRoaXMgbGVhZHMgdG8gdGhlIGZ1bmRhbWVudGFsIHF1ZXN0aW9uOiBjYW4gd2UgZW11bGF0ZSBvciBmdXp6IHRoZXNlIGhhcmR3YXJlIGFzcGVjdHM/IFR5cGljYWxseSB3aXRoIEtWTSBmZWF0dXJlcywgd2UgdXNlIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBhbmQgYC9kZXYva3ZtYC4gU28sIGNhbiB3ZSBhcHBseSB0aGUgdXN1YWwgZnV6emluZyB0ZWNobmlxdWVzIGhlcmU/XG5cbkZ1bmN0aW9uYWxseSwgdGhlIHBhdGNoIHNlZW1zIHNvdW5kLiBUaGUgbWFpbiBmb2N1cyBpcyBub3cgZmluZGluZyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHN1cHBvcnQgdGhlIGRlYnVnZ2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjE0Ljk5NzM0MTY1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjM5NzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjE1LjA4OTc0OTQxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDM5MzUxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFNFViBDb25maWd1cmF0aW9uIGluIEtWTSBmb3IgQU1EIFN5c3RlbXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uZmlnIG9wdGlvbnMgd2UncmUgZGVhbGluZyB3aXRoIGFyZSBgS1ZNX0FNRGAgYW5kIGBLVk1fQU1EX1NFVmAuIFByZXR0eSBzdGFuZGFyZCBzdHVmZi4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzLCBuYXR1cmFsbHksIHdpdGggYEtWTV9BTURfU0VWYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIEFNRCdzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgdGVjaG5vbG9neSB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLiBNeSBpbnRlcm5hbCBjaGVja2xpc3QgaXMgYWxyZWFkeSBydW5uaW5nIOKAkyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24sIGd1ZXN0IGlzb2xhdGlvbiwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuIEkgd2FudCB0byBkaXZlIGludG8gKndoeSogd2UncmUgY2hlY2tpbmcgdGhpcyBzcGVjaWZpYyBvcHRpb24uIEFyZSB3ZSBjb25maXJtaW5nIGl0J3MgZW5hYmxlZD8gRGlzYWJsZWQ/IFRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uPyBEZWJ1Z2dpbmcgYSBTRVYtcmVsYXRlZCBpc3N1ZT8gTXkgbmV4dCB0aG91Z2h0IGlzIGxpa2VseSBnb2luZyB0byBpbnZvbHZlIGNoZWNraW5nIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCB0aGUga2VybmVsIGNvbmZpZyBmaWxlLCBvciBtYXliZSBldmVuIGRpZ2dpbmcgaW50byB0aGUgY29kZSB3aGVyZSB0aGF0IG9wdGlvbiBpcyB1c2VkIHRvIGdldCBtb3JlIGNvbnRleHQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFNFViBpcyBiZWluZyBoYW5kbGVkIGluIHRoaXMgc3BlY2lmaWMgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDoyMS40MzM2ODcyODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDE0MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjIxLjU1OTcwNzE1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzExNDU4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFzc2Vzc2luZyBTRVYgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBLVk0gc2V0dXAgYW5kIHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gSSBoYXZlIGlzLCBpcyBzaW1wbHkgZW5hYmxpbmcgYEtWTV9BTURfU0VWYCBzdWZmaWNpZW50LCBvciBhbSBJIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBtb3JlIG51YW5jZWQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApPyBXZSBhbGwga25vdyBTRVYgaXMgdGhlIHVtYnJlbGxhIHRlcm0sIGFuZCBTTlAgaXMgdGhlIGNyaXRpY2FsIHBhcnQgdGhhdCBwcm92aWRlcyB0aGUgc3Ryb25nZXN0IHNlY3VyaXR5IGd1YXJhbnRlZXMuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGgsIFwiSXMgdGhlIGRlZmF1bHQgU0VWIGNvbmZpZ3VyYXRpb24gcHJvdmlkaW5nIGZ1bGwgU05QIGZ1bmN0aW9uYWxpdHksIG9yIGlzIHRoZXJlIGEgc2VwYXJhdGUgc2V0IG9mIGtlcm5lbCBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgXCJzZXQgaXQgYW5kIGZvcmdldCBpdFwiIHNpdHVhdGlvbiwgb3IgaWYgdGhlcmUgYXJlIGtub2Igc2V0dGluZ3MgdGhhdCBJIHNob3VsZCBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MjUuODkwODU1NTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxNTEyNDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNFVl9TTlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjI2LjAxNTAxODE1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUwMzQzMTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHdpbGwgZGljdGF0ZSBob3cgdGhlIGtlcm5lbCBiZWhhdmVzIG9uIHg4NiBwbGF0Zm9ybXMuIEknbSBhbnRpY2lwYXRpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIOKAkyBwcm9jZXNzb3IgZmVhdHVyZXMsIGJvb3Qgb3B0aW9ucywgbWVtb3J5IGxheW91dCBjb25maWd1cmF0aW9ucyDigJMgdGhlIG5pdHR5LWdyaXR0eSB0aGF0IHJlYWxseSBkZWZpbmVzIGFuIHg4NiBrZXJuZWwgYnVpbGQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgKGFuZCBwb3RlbnRpYWxseSB0d2Vha2luZykgYW55IGtlcm5lbCBiZWhhdmlvciB0aGF0J3MgcGxhdGZvcm0gZGVwZW5kZW50LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDo0MC41MTg0NTEwNTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzU0NTAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTRVZfU05QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjQwLjYxNzgxMzcwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwNjE2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBLVk0gYW5kIEFNRCBTRVYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0IHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gVGltZSB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBmaXJzdCBwbGFjZSB0byBsb29rLCBuYXR1cmFsbHksIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMgbGl2ZSwgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNIGZvciB4ODYgcHJvY2Vzc29ycyBhcmUgZGVmaW5lZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgYSByZWxldmFudCBvcHRpb24sIGxpa2VseSBuYW1lZCBzb21ldGhpbmcgbGlrZSBgS1ZNX0FNRF9TRVZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGlzIGlzIHRoZSBpbmRpY2F0b3Igb2Ygd2hldGhlciBTRVYgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBLVk0ga2VybmVsIG1vZHVsZSBvciBub3QuIFVuZGVyc3RhbmRpbmcgdGhpcyBvcHRpb24gaXMgY3J1Y2lhbCBiZWZvcmUgYXR0ZW1wdGluZyBhbnkgZGVwbG95bWVudCBvciBkZWJ1Z2dpbmcgdGhhdCB1dGlsaXplcyBBTUQgU0VWIGZlYXR1cmVzLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgZmVhdHVyZSBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaG93IGl0J3MgYWN0aXZhdGVkIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgdW5kZXJzdGFuZGluZyBpcyBmb3VuZGF0aW9uYWwgZm9yIGFueSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6NDQuOTQ4NDMyNDEyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6NDQuOTQ4NTI0NDcyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTU3ODE4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipDb25maWd1cmF0aW9uIEh1bnRpbmcgZm9yIEFNRC1TcGVjaWZpYyBLVk0gRmVhdHVyZXMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgS1ZNIGNvbmZpZ3VyYXRpb25zIOKAkyBgS1ZNX0FNRGAgYW5kIGBLVk1fQU1EX1NFVmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIEFNRCB2aXJ0dWFsaXphdGlvbi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBgQ1JZUFRPX0RFVl9TUF9QU1BgIHNldHRpbmcuIEl0J3MgcmVsYXRlZCB0byBzZWN1cml0eSBhbmQgQU1EIFBTUCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB0aGF0IGluIG15IGFzc2Vzc21lbnQuXG5cbkkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgQU1ELXNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHVzZWQgaW4gdGhlIEtlcm5lbC4gSSBzZWUgdGhlIGNvZGUgdXNpbmcgYENDX0FUVFJfSE9TVF9TRVZfU05QYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgKnRoYXQqIG9uZSBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBhbmQgd2hhdCBpdCBjb250cm9scy4gSXQncyB0aW1lIHRvIGRpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6NDguNDY0MzA5NDI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIyNTY5MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNDX0FUVFJfSE9TVF9TRVZfU05QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVxcdFxcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVxcdHN3aXRjaCAoYXR0cikge1xcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcXHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cXHRcXHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1ND1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3MS1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzcyOlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzMtXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NC1cXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc1OlxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjM1PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjU4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyNTk6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjYwLVxcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNTY9c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5MTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTItXFx0XFx0cmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA1Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2MC1cXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxNjE6XFx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MDc9c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTExLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkxMjpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTEzLVxcdFxcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTMwPXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTM0OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXFx0ICovXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYzoxMTE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXFx0XFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM9MTk9c3RhdGljIGludCBfX2luaXQgaW5pdF9zZXZfY29uZmlnKGNoYXIgKnN0cilcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTM1PXN0YXRpYyB2b2lkIG1mZF9yZWNvbmZpZ3VyZSh2b2lkICphcmcpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2LXtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMzc6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDY9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDktXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTUwOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjQ4PXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjUyLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI1MzpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjU0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTU2Mj1pbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTYzLXtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1NjQ6XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTY1LVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzUyPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc1Ni1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NTc6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc1OC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTg3OD1pbnQgcHNtYXNoKHU2NCBwZm4pXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04ODItXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6ODgzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04ODQtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz05ODc9c3RhdGljIGludCBybXB1cGRhdGUodTY0IHBmbiwgc3RydWN0IHJtcF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05OTEtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6OTkyOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05OTMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMDgwPXZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDg1LVxcdCAqL1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEwODY6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA4Ny1cXHRcXHR3YmludmQoKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1ND1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTM2MzpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzY0LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xOTAzPXN0YXRpYyBpbnQgc2V2X2dldF9hcGlfdmVyc2lvbih2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xOTEyLVxcdCAqL1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTkxMzpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTkxNC1cXHRcXHRyZXQgPSBzbnBfZ2V0X3BsYXRmb3JtX2RhdGEoc2V2LCBcXHUwMDI2ZXJyb3IpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yODMzPXU2NCBzZXZfZ2V0X3NucF9wb2xpY3lfYml0cyh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yODM4LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjgzOTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yODQwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTMzNzI9c3RhdGljIF9faW5pdCB2b2lkIGlvbW11X3NucF9lbmFibGUodm9pZClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzc0LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM3NTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MDgtZGlzYWJsZV9zbnA6XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM0MDk6XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDEwLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM1MzQ9c3RhdGljIGludCBfX2luaXQgaW9tbXVfZ29fdG9fc3RhdGUoZW51bSBpb21tdV9pbml0X3N0YXRlIHN0YXRlKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1NTQtXFx0ICovXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1NTU6XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1NTYtXFx0ICAgICFXQVJOX09OX09OQ0UoYW1kX2lvbW11X3NucF9lbikpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1NTc6XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTU4LVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM2NjE9dm9pZCBfX2luaXQgYW1kX2lvbW11X2RldGVjdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM2ODAtZGlzYWJsZV9zbnA6XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM2ODE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM2ODI6XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNjgzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaD0yMj1lbnVtIGNjX2F0dHIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTkyLVxcdC8qKlxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5MzpcXHQgKiBAQ0NfQVRUUl9IT1NUX1NFVl9TTlA6IEFNRCBTTlAgZW5hYmxlZCBvbiB0aGUgaG9zdC5cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTQtXFx0ICpcXG4tLVxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05Ny1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg6OTg6XFx0Q0NfQVRUUl9IT1NUX1NFVl9TTlAsXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDo1Mi43ODY4ODUzMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE3OTM4MjQ3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRVYgRGVidWcgQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBmbGFnZ2VkIGluIGBpbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmhgLiBJdCdzIGVuYWJsZWQgaW4gYGFtZC5jYCBpZiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgd29ya3MuIFN0YW5kYXJkIGhhcmR3YXJlIGZlYXR1cmUgY2hlY2ssIG5vdGhpbmcgdG9vIHN1cnByaXNpbmcgdGhlcmUuIEJ1dCwgSSBzZWUgdGhleSdyZSBlbmFibGluZyBgS1ZNX0FNRF9TRVZgIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgIHRvIGZvcmNlIGNvbXBpbGUgc3VwcG9ydCwgcmVnYXJkbGVzcyBvZiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VuY2UuIFNtYXJ0LlxuXG5Ob3csIHRoZSBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHRoYXTigJlzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgYW5kIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIEFoLCByaWdodCwgdGhvc2UgaW4gdHVybiBhcmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBgc2V2X2lzc3VlX2RiZ19jbWRgIGZsb3c6IGBzZXZfaXNzdWVfZGJnX2NtZGAgLVx1MDAzZSBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIG9yIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludCwgc28gSSBzaG91bGQgc2VlIHdoZXJlIGBzZXZfaXNzdWVfZGJnX2NtZGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20uIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hlcmUgdGhpcyBkZWJ1ZyBjb2RlIG1pZ2h0IGJlIHRyaWdnZXJlZC4gTGV0J3MgdHJhY2UgaXQgYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NToxNC41ODA3MTQzMTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDI1MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfaXNzdWVfZGJnX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTIxND1zdGF0aWMgaW50IHNldl9ndWVzdF9zdGF0dXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyMzktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjQwOnN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNDEtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGRzdF9wYSwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxMDpcXHRyID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLCBzcmNfcGEsIF9fc21lX3NldChfX3BhKGJ1ZikpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxMS1cXHRcXHRcXHQgICAgICBucl9ieXRlcywgS1ZNX1NFVl9EQkdfREVDUllQVCwgZXJyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTMyMj1zdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzM2OlxcdHIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIGRzdF9wYSwgX19zbWVfc2V0KF9fcGEoYnVmKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzM3LVxcdFxcdFxcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19ERUNSWVBULCBlcnIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzQ3LVxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNDg6XFx0XFx0ciA9IHNldl9pc3N1ZV9kYmdfY21kKGt2bSwgX19zbWVfc2V0KF9fcGEoYnVmKSksIGRzdF9wYSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDktXFx0XFx0XFx0XFx0ICAgICAgbnJfYnl0ZXMsIEtWTV9TRVZfREJHX0VOQ1JZUFQsIGVycik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzNTU9c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDEwLVxcdFxcdGlmIChJU19BTElHTkVEKHNyYywgMTYpIFxcdTAwMjZcXHUwMDI2IElTX0FMSUdORUQoZHN0LCAxNikgXFx1MDAyNlxcdTAwMjYgSVNfQUxJR05FRChsZW4sIDE2KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0MTE6XFx0XFx0XFx0cmV0ID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQxMi1cXHRcXHRcXHRcXHRcXHRcXHRfX3NtZV9wYWdlX3BhKHNyY19wKSArIHNfb2ZmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NToxNS4wMTA5NjkxMTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODI4NjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU0VWIERlYnVnIENyeXB0b2dyYXBoeSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLiBJdCBzZWVtcyBgc2V2X2RiZ19jcnlwdGAgaXMgdGhlIGNvcmUgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbiBoZXJlLiBJdCdzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRgIGFuZCBgc2V2X2RiZ19lbmNyeXB0YCwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGZyb20gYHNldl9tZW1fZW5jX2lvY3RsYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24uIFNvLCBgc2V2X2RiZ19jcnlwdGAgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgY3J5cHRvZ3JhcGh5LCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkaW5nIHRoZSBzcGVjaWZpYyBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gY29udGV4dC4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXNseSB0byBkaXZlIGludG8gYHNldl9kYmdfY3J5cHRgIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjE5LjU5OTI1NzA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NDUxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X2RiZ19jcnlwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI0MD1zdGF0aWMgaW50IHNldl9pc3N1ZV9kYmdfY21kKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmNfcGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjU2OnN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTctXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgbG9uZyAqcGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwNjpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3JjX3AsIHNyYywgbGVuLCBcXHUwMDI2c3JjX3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwNy1cXHRpZiAoIWJ1ZilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTMyMj1zdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzEtXFx0LyogRGVjcnlwdCB0aGUgX2Rlc3RpbmF0aW9uXyB0byBkbyBhIFJNVyBvbiBwbGFpbnRleHQuICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzMyOlxcdGJ1ZiA9IHNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhkc3RfcCwgZHN0LCBsZW4sIFxcdTAwMjZkc3RfcGEsIFxcdTAwMjZucl9ieXRlcyk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzMzLVxcdGlmICghYnVmKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzU0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM1NTpzdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzU2LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM0PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjkyLVxcdGNhc2UgS1ZNX1NFVl9EQkdfRU5DUllQVDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2OTM6XFx0XFx0ciA9IHNldl9kYmdfY3J5cHQoa3ZtLCBcXHUwMDI2c2V2X2NtZCwgc2V2X2NtZC5pZCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjk0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NToxOS43MTA5MDY4NTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxODA1OTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFViBEZWJ1ZyBFbmNyeXB0aW9uIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSXQncyBoYW5kbGluZyB0aGUgYEtWTV9TRVZfREJHX0RFQ1JZUFRgIGFuZCBgS1ZNX1NFVl9EQkdfRU5DUllQVGAgaW9jdGxzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgaG93IHVzZXJzcGFjZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZXNlIGlvY3RscyB0aGVuIGZ1bm5lbCBpbnRvIGBzZXZfZGJnX2NyeXB0YCwgYW5kIHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbnMgYXJlIGVpdGhlciBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIG9yIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGJvdGggb2Ygd2hpY2ggdXNlIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHRoZXNlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyBhcmUgdGhlIGNvcmUgb2YgdGhlIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy5cblxuU28sIHdoZW4gSSB0aGluayBhYm91dCB3aGVyZSB0byBmb2N1cyBteSBhbmFseXNpcywgYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AsIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AsIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGFuZCBgc2V2X2RiZ19jcnlwdGAgaW1tZWRpYXRlbHkganVtcCBvdXQgYXMgdGhlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhlc2UgYXJlIHRoZSBzeW1ib2xzIEkgc2hvdWxkIGJlIGRpZ2dpbmcgaW50by5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gQW55IG90aGVyIHJlbGV2YW50IGNvbmZpZz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgS1ZNX0FNRF9TRVZgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQncyBjcnVjaWFsIHRvIHRyaWdnZXJpbmcgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDE2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjI1LjAyODk3NjE2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NzY1MTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjI3LjgxNjYzMTU3NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ0NTMyMTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIGEgYm9vbGVhbiwgZ29vZCB0byBrbm93LiBMZXQncyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uczogYEtWTV9BTURgIGFuZCBgS1ZNX0FNRF9TRVZgIGFyZSBhbHNvIGluIHRoZSBtaXguIFRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBwZXJ0aW5lbnQgYXJlIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIFdhaXQgYSBzZWNvbmQsIHRoZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGZsYWcgaXMgZ29pbmcgdG8gaW5kaWNhdGUgaWYgU05QIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuIFRoaXMgaXMgaW1wb3J0YW50LiBDYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGV2ZW4gaWYgd2UgKmRvbid0KiBoYXZlIHJlYWwgU05QIGhhcmR3YXJlP1xuXG5UaGUgY29kZSBzZWVtcyB0byBhZGQgYSBjaGVjayBmb3IgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGFuZCB0aGVuIGFsbG9jYXRlcyBhIGZ1bGwgcGFnZSBpZiB0aGF0IGNoZWNrIGlzIHBvc2l0aXZlLiBJZiB0aGUgZnV6emVyIGlzIHJ1bm5pbmcgb24gbm9uLVNOUCBoYXJkd2FyZSwgdGhhdCBjaGVjayB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlLCBhbmQgdGhlIGNvZGUgd2lsbCBqdXN0IGdvIGJhY2sgdG8gdXNpbmcgYGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtgIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4gQnV0LCB0aGlzIHBhdGNoICpkb2VzKiBtYWtlIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgY2hhbmdlIGlzIHJlYWNoYWJsZS5cblxuU28gdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSBoaXQgdGhhdCBuZXcgY29kZSBwYXRoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VPyBBbmQgdGhlIGFuc3dlciwgaWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIGlzIHllcywgYXMgbG9uZyBhcyB0aGUgZW52aXJvbm1lbnQgcHJvdmlkZXMgc29tZSBsZXZlbCBvZiBTRVYtU05QIGVtdWxhdGlvbiBvciB3ZSBydW4gaXQgb24gYWN0dWFsIFNFVi1TTlAgaGFyZHdhcmUuIFFFTVUgZG9lcyBzdXBwb3J0IFNFVi1TTlAuIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkp1c3QgdG8gYmUgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgcmVjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzLiBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX1NQX1BTUGAgLSBHb3QgaXQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBBTURfTUVNX0VOQ1JZUFRgIGlzbid0IGEgZmFjdG9yIGhlcmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDYyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjM4LjI2MTk1NjMyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3NTcyNDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX01FTV9FTkNSWVBUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE0OTY9Y29uZmlnIFg4Nl9NRU1fRU5DUllQVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNTAwLVxcbmFyY2gveDg2L0tjb25maWc6MTUwMTpjb25maWcgQU1EX01FTV9FTkNSWVBUXFxuYXJjaC94ODYvS2NvbmZpZy0xNTAyLVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gKFNNRSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDU6NDAuOTM3Njg1NTc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODcxMzA0MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBBTUQgTWVtb3J5IEVuY3J5cHRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBBTURfTUVNX0VOQ1JZUFRgIHRoaW5nLiBGaXJzdCwgSSBuZWVkIHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBzb21lIHByZXR0eSB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciwgb2J2aW91c2x5LiBUaGF0IGltcGxpZXMgdGhlIGxvdy1sZXZlbCBmaXJtd2FyZSBhbmQgcG9zc2libHkgdGhlIG1pY3JvY29kZSBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIFdlJ3JlIGdvaW5nIHRvIGJlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBrZXlzIGFyZSBwcm92aXNpb25lZCwgbWFuYWdlZCwgYW5kIGhvdyB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGFjdHVhbGx5IG9jY3Vycy4gVGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIGJpdCBmbGlwOyB0aGVyZSBoYXMgdG8gYmUgYW4gYXJjaGl0ZWN0dXJlLWxldmVsIGNvbW1pdG1lbnQuXG5cbkkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBXaGF0IG92ZXJoZWFkIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBXaWxsIHRoaXMgYmUgdHJhbnNwYXJlbnQgYXQgdGhlIE9TIGxldmVsLCBvciBhcmUgdGhlcmUgZ29pbmcgdG8gYmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAoTU1VKSBvciB0aGUgdmlydHVhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHByb2Nlc3M/IEFyZSB0aGVyZSBuZXcgVExCIGltcGxpY2F0aW9ucyB0byBrZWVwIHRyYWNrIG9mIGVuY3J5cHRpb24ga2V5cz8gQWxzbywgZG9lcyBpdCBhZmZlY3QgdGhlIGNhY2hlIGhpZXJhcmNoeT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgaG93IHRoZXkndmUgYWRkcmVzc2VkIHRoZW0uIERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHZlY3RvcnMsIGZvciBpbnN0YW5jZSwgaW4gdGhlIGNvbnRleHQgb2YgRE1BPyBXaGF0IGFyZSB0aGUga2V5IHJvdGF0aW9uIG1lY2hhbmlzbXM/IEFyZSB0aGV5IHJvYnVzdD8gV2hhdCBhYm91dCB0aGUgc29mdHdhcmUgaW50ZXJmYWNlLCB0aGUgQVBJcywgbGlicmFyaWVzPyBXaGF0J3MgdGhlIGdyYW51bGFyaXR5IG9mIGNvbnRyb2wsIGlzIGl0IGF0IHRoZSBwcm9jZXNzIGxldmVsIG9yIHNvbWV0aGluZyBicm9hZGVyPyBBbnkgaG9va3M/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIHNlY3VyaXR5IHJlcXVpcmVtZW50cy4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgZGVwZW5kZW5jeSBncmFwaCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDU6NTIuODA4OTkyMzE1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Njk5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDE6XFx0Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxcbjE1MDI6XFx0XFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBNZW1vcnkgRW5jcnlwdGlvbiAoU01FKSBzdXBwb3J0XFxcIlxcbjE1MDM6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4xNTA0OlxcdFxcdGRlcGVuZHMgb24gRUZJX1NUVUJcXG4xNTA1OlxcdFxcdHNlbGVjdCBETUFfQ09IRVJFTlRfUE9PTFxcbjE1MDY6XFx0XFx0c2VsZWN0IEFSQ0hfVVNFX01FTVJFTUFQX1BST1RcXG4xNTA3OlxcdFxcdHNlbGVjdCBJTlNUUlVDVElPTl9ERUNPREVSXFxuMTUwODpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4xNTA5OlxcdFxcdHNlbGVjdCBYODZfTUVNX0VOQ1JZUFRcXG4xNTEwOlxcdFxcdHNlbGVjdCBVTkFDQ0VQVEVEX01FTU9SWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NTo1Mi44MDkxODA2NzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4ODI3NDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nIHByb2Nlc3M6XG5cbioqS1ZNX0FNRF9TRVYgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gc29tZXRoaW5nIGhlcmUuIEknbSByZXZpc2l0aW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgS1ZNX0FNRF9TRVZgIGFuZCBgQU1EX01FTV9FTkNSWVBUYC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBhbmQgYmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIGl0ICpzaG91bGRuJ3QqIHJlbHkgb24gYEFNRF9NRU1fRU5DUllQVGAuIEp1c3Qgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCBjcml0aWNhbCBhc3N1bXB0aW9uLiBOZWVkIHRvIGVuc3VyZSB0aGUgbG9naWMgYW5kIGFyY2hpdGVjdHVyZSBpcyBzb3VuZC4gU28sIEknbSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYEtWTV9BTURfU0VWYCBjb25maWd1cmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbi4gR290dGEgYmUgcHJlY2lzZSBoZXJlLCBubyByb29tIGZvciBhbWJpZ3VpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgU0VWIGZlYXR1cmUgaXMgaW5kZXBlbmRlbnQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1lbW9yeSBlbmNyeXB0aW9uIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0ODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjU4LjE5NzQ1ODU3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDU6NTguMTk3NTIzNjU0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDg0NDY2MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEtWTSBTRVYgRGVidWdnaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIHRhcmdldHMgZm9yIGZ1enppbmcgaGVyZSBhcmUgY2xlYXJseSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBUaGV5J3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJ2xsIGZsYWcgYFdvcnRoRnV6emluZz10cnVlYCBzaW5jZSB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcmVhIHRvIGV4cGxvcmUuXG5cbk5vdywgZm9yIGZvY3VzLCBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBTRVYgZGVidWdnaW5nIGFuZCBjcnlwdG8gb3BlcmF0aW9ucy4gVGhlIGtleSBzeW1ib2xzIGFyZTogYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AsIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AsIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGFuZCBgc2V2X2RiZ19jcnlwdGAuIFRoZXNlIGFyZSB3aGVyZSBJIGV4cGVjdCB0aGUgYWxsb2NhdGlvbiBsb2dpYyBtb2RpZmljYXRpb25zIHRvIGNvbWUgaW50byBwbGF5LlxuXG5JbiB0ZXJtcyBvZiBlbmFibGVtZW50LCBJJ20gY29uZmlkZW50IGFib3V0IGVuYWJsaW5nIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXJnZXRlZCBjb2RlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgdXNlZCBieSBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLiBUaGlzIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gbWVhbnMgSSBjYW4gaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gcGF0aHMsIG1ha2luZyBmdXp6aW5nIGEgdmlhYmxlIGFuZCBwb3RlbnRpYWxseSBlZmZlY3RpdmUgYXBwcm9hY2ggdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTQ3LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ2OjA4LjY4MTk5MjgxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjkzODI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 02:31:26 +0000 UTC FinishedAt: 2026-07-24 02:46:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP" ], "series_id": "4a906561-2951-4411-98de-bbcf9d2f8ea7" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "sev_dbg_crypt_slow_alloc", "sev_dbg_decrypt_slow", "sev_dbg_encrypt_slow", "sev_dbg_crypt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2MmIzM0OywKICAgICYjMzQ7c2V2X2RiZ19kZWNyeXB0X3Nsb3cmIzM0OywKICAgICYjMzQ7c2V2X2RiZ19lbmNyeXB0X3Nsb3cmIzM0OywKICAgICYjMzQ7c2V2X2RiZ19jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZDEzZGRmYzQ5ODM3ZTJmNGNjZDM2YTZkNDgxZDkxZjEwMzQ2ZmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDI6NDQ6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi5lMzczM2VkOWQ1ODg2YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDYgJiM0MzsxMjgwLDE3IEBAIHN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbiBcdGlmIChXQVJOX09OX09OQ0UoKCpwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKCpwYSAmIzQzOyAqbnJfYnl0ZXMgLSAxKSBcdTAwMjYgUEFHRV9NQVNLKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgU05QIGlzIGVuYWJsZWQsIGkuZS4gdGhlIFJNUCBpcyBhY3RpdmUsIGFsbG9jYXRlIGEgZnVsbCBwYWdlIHRvXG4mIzQzO1x0ICogcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIHRoZSBwYWdlLiAgQXMgcmVxdWlyZWQgYnkgZmlybXdhcmUsXG4mIzQzO1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuJiM0MztcdCAqIHRoZSBwYWdlIHRvIEZpcm13YXJlIHdoaWxlIHRoZSB7REUsRU59Q1JZUFQgb3BlcmF0aW9uIGlzIGluLXByb2dyZXNzLFxuJiM0MztcdCAqIGFuZCBzbyBjb25jdXJyZW50IHNvZnR3YXJlIGFjY2Vzc2VzIHRvIHRoZSBwYWdlIHdpbGwgZW5jb3VudGVyXG4mIzQzO1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuJiM0MztcdFx0cmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4gXHRyZXR1cm4ga21hbGxvYygqbnJfYnl0ZXMsIEdGUF9LRVJORUwpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9kYmdfY3J5cHRfc2xvd19hbGxvYyYjMzQ7LAogICAgJiMzNDtzZXZfZGJnX2RlY3J5cHRfc2xvdyYjMzQ7LAogICAgJiMzNDtzZXZfZGJnX2VuY3J5cHRfc2xvdyYjMzQ7LAogICAgJiMzNDtzZXZfZGJnX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgS1ZNIFNFViBkZWJ1Z2dpbmcgY29tbWFuZHMgKEtWTV9TRVZfREJHX0RFQ1JZUFQsIEtWTV9TRVZfREJHX0VOQ1JZUFQpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEtWTV9NRU1PUllfRU5DUllQVF9PUCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQxM2RkZmM0OTgzN2UyZjRjY2QzNmE2ZDQ4MWQ5MWYxMDM0NmZiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDAyOjQ0OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNzRmYjE1NTUxZTgzZmEuLmUzNzMzZWQ5ZDU4ODZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTEyODAsNiAmIzQzOzEyODAsMTcgQEAgc3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLAogCWlmIChXQVJOX09OX09OQ0UoKCpwYSAmYW1wOyBQQUdFX01BU0spICE9ICgoKnBhICYjNDM7ICpucl9ieXRlcyAtIDEpICZhbXA7IFBBR0VfTUFTSykpKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiBTTlAgaXMgZW5hYmxlZCwgaS5lLiB0aGUgUk1QIGlzIGFjdGl2ZSwgYWxsb2NhdGUgYSBmdWxsIHBhZ2UgdG8KJiM0MzsJICogcHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIHRoZSBwYWdlLiAgQXMgcmVxdWlyZWQgYnkgZmlybXdhcmUsCiYjNDM7CSAqIHRoZSBQU1AgZHJpdmVyIHVwZGF0ZXMgdGhlIFJNUCB0byB0ZW1wb3JhcmlseSB0cmFuc2ZlciBvd25lcnNoaXAgb2YKJiM0MzsJICogdGhlIHBhZ2UgdG8gRmlybXdhcmUgd2hpbGUgdGhlIHtERSxFTn1DUllQVCBvcGVyYXRpb24gaXMgaW4tcHJvZ3Jlc3MsCiYjNDM7CSAqIGFuZCBzbyBjb25jdXJyZW50IHNvZnR3YXJlIGFjY2Vzc2VzIHRvIHRoZSBwYWdlIHdpbGwgZW5jb3VudGVyCiYjNDM7CSAqIHNlZW1pbmdseSBzcHVyaW91cyBSTVAgI1BGIHZpb2xhdGlvbnMKJiM0MzsJICovCiYjNDM7CWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQomIzQzOwkJcmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsKIAlyZXR1cm4ga21hbGxvYygqbnJfYnl0ZXMsIEdGUF9LRVJORUwpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVk0gU0VWIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIGNvbmRpdGlvbmFsIGNoZWNrIGhlcmUsIHNwZWNpZmljYWxseSBgaWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpYC4gSWYgdGhhdCBjaGVjayBwYXNzZXMsIHdlJiMzOTtyZSBub3cgYWxsb2NhdGluZyBhIGZ1bGwgYFBBR0VfU0laRWAgd2l0aCBga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpYCByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQgYCpucl9ieXRlc2AgdXNpbmcgYGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKWAuIEkgbmVlZCB0byBkaWcgaW50byBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBTRVYtU05QIHN1cHBvcnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBhbGxvY2F0aW9uIHNpemUgY2hhbmdlIGlzIG5lY2Vzc2FyeSB3aGVuIFNOUCBpcyBlbmFibGVkLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IFdoYXQmIzM5O3MgaXQgYmVpbmcgdXNlZCBmb3I/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI0MD1zdGF0aWMgaW50IHNldl9pc3N1ZV9kYmdfY21kKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmNfcGEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjU2OnN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnBhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI5Nz1zdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzA2Olx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHNyY19wLCBzcmMsIGxlbiwgXHUwMDI2c3JjX3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDctXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMjI9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzMS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzMyOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzMtXHRpZiAoIWJ1ZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBLVk0gU0VWIERlYnVnZ2luZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLCB3aGljaCBJIGtub3cgaXMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gVGhvc2UgYXJlIHByZXR0eSBjbGVhcmx5IHJlbGF0ZWQgdG8gZGVidWdnaW5nIFNFViDigJMgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiDigJMgd2l0aGluIEtWTS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgd2hlcmUgdGhpcyBzdHVmZiBwbGF5czsgaW4gdGhpcyBjYXNlLCBJJiMzOTttIHRoaW5raW5nIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBZZXMsIFFFTVUgZG9lcyBzdXBwb3J0IFNFViBhbmQgdGhlIG5ld2VyIFNFVi1TTlAuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBTRVYgYW5kIFNFVi1TTlAgYXJlIGZ1bmRhbWVudGFsbHkgaGFyZHdhcmUgZmVhdHVyZXMuIFRoZXkmIzM5O3JlIHRpZWQgdG8gQU1EIEVQWUMgcHJvY2Vzc29ycy4gVGhpcyBsZWFkcyB0byB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb246IGNhbiB3ZSBlbXVsYXRlIG9yIGZ1enogdGhlc2UgaGFyZHdhcmUgYXNwZWN0cz8gVHlwaWNhbGx5IHdpdGggS1ZNIGZlYXR1cmVzLCB3ZSB1c2Ugc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGFuZCBgL2Rldi9rdm1gLiBTbywgY2FuIHdlIGFwcGx5IHRoZSB1c3VhbCBmdXp6aW5nIHRlY2huaXF1ZXMgaGVyZT8KCkZ1bmN0aW9uYWxseSwgdGhlIHBhdGNoIHNlZW1zIHNvdW5kLiBUaGUgbWFpbiBmb2N1cyBpcyBub3cgZmluZGluZyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHN1cHBvcnQgdGhlIGRlYnVnZ2luZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgU0VWIENvbmZpZ3VyYXRpb24gaW4gS1ZNIGZvciBBTUQgU3lzdGVtcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29uZmlnIG9wdGlvbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmUgYEtWTV9BTURgIGFuZCBgS1ZNX0FNRF9TRVZgLiBQcmV0dHkgc3RhbmRhcmQgc3R1ZmYuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcywgbmF0dXJhbGx5LCB3aXRoIGBLVk1fQU1EX1NFVmAuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBBTUQmIzM5O3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSB0ZWNobm9sb2d5IHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIE15IGludGVybmFsIGNoZWNrbGlzdCBpcyBhbHJlYWR5IHJ1bm5pbmcg4oCTIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24sIGd1ZXN0IGlzb2xhdGlvbiwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuIEkgd2FudCB0byBkaXZlIGludG8gKndoeSogd2UmIzM5O3JlIGNoZWNraW5nIHRoaXMgc3BlY2lmaWMgb3B0aW9uLiBBcmUgd2UgY29uZmlybWluZyBpdCYjMzk7cyBlbmFibGVkPyBEaXNhYmxlZD8gVHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IERlYnVnZ2luZyBhIFNFVi1yZWxhdGVkIGlzc3VlPyBNeSBuZXh0IHRob3VnaHQgaXMgbGlrZWx5IGdvaW5nIHRvIGludm9sdmUgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUsIG9yIG1heWJlIGV2ZW4gZGlnZ2luZyBpbnRvIHRoZSBjb2RlIHdoZXJlIHRoYXQgb3B0aW9uIGlzIHVzZWQgdG8gZ2V0IG1vcmUgY29udGV4dC4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFNFViBpcyBiZWluZyBoYW5kbGVkIGluIHRoaXMgc3BlY2lmaWMgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFzc2Vzc2luZyBTRVYgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBLVk0gc2V0dXAgYW5kIHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gSSBoYXZlIGlzLCBpcyBzaW1wbHkgZW5hYmxpbmcgYEtWTV9BTURfU0VWYCBzdWZmaWNpZW50LCBvciBhbSBJIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBtb3JlIG51YW5jZWQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApPyBXZSBhbGwga25vdyBTRVYgaXMgdGhlIHVtYnJlbGxhIHRlcm0sIGFuZCBTTlAgaXMgdGhlIGNyaXRpY2FsIHBhcnQgdGhhdCBwcm92aWRlcyB0aGUgc3Ryb25nZXN0IHNlY3VyaXR5IGd1YXJhbnRlZXMuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGgsICYjMzQ7SXMgdGhlIGRlZmF1bHQgU0VWIGNvbmZpZ3VyYXRpb24gcHJvdmlkaW5nIGZ1bGwgU05QIGZ1bmN0aW9uYWxpdHksIG9yIGlzIHRoZXJlIGEgc2VwYXJhdGUgc2V0IG9mIGtlcm5lbCBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQ/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgJiMzNDtzZXQgaXQgYW5kIGZvcmdldCBpdCYjMzQ7IHNpdHVhdGlvbiwgb3IgaWYgdGhlcmUgYXJlIGtub2Igc2V0dGluZ3MgdGhhdCBJIHNob3VsZCBhZGRyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NFVl9TTlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlcjoKCioqRGl2aW5nIGludG8gdGhlIHg4NiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3aWxsIGRpY3RhdGUgaG93IHRoZSBrZXJuZWwgYmVoYXZlcyBvbiB4ODYgcGxhdGZvcm1zLiBJJiMzOTttIGFudGljaXBhdGluZyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mg4oCTIHByb2Nlc3NvciBmZWF0dXJlcywgYm9vdCBvcHRpb25zLCBtZW1vcnkgbGF5b3V0IGNvbmZpZ3VyYXRpb25zIOKAkyB0aGUgbml0dHktZ3JpdHR5IHRoYXQgcmVhbGx5IGRlZmluZXMgYW4geDg2IGtlcm5lbCBidWlsZC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyAoYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nKSBhbnkga2VybmVsIGJlaGF2aW9yIHRoYXQmIzM5O3MgcGxhdGZvcm0gZGVwZW5kZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NFVl9TTlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIEtWTSBhbmQgQU1EIFNFViBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFRpbWUgdG8gemVybyBpbiBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgcGxhY2UgdG8gbG9vaywgbmF0dXJhbGx5LCBpcyB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZlYXR1cmUgdG9nZ2xlcyBsaXZlLCB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gZm9yIHg4NiBwcm9jZXNzb3JzIGFyZSBkZWZpbmVkLiBJIGFudGljaXBhdGUgZmluZGluZyBhIHJlbGV2YW50IG9wdGlvbiwgbGlrZWx5IG5hbWVkIHNvbWV0aGluZyBsaWtlIGBLVk1fQU1EX1NFVmAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgaXMgdGhlIGluZGljYXRvciBvZiB3aGV0aGVyIFNFViBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIEtWTSBrZXJuZWwgbW9kdWxlIG9yIG5vdC4gVW5kZXJzdGFuZGluZyB0aGlzIG9wdGlvbiBpcyBjcnVjaWFsIGJlZm9yZSBhdHRlbXB0aW5nIGFueSBkZXBsb3ltZW50IG9yIGRlYnVnZ2luZyB0aGF0IHV0aWxpemVzIEFNRCBTRVYgZmVhdHVyZXMuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhpcyBmZWF0dXJlIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBob3cgaXQmIzM5O3MgYWN0aXZhdGVkIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgdW5kZXJzdGFuZGluZyBpcyBmb3VuZGF0aW9uYWwgZm9yIGFueSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipDb25maWd1cmF0aW9uIEh1bnRpbmcgZm9yIEFNRC1TcGVjaWZpYyBLVk0gRmVhdHVyZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBLVk0gY29uZmlndXJhdGlvbnMg4oCTIGBLVk1fQU1EYCBhbmQgYEtWTV9BTURfU0VWYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgQU1EIHZpcnR1YWxpemF0aW9uLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGBDUllQVE9fREVWX1NQX1BTUGAgc2V0dGluZy4gSXQmIzM5O3MgcmVsYXRlZCB0byBzZWN1cml0eSBhbmQgQU1EIFBTUCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB0aGF0IGluIG15IGFzc2Vzc21lbnQuCgpJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIEFNRC1zcGVjaWZpYyBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSB1c2VkIGluIHRoZSBLZXJuZWwuIEkgc2VlIHRoZSBjb2RlIHVzaW5nIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSAqdGhhdCogb25lIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIGFuZCB3aGF0IGl0IGNvbnRyb2xzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0NfQVRUUl9IT1NUX1NFVl9TTlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby9jb3JlLmM9NzA9c3RhdGljIGJvb2wgbm9pbnN0ciBhbWRfY2NfcGxhdGZvcm1faGFzKGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTEwMy1cbmFyY2gveDg2L2NvY28vY29yZS5jOjEwNDpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDUtXHRcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTcwPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9jbGVhcihlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzItXHRzd2l0Y2ggKGF0dHIpIHtcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzQtXHRcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk0LVx0c3dpdGNoIChhdHRyKSB7XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxOTU6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVx0XHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAxO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MzU0PXN0YXRpYyB2b2lkIGJzcF9kZXRlcm1pbmVfc25wKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3MS1cdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzcyOlx0XHRcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cdFx0fSBlbHNlIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc0LVx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjM3NTpcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cdFx0fVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM6MTEyOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEyMzU9c3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjU4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI1OTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI2MC1cdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjU2PXN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5MTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkyLVx0XHRyZXR1cm4ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA1Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjAtXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzE2MTpcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTYyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkwNz1zdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTExLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTEyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTEzLVx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxMzA9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUxMzQ6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXHQgKi9cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmM6MTExOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cdFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jPTE5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2V2X2NvbmZpZyhjaGFyICpzdHIpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVx0XHRcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcdFx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMy1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEzNT1zdGF0aWMgdm9pZCBtZmRfcmVjb25maWd1cmUodm9pZCAqYXJnKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2LXtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEzNzpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzOC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE0Nj1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDktXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNTA6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTEtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNDg9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjUyLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjUzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjU0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NTYyPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU2My17XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1NjQ6XHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU2NS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzUyPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03NTYtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NTc6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03NTgtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTg3OD1pbnQgcHNtYXNoKHU2NCBwZm4pXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODgyLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6ODgzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODg0LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz05ODc9c3RhdGljIGludCBybXB1cGRhdGUodTY0IHBmbiwgc3RydWN0IHJtcF9zdGF0ZSAqc3RhdGUpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtOTkxLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6OTkyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtOTkzLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMDgwPXZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA4NS1cdCAqL1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTA4NjpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA4Ny1cdFx0d2JpbnZkKCk7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xMzU0PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxMzYzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzY0LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE5MDM9c3RhdGljIGludCBzZXZfZ2V0X2FwaV92ZXJzaW9uKHZvaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xOTEyLVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE5MTM6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkge1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xOTE0LVx0XHRyZXQgPSBzbnBfZ2V0X3BsYXRmb3JtX2RhdGEoc2V2LCBcdTAwMjZlcnJvcik7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yODMzPXU2NCBzZXZfZ2V0X3NucF9wb2xpY3lfYml0cyh2b2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjgzOC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjgzOTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjg0MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTMzNzI9c3RhdGljIF9faW5pdCB2b2lkIGlvbW11X3NucF9lbmFibGUodm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM3NC0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM3NTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzc2LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MDgtZGlzYWJsZV9zbnA6XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQwOTpcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDEwLSNlbmRpZlxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNTM0PXN0YXRpYyBpbnQgX19pbml0IGlvbW11X2dvX3RvX3N0YXRlKGVudW0gaW9tbXVfaW5pdF9zdGF0ZSBzdGF0ZSlcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU1NC1cdCAqL1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1NTU6XHRpZiAocmV0IFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1NTYtXHQgICAgIVdBUk5fT05fT05DRShhbWRfaW9tbXVfc25wX2VuKSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNTU3Olx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU1OC1cbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzY2MT12b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM2ODAtZGlzYWJsZV9zbnA6XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzY4MTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM2ODI6XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNjgzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg9MjI9ZW51bSBjY19hdHRyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTItXHQvKipcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5MzpcdCAqIEBDQ19BVFRSX0hPU1RfU0VWX1NOUDogQU1EIFNOUCBlbmFibGVkIG9uIHRoZSBob3N0LlxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk0LVx0ICpcbi0tXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTctXHQgKi9cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5ODpcdENDX0FUVFJfSE9TVF9TRVZfU05QLFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTY1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWIERlYnVnIENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBmbGFnZ2VkIGluIGBpbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmhgLiBJdCYjMzk7cyBlbmFibGVkIGluIGBhbWQuY2AgaWYgYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIHdvcmtzLiBTdGFuZGFyZCBoYXJkd2FyZSBmZWF0dXJlIGNoZWNrLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIHRoZXJlLiBCdXQsIEkgc2VlIHRoZXkmIzM5O3JlIGVuYWJsaW5nIGBLVk1fQU1EX1NFVmAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAgdG8gZm9yY2UgY29tcGlsZSBzdXBwb3J0LCByZWdhcmRsZXNzIG9mIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW5jZS4gU21hcnQuCgpOb3csIHRoZSBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHRoYXTigJlzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgYW5kIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIEFoLCByaWdodCwgdGhvc2UgaW4gdHVybiBhcmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBgc2V2X2lzc3VlX2RiZ19jbWRgIGZsb3c6IGBzZXZfaXNzdWVfZGJnX2NtZGAgLSZndDsgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBvciBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnQsIHNvIEkgc2hvdWxkIHNlZSB3aGVyZSBgc2V2X2lzc3VlX2RiZ19jbWRgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGRlYnVnIGNvZGUgbWlnaHQgYmUgdHJpZ2dlcmVkLiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X2lzc3VlX2RiZ19jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTIxND1zdGF0aWMgaW50IHNldl9ndWVzdF9zdGF0dXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjM5LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjQwOnN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI0MS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BhLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwOS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxMDpcdHIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIHNyY19wYSwgX19zbWVfc2V0KF9fcGEoYnVmKSksXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMTEtXHRcdFx0ICAgICAgbnJfYnl0ZXMsIEtWTV9TRVZfREJHX0RFQ1JZUFQsIGVycik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzIyPXN0YXRpYyBpbnQgc2V2X2RiZ19lbmNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzMzY6XHRyID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLCBkc3RfcGEsIF9fc21lX3NldChfX3BhKGJ1ZikpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzM3LVx0XHRcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19ERUNSWVBULCBlcnIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM0Ny1cdGVsc2VcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM0ODpcdFx0ciA9IHNldl9pc3N1ZV9kYmdfY21kKGt2bSwgX19zbWVfc2V0KF9fcGEoYnVmKSksIGRzdF9wYSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTM0OS1cdFx0XHRcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19FTkNSWVBULCBlcnIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTM1NT1zdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDEwLVx0XHRpZiAoSVNfQUxJR05FRChzcmMsIDE2KSBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChkc3QsIDE2KSBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChsZW4sIDE2KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQxMTpcdFx0XHRyZXQgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0MTItXHRcdFx0XHRcdFx0X19zbWVfcGFnZV9wYShzcmNfcCkgJiM0Mzsgc19vZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU0VWIERlYnVnIENyeXB0b2dyYXBoeSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuIEl0IHNlZW1zIGBzZXZfZGJnX2NyeXB0YCBpcyB0aGUgY29yZSBjcnlwdG9ncmFwaGljIGZ1bmN0aW9uIGhlcmUuIEl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRgIGFuZCBgc2V2X2RiZ19lbmNyeXB0YCwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGZyb20gYHNldl9tZW1fZW5jX2lvY3RsYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24uIFNvLCBgc2V2X2RiZ19jcnlwdGAgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgY3J5cHRvZ3JhcGh5LCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkaW5nIHRoZSBzcGVjaWZpYyBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gY29udGV4dC4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXNseSB0byBkaXZlIGludG8gYHNldl9kYmdfY3J5cHRgIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9kYmdfY3J5cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI0MD1zdGF0aWMgaW50IHNldl9pc3N1ZV9kYmdfY21kKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmNfcGEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjU2OnN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI1Ny1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnBhLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI5Nz1zdGF0aWMgaW50IHNldl9kYmdfZGVjcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzA2Olx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHNyY19wLCBzcmMsIGxlbiwgXHUwMDI2c3JjX3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDctXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMjI9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzMS1cdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzMyOlx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKGRzdF9wLCBkc3QsIGxlbiwgXHUwMDI2ZHN0X3BhLCBcdTAwMjZucl9ieXRlcyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzMtXHRpZiAoIWJ1Zilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNTQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNTU6c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzU2LVx0XHRcdCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzND1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2OTItXHRjYXNlIEtWTV9TRVZfREJHX0VOQ1JZUFQ6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2OTM6XHRcdHIgPSBzZXZfZGJnX2NyeXB0KGt2bSwgXHUwMDI2c2V2X2NtZCwgc2V2X2NtZC5pZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2OTQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQxNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFViBEZWJ1ZyBFbmNyeXB0aW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlLiBJdCYjMzk7cyBoYW5kbGluZyB0aGUgYEtWTV9TRVZfREJHX0RFQ1JZUFRgIGFuZCBgS1ZNX1NFVl9EQkdfRU5DUllQVGAgaW9jdGxzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgaG93IHVzZXJzcGFjZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGVzZSBpb2N0bHMgdGhlbiBmdW5uZWwgaW50byBgc2V2X2RiZ19jcnlwdGAsIGFuZCB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb25zIGFyZSBlaXRoZXIgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBvciBgc2V2X2RiZ19lbmNyeXB0X3Nsb3dgLCBib3RoIG9mIHdoaWNoIHVzZSBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHRoZSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuCgpTbywgd2hlbiBJIHRoaW5rIGFib3V0IHdoZXJlIHRvIGZvY3VzIG15IGFuYWx5c2lzLCBgc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jYCwgYHNldl9kYmdfZGVjcnlwdF9zbG93YCwgYHNldl9kYmdfZW5jcnlwdF9zbG93YCwgYW5kIGBzZXZfZGJnX2NyeXB0YCBpbW1lZGlhdGVseSBqdW1wIG91dCBhcyB0aGUgaGlnaC12YWx1ZSB0YXJnZXRzLiBUaGVzZSBhcmUgdGhlIHN5bWJvbHMgSSBzaG91bGQgYmUgZGlnZ2luZyBpbnRvLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBoYXZlIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIEFueSBvdGhlciByZWxldmFudCBjb25maWc/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURfU0VWYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCYjMzk7cyBjcnVjaWFsIHRvIHRyaWdnZXJpbmcgdGhpcyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDYyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIGEgYm9vbGVhbiwgZ29vZCB0byBrbm93LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM6IGBLVk1fQU1EYCBhbmQgYEtWTV9BTURfU0VWYCBhcmUgYWxzbyBpbiB0aGUgbWl4LiBUaGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgcGVydGluZW50IGFyZSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBXYWl0IGEgc2Vjb25kLCB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBmbGFnIGlzIGdvaW5nIHRvIGluZGljYXRlIGlmIFNOUCBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBUaGlzIGlzIGltcG9ydGFudC4gQ2FuIHdlIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBldmVuIGlmIHdlICpkb24mIzM5O3QqIGhhdmUgcmVhbCBTTlAgaGFyZHdhcmU/CgpUaGUgY29kZSBzZWVtcyB0byBhZGQgYSBjaGVjayBmb3IgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGFuZCB0aGVuIGFsbG9jYXRlcyBhIGZ1bGwgcGFnZSBpZiB0aGF0IGNoZWNrIGlzIHBvc2l0aXZlLiBJZiB0aGUgZnV6emVyIGlzIHJ1bm5pbmcgb24gbm9uLVNOUCBoYXJkd2FyZSwgdGhhdCBjaGVjayB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlLCBhbmQgdGhlIGNvZGUgd2lsbCBqdXN0IGdvIGJhY2sgdG8gdXNpbmcgYGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtgIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4gQnV0LCB0aGlzIHBhdGNoICpkb2VzKiBtYWtlIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgY2hhbmdlIGlzIHJlYWNoYWJsZS4KClNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgaGl0IHRoYXQgbmV3IGNvZGUgcGF0aCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVT8gQW5kIHRoZSBhbnN3ZXIsIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgaXMgeWVzLCBhcyBsb25nIGFzIHRoZSBlbnZpcm9ubWVudCBwcm92aWRlcyBzb21lIGxldmVsIG9mIFNFVi1TTlAgZW11bGF0aW9uIG9yIHdlIHJ1biBpdCBvbiBhY3R1YWwgU0VWLVNOUCBoYXJkd2FyZS4gUUVNVSBkb2VzIHN1cHBvcnQgU0VWLVNOUC4gVGhhdCBtZWFucyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkp1c3QgdG8gYmUgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgcmVjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzLiBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX1NQX1BTUGAgLSBHb3QgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgQU1EX01FTV9FTkNSWVBUYCBpc24mIzM5O3QgYSBmYWN0b3IgaGVyZSwganVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9NRU1fRU5DUllQVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE0OTY9Y29uZmlnIFg4Nl9NRU1fRU5DUllQVFxuLS1cbmFyY2gveDg2L0tjb25maWctMTUwMC1cbmFyY2gveDg2L0tjb25maWc6MTUwMTpjb25maWcgQU1EX01FTV9FTkNSWVBUXG5hcmNoL3g4Ni9LY29uZmlnLTE1MDItXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gKFNNRSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEFNRCBNZW1vcnkgRW5jcnlwdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBBTURfTUVNX0VOQ1JZUFRgIHRoaW5nLiBGaXJzdCwgSSBuZWVkIHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IHNvbWUgcHJldHR5IHRpZ2h0IGludGVncmF0aW9uIHdpdGggdGhlIG1lbW9yeSBjb250cm9sbGVyLCBvYnZpb3VzbHkuIFRoYXQgaW1wbGllcyB0aGUgbG93LWxldmVsIGZpcm13YXJlIGFuZCBwb3NzaWJseSB0aGUgbWljcm9jb2RlIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbC4gV2UmIzM5O3JlIGdvaW5nIHRvIGJlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBrZXlzIGFyZSBwcm92aXNpb25lZCwgbWFuYWdlZCwgYW5kIGhvdyB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGFjdHVhbGx5IG9jY3Vycy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBiaXQgZmxpcDsgdGhlcmUgaGFzIHRvIGJlIGFuIGFyY2hpdGVjdHVyZS1sZXZlbCBjb21taXRtZW50LgoKSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UuIFdoYXQgb3ZlcmhlYWQgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFdpbGwgdGhpcyBiZSB0cmFuc3BhcmVudCBhdCB0aGUgT1MgbGV2ZWwsIG9yIGFyZSB0aGVyZSBnb2luZyB0byBiZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1bml0IChNTVUpIG9yIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdHJhbnNsYXRpb24gcHJvY2Vzcz8gQXJlIHRoZXJlIG5ldyBUTEIgaW1wbGljYXRpb25zIHRvIGtlZXAgdHJhY2sgb2YgZW5jcnlwdGlvbiBrZXlzPyBBbHNvLCBkb2VzIGl0IGFmZmVjdCB0aGUgY2FjaGUgaGllcmFyY2h5PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHNpZGUtY2hhbm5lbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBob3cgdGhleSYjMzk7dmUgYWRkcmVzc2VkIHRoZW0uIERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHZlY3RvcnMsIGZvciBpbnN0YW5jZSwgaW4gdGhlIGNvbnRleHQgb2YgRE1BPyBXaGF0IGFyZSB0aGUga2V5IHJvdGF0aW9uIG1lY2hhbmlzbXM/IEFyZSB0aGV5IHJvYnVzdD8gV2hhdCBhYm91dCB0aGUgc29mdHdhcmUgaW50ZXJmYWNlLCB0aGUgQVBJcywgbGlicmFyaWVzPyBXaGF0JiMzOTtzIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sLCBpcyBpdCBhdCB0aGUgcHJvY2VzcyBsZXZlbCBvciBzb21ldGhpbmcgYnJvYWRlcj8gQW55IGhvb2tzPyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBzZWN1cml0eSByZXF1aXJlbWVudHMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgZ3JhcGggdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDE6XHRjb25maWcgQU1EX01FTV9FTkNSWVBUXG4xNTAyOlx0XHRib29sIFwmIzM0O0FNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gKFNNRSkgc3VwcG9ydFwmIzM0O1xuMTUwMzpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4xNTA0Olx0XHRkZXBlbmRzIG9uIEVGSV9TVFVCXG4xNTA1Olx0XHRzZWxlY3QgRE1BX0NPSEVSRU5UX1BPT0xcbjE1MDY6XHRcdHNlbGVjdCBBUkNIX1VTRV9NRU1SRU1BUF9QUk9UXG4xNTA3Olx0XHRzZWxlY3QgSU5TVFJVQ1RJT05fREVDT0RFUlxuMTUwODpcdFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4xNTA5Olx0XHRzZWxlY3QgWDg2X01FTV9FTkNSWVBUXG4xNTEwOlx0XHRzZWxlY3QgVU5BQ0NFUFRFRF9NRU1PUllcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0ODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOgoKKipLVk1fQU1EX1NFViBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiBzb21ldGhpbmcgaGVyZS4gSSYjMzk7bSByZXZpc2l0aW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgS1ZNX0FNRF9TRVZgIGFuZCBgQU1EX01FTV9FTkNSWVBUYC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBhbmQgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCAqc2hvdWxkbiYjMzk7dCogcmVseSBvbiBgQU1EX01FTV9FTkNSWVBUYC4gSnVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGNyaXRpY2FsIGFzc3VtcHRpb24uIE5lZWQgdG8gZW5zdXJlIHRoZSBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlIGlzIHNvdW5kLiBTbywgSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYEtWTV9BTURfU0VWYCBjb25maWd1cmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbi4gR290dGEgYmUgcHJlY2lzZSBoZXJlLCBubyByb29tIGZvciBhbWJpZ3VpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgU0VWIGZlYXR1cmUgaXMgaW5kZXBlbmRlbnQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1lbW9yeSBlbmNyeXB0aW9uIHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU2Olx0Y29uZmlnIEtWTV9BTURfU0VWXG4gMTU3Olx0XHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiAxNTg6XHRcdGRlZmF1bHQgeVxuIDE1OTpcdFx0ZGVwZW5kcyBvbiBLVk1fQU1EIFx1MDAyNlx1MDAyNiBYODZfNjRcbiAxNjA6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXHUwMDI2XHUwMDI2ICEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxuIDE2MTpcdFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gMTYyOlx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxNjM6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIDE2NDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY1Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTQ3CgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBLVk0gU0VWIERlYnVnZ2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIHRhcmdldHMgZm9yIGZ1enppbmcgaGVyZSBhcmUgY2xlYXJseSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBjb21wb25lbnRzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gSSYjMzk7bGwgZmxhZyBgV29ydGhGdXp6aW5nPXRydWVgIHNpbmNlIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGFyZWEgdG8gZXhwbG9yZS4KCk5vdywgZm9yIGZvY3VzLCBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBTRVYgZGVidWdnaW5nIGFuZCBjcnlwdG8gb3BlcmF0aW9ucy4gVGhlIGtleSBzeW1ib2xzIGFyZTogYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AsIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AsIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGFuZCBgc2V2X2RiZ19jcnlwdGAuIFRoZXNlIGFyZSB3aGVyZSBJIGV4cGVjdCB0aGUgYWxsb2NhdGlvbiBsb2dpYyBtb2RpZmljYXRpb25zIHRvIGNvbWUgaW50byBwbGF5LgoKSW4gdGVybXMgb2YgZW5hYmxlbWVudCwgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQgZW5hYmxpbmcgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gVGhlc2UgY29uZmlndXJhdGlvbnMgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHRhcmdldGVkIGNvZGUuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgdXNlZCBieSBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLiBUaGlzIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gbWVhbnMgSSBjYW4gaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gcGF0aHMsIG1ha2luZyBmdXp6aW5nIGEgdmlhYmxlIGFuZCBwb3RlbnRpYWxseSBlZmZlY3RpdmUgYXBwcm9hY2ggdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jJiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZGVjcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZW5jcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfY3J5cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcyAoS1ZNX1NFVl9EQkdfREVDUllQVCwgS1ZNX1NFVl9EQkdfRU5DUllQVCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgS1ZNX01FTU9SWV9FTkNSWVBUX09QIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jJiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZGVjcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfZW5jcnlwdF9zbG93JiMzNDssCiAgICAmIzM0O3Nldl9kYmdfY3J5cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcyAoS1ZNX1NFVl9EQkdfREVDUllQVCwgS1ZNX1NFVl9EQkdfRU5DUllQVCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgS1ZNX01FTU9SWV9FTkNSWVBUX09QIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MDQuNTA2MjAyODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMDI3MzkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjA0LjUwNjIyNDg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk5ODEwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDEzZGRmYzQ5ODM3ZTJmNGNjZDM2YTZkNDgxZDkxZjEwMzQ2ZmJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDAyOjQ0OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNzRmYjE1NTUxZTgzZmEuLmUzNzMzZWQ5ZDU4ODZiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTEyODAsNiArMTI4MCwxNyBAQCBzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoKCpwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKCgqcGEgKyAqbnJfYnl0ZXMgLSAxKSBcXHUwMDI2IFBBR0VfTUFTSykpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElmIFNOUCBpcyBlbmFibGVkLCBpLmUuIHRoZSBSTVAgaXMgYWN0aXZlLCBhbGxvY2F0ZSBhIGZ1bGwgcGFnZSB0b1xcbitcXHQgKiBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gdGhlIHBhZ2UuICBBcyByZXF1aXJlZCBieSBmaXJtd2FyZSxcXG4rXFx0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxcbitcXHQgKiB0aGUgcGFnZSB0byBGaXJtd2FyZSB3aGlsZSB0aGUge0RFLEVOfUNSWVBUIG9wZXJhdGlvbiBpcyBpbi1wcm9ncmVzcyxcXG4rXFx0ICogYW5kIHNvIGNvbmN1cnJlbnQgc29mdHdhcmUgYWNjZXNzZXMgdG8gdGhlIHBhZ2Ugd2lsbCBlbmNvdW50ZXJcXG4rXFx0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xcbitcXHQgKi9cXG4rXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuK1xcdFxcdHJldHVybiBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuK1xcbiBcXHRyZXR1cm4ga21hbGxvYygqbnJfYnl0ZXMsIEdGUF9LRVJORUwpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDowNS4wMTY4ODczMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjM3OTIwNDY5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQxM2RkZmM0OTgzN2UyZjRjY2QzNmE2ZDQ4MWQ5MWYxMDM0NmZiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDAyOjQ0OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi5lMzczM2VkOWQ1ODg2YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0xMjgwLDYgKzEyODAsMTcgQEAgc3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxuIFx0aWYgKFdBUk5fT05fT05DRSgoKnBhIFx1MDAyNiBQQUdFX01BU0spICE9ICgoKnBhICsgKm5yX2J5dGVzIC0gMSkgXHUwMDI2IFBBR0VfTUFTSykpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdC8qXG4rXHQgKiBJZiBTTlAgaXMgZW5hYmxlZCwgaS5lLiB0aGUgUk1QIGlzIGFjdGl2ZSwgYWxsb2NhdGUgYSBmdWxsIHBhZ2UgdG9cbitcdCAqIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4gIEFzIHJlcXVpcmVkIGJ5IGZpcm13YXJlLFxuK1x0ICogdGhlIFBTUCBkcml2ZXIgdXBkYXRlcyB0aGUgUk1QIHRvIHRlbXBvcmFyaWx5IHRyYW5zZmVyIG93bmVyc2hpcCBvZlxuK1x0ICogdGhlIHBhZ2UgdG8gRmlybXdhcmUgd2hpbGUgdGhlIHtERSxFTn1DUllQVCBvcGVyYXRpb24gaXMgaW4tcHJvZ3Jlc3MsXG4rXHQgKiBhbmQgc28gY29uY3VycmVudCBzb2Z0d2FyZSBhY2Nlc3NlcyB0byB0aGUgcGFnZSB3aWxsIGVuY291bnRlclxuK1x0ICogc2VlbWluZ2x5IHNwdXJpb3VzIFJNUCAjUEYgdmlvbGF0aW9uc1xuK1x0ICovXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbitcdFx0cmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbitcbiBcdHJldHVybiBrbWFsbG9jKCpucl9ieXRlcywgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MDUuMDE2ODg4NDU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MjQwNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNWTSBTRVYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgY29uZGl0aW9uYWwgY2hlY2sgaGVyZSwgc3BlY2lmaWNhbGx5IGBpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlgLiBJZiB0aGF0IGNoZWNrIHBhc3Nlcywgd2UncmUgbm93IGFsbG9jYXRpbmcgYSBmdWxsIGBQQUdFX1NJWkVgIHdpdGggYGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsbHkgcmVxdWVzdGVkIGAqbnJfYnl0ZXNgIHVzaW5nIGBrbWFsbG9jKCpucl9ieXRlcywgR0ZQX0tFUk5FTClgLiBJIG5lZWQgdG8gZGlnIGludG8gYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBTRVYtU05QIHN1cHBvcnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBhbGxvY2F0aW9uIHNpemUgY2hhbmdlIGlzIG5lY2Vzc2FyeSB3aGVuIFNOUCBpcyBlbmFibGVkLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gV2hhdCdzIGl0IGJlaW5nIHVzZWQgZm9yPyBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDowOS42NzkyOTY1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg3MzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNDA9c3RhdGljIGludCBzZXZfaXNzdWVfZGJnX2NtZChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjX3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI1NjpzdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjU3LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnBhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjk3PXN0YXRpYyBpbnQgc2V2X2RiZ19kZWNyeXB0X3Nsb3coc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzMDY6XFx0YnVmID0gc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHNyY19wLCBzcmMsIGxlbiwgXFx1MDAyNnNyY19wYSwgXFx1MDAyNm5yX2J5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDctXFx0aWYgKCFidWYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzMjI9c3RhdGljIGludCBzZXZfZGJnX2VuY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzMxLVxcdC8qIERlY3J5cHQgdGhlIF9kZXN0aW5hdGlvbl8gdG8gZG8gYSBSTVcgb24gcGxhaW50ZXh0LiAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMzMjpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2MoZHN0X3AsIGRzdCwgbGVuLCBcXHUwMDI2ZHN0X3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMzMy1cXHRpZiAoIWJ1ZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MDkuNzcxMTc1NDUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNjE2NDY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgS1ZNIFNFViBEZWJ1Z2dpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLCB3aGljaCBJIGtub3cgaXMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgYHNldl9kYmdfZGVjcnlwdF9zbG93YCBhbmQgYHNldl9kYmdfZW5jcnlwdF9zbG93YC4gVGhvc2UgYXJlIHByZXR0eSBjbGVhcmx5IHJlbGF0ZWQgdG8gZGVidWdnaW5nIFNFViDigJMgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiDigJMgd2l0aGluIEtWTS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgd2hlcmUgdGhpcyBzdHVmZiBwbGF5czsgaW4gdGhpcyBjYXNlLCBJJ20gdGhpbmtpbmcgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gWWVzLCBRRU1VIGRvZXMgc3VwcG9ydCBTRVYgYW5kIHRoZSBuZXdlciBTRVYtU05QLlxuXG5CdXQgaGVyZSdzIHRoZSBraWNrZXI6IFNFViBhbmQgU0VWLVNOUCBhcmUgZnVuZGFtZW50YWxseSBoYXJkd2FyZSBmZWF0dXJlcy4gVGhleSdyZSB0aWVkIHRvIEFNRCBFUFlDIHByb2Nlc3NvcnMuIFRoaXMgbGVhZHMgdG8gdGhlIGZ1bmRhbWVudGFsIHF1ZXN0aW9uOiBjYW4gd2UgZW11bGF0ZSBvciBmdXp6IHRoZXNlIGhhcmR3YXJlIGFzcGVjdHM/IFR5cGljYWxseSB3aXRoIEtWTSBmZWF0dXJlcywgd2UgdXNlIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBhbmQgYC9kZXYva3ZtYC4gU28sIGNhbiB3ZSBhcHBseSB0aGUgdXN1YWwgZnV6emluZyB0ZWNobmlxdWVzIGhlcmU/XG5cbkZ1bmN0aW9uYWxseSwgdGhlIHBhdGNoIHNlZW1zIHNvdW5kLiBUaGUgbWFpbiBmb2N1cyBpcyBub3cgZmluZGluZyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHN1cHBvcnQgdGhlIGRlYnVnZ2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjE0Ljk5NzM0MTY1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjM5NzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjE1LjA4OTc0OTQxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDM5MzUxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFNFViBDb25maWd1cmF0aW9uIGluIEtWTSBmb3IgQU1EIFN5c3RlbXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uZmlnIG9wdGlvbnMgd2UncmUgZGVhbGluZyB3aXRoIGFyZSBgS1ZNX0FNRGAgYW5kIGBLVk1fQU1EX1NFVmAuIFByZXR0eSBzdGFuZGFyZCBzdHVmZi4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzLCBuYXR1cmFsbHksIHdpdGggYEtWTV9BTURfU0VWYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIEFNRCdzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgdGVjaG5vbG9neSB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLiBNeSBpbnRlcm5hbCBjaGVja2xpc3QgaXMgYWxyZWFkeSBydW5uaW5nIOKAkyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24sIGd1ZXN0IGlzb2xhdGlvbiwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuIEkgd2FudCB0byBkaXZlIGludG8gKndoeSogd2UncmUgY2hlY2tpbmcgdGhpcyBzcGVjaWZpYyBvcHRpb24uIEFyZSB3ZSBjb25maXJtaW5nIGl0J3MgZW5hYmxlZD8gRGlzYWJsZWQ/IFRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uPyBEZWJ1Z2dpbmcgYSBTRVYtcmVsYXRlZCBpc3N1ZT8gTXkgbmV4dCB0aG91Z2h0IGlzIGxpa2VseSBnb2luZyB0byBpbnZvbHZlIGNoZWNraW5nIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCB0aGUga2VybmVsIGNvbmZpZyBmaWxlLCBvciBtYXliZSBldmVuIGRpZ2dpbmcgaW50byB0aGUgY29kZSB3aGVyZSB0aGF0IG9wdGlvbiBpcyB1c2VkIHRvIGdldCBtb3JlIGNvbnRleHQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IFNFViBpcyBiZWluZyBoYW5kbGVkIGluIHRoaXMgc3BlY2lmaWMgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDoyMS40MzM2ODcyODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDE0MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjIxLjU1OTcwNzE1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzExNDU4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFzc2Vzc2luZyBTRVYgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBLVk0gc2V0dXAgYW5kIHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gSSBoYXZlIGlzLCBpcyBzaW1wbHkgZW5hYmxpbmcgYEtWTV9BTURfU0VWYCBzdWZmaWNpZW50LCBvciBhbSBJIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBtb3JlIG51YW5jZWQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApPyBXZSBhbGwga25vdyBTRVYgaXMgdGhlIHVtYnJlbGxhIHRlcm0sIGFuZCBTTlAgaXMgdGhlIGNyaXRpY2FsIHBhcnQgdGhhdCBwcm92aWRlcyB0aGUgc3Ryb25nZXN0IHNlY3VyaXR5IGd1YXJhbnRlZXMuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGgsIFwiSXMgdGhlIGRlZmF1bHQgU0VWIGNvbmZpZ3VyYXRpb24gcHJvdmlkaW5nIGZ1bGwgU05QIGZ1bmN0aW9uYWxpdHksIG9yIGlzIHRoZXJlIGEgc2VwYXJhdGUgc2V0IG9mIGtlcm5lbCBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgXCJzZXQgaXQgYW5kIGZvcmdldCBpdFwiIHNpdHVhdGlvbiwgb3IgaWYgdGhlcmUgYXJlIGtub2Igc2V0dGluZ3MgdGhhdCBJIHNob3VsZCBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6MjUuODkwODU1NTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxNTEyNDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNFVl9TTlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjI2LjAxNTAxODE1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUwMzQzMTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHdpbGwgZGljdGF0ZSBob3cgdGhlIGtlcm5lbCBiZWhhdmVzIG9uIHg4NiBwbGF0Zm9ybXMuIEknbSBhbnRpY2lwYXRpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIOKAkyBwcm9jZXNzb3IgZmVhdHVyZXMsIGJvb3Qgb3B0aW9ucywgbWVtb3J5IGxheW91dCBjb25maWd1cmF0aW9ucyDigJMgdGhlIG5pdHR5LWdyaXR0eSB0aGF0IHJlYWxseSBkZWZpbmVzIGFuIHg4NiBrZXJuZWwgYnVpbGQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgKGFuZCBwb3RlbnRpYWxseSB0d2Vha2luZykgYW55IGtlcm5lbCBiZWhhdmlvciB0aGF0J3MgcGxhdGZvcm0gZGVwZW5kZW50LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDo0MC41MTg0NTEwNTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzU0NTAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTRVZfU05QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ0OjQwLjYxNzgxMzcwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwNjE2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBLVk0gYW5kIEFNRCBTRVYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0IHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gVGltZSB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBmaXJzdCBwbGFjZSB0byBsb29rLCBuYXR1cmFsbHksIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMgbGl2ZSwgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNIGZvciB4ODYgcHJvY2Vzc29ycyBhcmUgZGVmaW5lZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgYSByZWxldmFudCBvcHRpb24sIGxpa2VseSBuYW1lZCBzb21ldGhpbmcgbGlrZSBgS1ZNX0FNRF9TRVZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGlzIGlzIHRoZSBpbmRpY2F0b3Igb2Ygd2hldGhlciBTRVYgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBLVk0ga2VybmVsIG1vZHVsZSBvciBub3QuIFVuZGVyc3RhbmRpbmcgdGhpcyBvcHRpb24gaXMgY3J1Y2lhbCBiZWZvcmUgYXR0ZW1wdGluZyBhbnkgZGVwbG95bWVudCBvciBkZWJ1Z2dpbmcgdGhhdCB1dGlsaXplcyBBTUQgU0VWIGZlYXR1cmVzLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgZmVhdHVyZSBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaG93IGl0J3MgYWN0aXZhdGVkIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgdW5kZXJzdGFuZGluZyBpcyBmb3VuZGF0aW9uYWwgZm9yIGFueSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6NDQuOTQ4NDMyNDEyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6NDQuOTQ4NTI0NDcyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTU3ODE4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipDb25maWd1cmF0aW9uIEh1bnRpbmcgZm9yIEFNRC1TcGVjaWZpYyBLVk0gRmVhdHVyZXMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgS1ZNIGNvbmZpZ3VyYXRpb25zIOKAkyBgS1ZNX0FNRGAgYW5kIGBLVk1fQU1EX1NFVmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIEFNRCB2aXJ0dWFsaXphdGlvbi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBgQ1JZUFRPX0RFVl9TUF9QU1BgIHNldHRpbmcuIEl0J3MgcmVsYXRlZCB0byBzZWN1cml0eSBhbmQgQU1EIFBTUCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB0aGF0IGluIG15IGFzc2Vzc21lbnQuXG5cbkkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgQU1ELXNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHVzZWQgaW4gdGhlIEtlcm5lbC4gSSBzZWUgdGhlIGNvZGUgdXNpbmcgYENDX0FUVFJfSE9TVF9TRVZfU05QYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgKnRoYXQqIG9uZSBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBhbmQgd2hhdCBpdCBjb250cm9scy4gSXQncyB0aW1lIHRvIGRpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDQ6NDguNDY0MzA5NDI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIyNTY5MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNDX0FUVFJfSE9TVF9TRVZfU05QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVxcdFxcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVxcdHN3aXRjaCAoYXR0cikge1xcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcXHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cXHRcXHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1ND1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3MS1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzcyOlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzMtXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NC1cXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc1OlxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjM1PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjU4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyNTk6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjYwLVxcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNTY9c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5MTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTItXFx0XFx0cmV0dXJuIGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA1Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2MC1cXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxNjE6XFx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MDc9c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTExLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkxMjpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTEzLVxcdFxcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTMwPXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTM0OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXFx0ICovXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYzoxMTE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXFx0XFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM9MTk9c3RhdGljIGludCBfX2luaXQgaW5pdF9zZXZfY29uZmlnKGNoYXIgKnN0cilcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTM1PXN0YXRpYyB2b2lkIG1mZF9yZWNvbmZpZ3VyZSh2b2lkICphcmcpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2LXtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMzc6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDY9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDktXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTUwOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjQ4PXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjUyLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI1MzpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjU0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTU2Mj1pbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTYzLXtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1NjQ6XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTY1LVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzUyPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc1Ni1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NTc6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc1OC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTg3OD1pbnQgcHNtYXNoKHU2NCBwZm4pXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04ODItXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6ODgzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04ODQtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz05ODc9c3RhdGljIGludCBybXB1cGRhdGUodTY0IHBmbiwgc3RydWN0IHJtcF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05OTEtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6OTkyOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05OTMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMDgwPXZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDg1LVxcdCAqL1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEwODY6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA4Ny1cXHRcXHR3YmludmQoKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1ND1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTM2MzpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzY0LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xOTAzPXN0YXRpYyBpbnQgc2V2X2dldF9hcGlfdmVyc2lvbih2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xOTEyLVxcdCAqL1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTkxMzpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTkxNC1cXHRcXHRyZXQgPSBzbnBfZ2V0X3BsYXRmb3JtX2RhdGEoc2V2LCBcXHUwMDI2ZXJyb3IpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yODMzPXU2NCBzZXZfZ2V0X3NucF9wb2xpY3lfYml0cyh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yODM4LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjgzOTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yODQwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTMzNzI9c3RhdGljIF9faW5pdCB2b2lkIGlvbW11X3NucF9lbmFibGUodm9pZClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzc0LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM3NTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MDgtZGlzYWJsZV9zbnA6XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM0MDk6XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDEwLSNlbmRpZlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM1MzQ9c3RhdGljIGludCBfX2luaXQgaW9tbXVfZ29fdG9fc3RhdGUoZW51bSBpb21tdV9pbml0X3N0YXRlIHN0YXRlKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1NTQtXFx0ICovXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1NTU6XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1NTYtXFx0ICAgICFXQVJOX09OX09OQ0UoYW1kX2lvbW11X3NucF9lbikpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1NTc6XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTU4LVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM2NjE9dm9pZCBfX2luaXQgYW1kX2lvbW11X2RldGVjdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM2ODAtZGlzYWJsZV9zbnA6XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM2ODE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM2ODI6XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNjgzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaD0yMj1lbnVtIGNjX2F0dHIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTkyLVxcdC8qKlxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5MzpcXHQgKiBAQ0NfQVRUUl9IT1NUX1NFVl9TTlA6IEFNRCBTTlAgZW5hYmxlZCBvbiB0aGUgaG9zdC5cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTQtXFx0ICpcXG4tLVxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05Ny1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg6OTg6XFx0Q0NfQVRUUl9IT1NUX1NFVl9TTlAsXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NDo1Mi43ODY4ODUzMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE3OTM4MjQ3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRVYgRGVidWcgQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBmbGFnZ2VkIGluIGBpbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmhgLiBJdCdzIGVuYWJsZWQgaW4gYGFtZC5jYCBpZiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgd29ya3MuIFN0YW5kYXJkIGhhcmR3YXJlIGZlYXR1cmUgY2hlY2ssIG5vdGhpbmcgdG9vIHN1cnByaXNpbmcgdGhlcmUuIEJ1dCwgSSBzZWUgdGhleSdyZSBlbmFibGluZyBgS1ZNX0FNRF9TRVZgIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgIHRvIGZvcmNlIGNvbXBpbGUgc3VwcG9ydCwgcmVnYXJkbGVzcyBvZiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VuY2UuIFNtYXJ0LlxuXG5Ob3csIHRoZSBwYXRjaCB0b3VjaGVzIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHRoYXTigJlzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AgYW5kIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIEFoLCByaWdodCwgdGhvc2UgaW4gdHVybiBhcmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBgc2V2X2lzc3VlX2RiZ19jbWRgIGZsb3c6IGBzZXZfaXNzdWVfZGJnX2NtZGAgLVx1MDAzZSBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIG9yIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludCwgc28gSSBzaG91bGQgc2VlIHdoZXJlIGBzZXZfaXNzdWVfZGJnX2NtZGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20uIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hlcmUgdGhpcyBkZWJ1ZyBjb2RlIG1pZ2h0IGJlIHRyaWdnZXJlZC4gTGV0J3MgdHJhY2UgaXQgYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NToxNC41ODA3MTQzMTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDI1MDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfaXNzdWVfZGJnX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTIxND1zdGF0aWMgaW50IHNldl9ndWVzdF9zdGF0dXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyMzktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjQwOnN0YXRpYyBpbnQgc2V2X2lzc3VlX2RiZ19jbWQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHNyY19wYSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNDEtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGRzdF9wYSwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMxMDpcXHRyID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLCBzcmNfcGEsIF9fc21lX3NldChfX3BhKGJ1ZikpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMxMS1cXHRcXHRcXHQgICAgICBucl9ieXRlcywgS1ZNX1NFVl9EQkdfREVDUllQVCwgZXJyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTMyMj1zdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzM2OlxcdHIgPSBzZXZfaXNzdWVfZGJnX2NtZChrdm0sIGRzdF9wYSwgX19zbWVfc2V0KF9fcGEoYnVmKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzM3LVxcdFxcdFxcdCAgICAgIG5yX2J5dGVzLCBLVk1fU0VWX0RCR19ERUNSWVBULCBlcnIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzQ3LVxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzNDg6XFx0XFx0ciA9IHNldl9pc3N1ZV9kYmdfY21kKGt2bSwgX19zbWVfc2V0KF9fcGEoYnVmKSksIGRzdF9wYSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzNDktXFx0XFx0XFx0XFx0ICAgICAgbnJfYnl0ZXMsIEtWTV9TRVZfREJHX0VOQ1JZUFQsIGVycik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEzNTU9c3RhdGljIGludCBzZXZfZGJnX2NyeXB0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDEwLVxcdFxcdGlmIChJU19BTElHTkVEKHNyYywgMTYpIFxcdTAwMjZcXHUwMDI2IElTX0FMSUdORUQoZHN0LCAxNikgXFx1MDAyNlxcdTAwMjYgSVNfQUxJR05FRChsZW4sIDE2KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0MTE6XFx0XFx0XFx0cmV0ID0gc2V2X2lzc3VlX2RiZ19jbWQoa3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQxMi1cXHRcXHRcXHRcXHRcXHRcXHRfX3NtZV9wYWdlX3BhKHNyY19wKSArIHNfb2ZmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NToxNS4wMTA5NjkxMTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODI4NjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU0VWIERlYnVnIENyeXB0b2dyYXBoeSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLiBJdCBzZWVtcyBgc2V2X2RiZ19jcnlwdGAgaXMgdGhlIGNvcmUgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbiBoZXJlLiBJdCdzIGNhbGxlZCBieSBib3RoIGBzZXZfZGJnX2RlY3J5cHRgIGFuZCBgc2V2X2RiZ19lbmNyeXB0YCwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGZyb20gYHNldl9tZW1fZW5jX2lvY3RsYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGVuY3J5cHRpb24uIFNvLCBgc2V2X2RiZ19jcnlwdGAgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgY3J5cHRvZ3JhcGh5LCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkaW5nIHRoZSBzcGVjaWZpYyBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gY29udGV4dC4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXNseSB0byBkaXZlIGludG8gYHNldl9kYmdfY3J5cHRgIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjE5LjU5OTI1NzA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NDUxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X2RiZ19jcnlwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI0MD1zdGF0aWMgaW50IHNldl9pc3N1ZV9kYmdfY21kKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmNfcGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMjU2OnN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyNTctXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgbG9uZyAqcGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyOTc9c3RhdGljIGludCBzZXZfZGJnX2RlY3J5cHRfc2xvdyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgc3JjLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzA1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwNjpcXHRidWYgPSBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3JjX3AsIHNyYywgbGVuLCBcXHUwMDI2c3JjX3BhLCBcXHUwMDI2bnJfYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwNy1cXHRpZiAoIWJ1ZilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTMyMj1zdGF0aWMgaW50IHNldl9kYmdfZW5jcnlwdF9zbG93KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzcmMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMzEtXFx0LyogRGVjcnlwdCB0aGUgX2Rlc3RpbmF0aW9uXyB0byBkbyBhIFJNVyBvbiBwbGFpbnRleHQuICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzMyOlxcdGJ1ZiA9IHNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhkc3RfcCwgZHN0LCBsZW4sIFxcdTAwMjZkc3RfcGEsIFxcdTAwMjZucl9ieXRlcyk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzMzLVxcdGlmICghYnVmKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzU0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTM1NTpzdGF0aWMgaW50IHNldl9kYmdfY3J5cHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMzU2LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM0PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjkyLVxcdGNhc2UgS1ZNX1NFVl9EQkdfRU5DUllQVDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2OTM6XFx0XFx0ciA9IHNldl9kYmdfY3J5cHQoa3ZtLCBcXHUwMDI2c2V2X2NtZCwgc2V2X2NtZC5pZCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjk0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NToxOS43MTA5MDY4NTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxODA1OTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFViBEZWJ1ZyBFbmNyeXB0aW9uIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSXQncyBoYW5kbGluZyB0aGUgYEtWTV9TRVZfREJHX0RFQ1JZUFRgIGFuZCBgS1ZNX1NFVl9EQkdfRU5DUllQVGAgaW9jdGxzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgaG93IHVzZXJzcGFjZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZXNlIGlvY3RscyB0aGVuIGZ1bm5lbCBpbnRvIGBzZXZfZGJnX2NyeXB0YCwgYW5kIHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbnMgYXJlIGVpdGhlciBgc2V2X2RiZ19kZWNyeXB0X3Nsb3dgIG9yIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGJvdGggb2Ygd2hpY2ggdXNlIGBzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2NgLiBJdCBsb29rcyBsaWtlIHRoZXNlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyBhcmUgdGhlIGNvcmUgb2YgdGhlIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy5cblxuU28sIHdoZW4gSSB0aGluayBhYm91dCB3aGVyZSB0byBmb2N1cyBteSBhbmFseXNpcywgYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AsIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AsIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGFuZCBgc2V2X2RiZ19jcnlwdGAgaW1tZWRpYXRlbHkganVtcCBvdXQgYXMgdGhlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhlc2UgYXJlIHRoZSBzeW1ib2xzIEkgc2hvdWxkIGJlIGRpZ2dpbmcgaW50by5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gQW55IG90aGVyIHJlbGV2YW50IGNvbmZpZz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgS1ZNX0FNRF9TRVZgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQncyBjcnVjaWFsIHRvIHRyaWdnZXJpbmcgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDE2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjI1LjAyODk3NjE2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NzY1MTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjI3LjgxNjYzMTU3NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ0NTMyMTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIGEgYm9vbGVhbiwgZ29vZCB0byBrbm93LiBMZXQncyBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uczogYEtWTV9BTURgIGFuZCBgS1ZNX0FNRF9TRVZgIGFyZSBhbHNvIGluIHRoZSBtaXguIFRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBwZXJ0aW5lbnQgYXJlIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIFdhaXQgYSBzZWNvbmQsIHRoZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGZsYWcgaXMgZ29pbmcgdG8gaW5kaWNhdGUgaWYgU05QIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuIFRoaXMgaXMgaW1wb3J0YW50LiBDYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGV2ZW4gaWYgd2UgKmRvbid0KiBoYXZlIHJlYWwgU05QIGhhcmR3YXJlP1xuXG5UaGUgY29kZSBzZWVtcyB0byBhZGQgYSBjaGVjayBmb3IgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGFuZCB0aGVuIGFsbG9jYXRlcyBhIGZ1bGwgcGFnZSBpZiB0aGF0IGNoZWNrIGlzIHBvc2l0aXZlLiBJZiB0aGUgZnV6emVyIGlzIHJ1bm5pbmcgb24gbm9uLVNOUCBoYXJkd2FyZSwgdGhhdCBjaGVjayB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlLCBhbmQgdGhlIGNvZGUgd2lsbCBqdXN0IGdvIGJhY2sgdG8gdXNpbmcgYGttYWxsb2MoKm5yX2J5dGVzLCBHRlBfS0VSTkVMKTtgIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4gQnV0LCB0aGlzIHBhdGNoICpkb2VzKiBtYWtlIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgY2hhbmdlIGlzIHJlYWNoYWJsZS5cblxuU28gdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSBoaXQgdGhhdCBuZXcgY29kZSBwYXRoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VPyBBbmQgdGhlIGFuc3dlciwgaWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIGlzIHllcywgYXMgbG9uZyBhcyB0aGUgZW52aXJvbm1lbnQgcHJvdmlkZXMgc29tZSBsZXZlbCBvZiBTRVYtU05QIGVtdWxhdGlvbiBvciB3ZSBydW4gaXQgb24gYWN0dWFsIFNFVi1TTlAgaGFyZHdhcmUuIFFFTVUgZG9lcyBzdXBwb3J0IFNFVi1TTlAuIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkp1c3QgdG8gYmUgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgcmVjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzLiBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX1NQX1BTUGAgLSBHb3QgaXQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBBTURfTUVNX0VOQ1JZUFRgIGlzbid0IGEgZmFjdG9yIGhlcmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDYyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjM4LjI2MTk1NjMyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3NTcyNDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX01FTV9FTkNSWVBUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE0OTY9Y29uZmlnIFg4Nl9NRU1fRU5DUllQVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNTAwLVxcbmFyY2gveDg2L0tjb25maWc6MTUwMTpjb25maWcgQU1EX01FTV9FTkNSWVBUXFxuYXJjaC94ODYvS2NvbmZpZy0xNTAyLVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gKFNNRSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDU6NDAuOTM3Njg1NTc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODcxMzA0MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBBTUQgTWVtb3J5IEVuY3J5cHRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBBTURfTUVNX0VOQ1JZUFRgIHRoaW5nLiBGaXJzdCwgSSBuZWVkIHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBzb21lIHByZXR0eSB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciwgb2J2aW91c2x5LiBUaGF0IGltcGxpZXMgdGhlIGxvdy1sZXZlbCBmaXJtd2FyZSBhbmQgcG9zc2libHkgdGhlIG1pY3JvY29kZSBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIFdlJ3JlIGdvaW5nIHRvIGJlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBrZXlzIGFyZSBwcm92aXNpb25lZCwgbWFuYWdlZCwgYW5kIGhvdyB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGFjdHVhbGx5IG9jY3Vycy4gVGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIGJpdCBmbGlwOyB0aGVyZSBoYXMgdG8gYmUgYW4gYXJjaGl0ZWN0dXJlLWxldmVsIGNvbW1pdG1lbnQuXG5cbkkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBXaGF0IG92ZXJoZWFkIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBXaWxsIHRoaXMgYmUgdHJhbnNwYXJlbnQgYXQgdGhlIE9TIGxldmVsLCBvciBhcmUgdGhlcmUgZ29pbmcgdG8gYmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAoTU1VKSBvciB0aGUgdmlydHVhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHByb2Nlc3M/IEFyZSB0aGVyZSBuZXcgVExCIGltcGxpY2F0aW9ucyB0byBrZWVwIHRyYWNrIG9mIGVuY3J5cHRpb24ga2V5cz8gQWxzbywgZG9lcyBpdCBhZmZlY3QgdGhlIGNhY2hlIGhpZXJhcmNoeT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgaG93IHRoZXkndmUgYWRkcmVzc2VkIHRoZW0uIERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHZlY3RvcnMsIGZvciBpbnN0YW5jZSwgaW4gdGhlIGNvbnRleHQgb2YgRE1BPyBXaGF0IGFyZSB0aGUga2V5IHJvdGF0aW9uIG1lY2hhbmlzbXM/IEFyZSB0aGV5IHJvYnVzdD8gV2hhdCBhYm91dCB0aGUgc29mdHdhcmUgaW50ZXJmYWNlLCB0aGUgQVBJcywgbGlicmFyaWVzPyBXaGF0J3MgdGhlIGdyYW51bGFyaXR5IG9mIGNvbnRyb2wsIGlzIGl0IGF0IHRoZSBwcm9jZXNzIGxldmVsIG9yIHNvbWV0aGluZyBicm9hZGVyPyBBbnkgaG9va3M/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIHNlY3VyaXR5IHJlcXVpcmVtZW50cy4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgZGVwZW5kZW5jeSBncmFwaCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDU6NTIuODA4OTkyMzE1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Njk5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDE6XFx0Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxcbjE1MDI6XFx0XFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBNZW1vcnkgRW5jcnlwdGlvbiAoU01FKSBzdXBwb3J0XFxcIlxcbjE1MDM6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4xNTA0OlxcdFxcdGRlcGVuZHMgb24gRUZJX1NUVUJcXG4xNTA1OlxcdFxcdHNlbGVjdCBETUFfQ09IRVJFTlRfUE9PTFxcbjE1MDY6XFx0XFx0c2VsZWN0IEFSQ0hfVVNFX01FTVJFTUFQX1BST1RcXG4xNTA3OlxcdFxcdHNlbGVjdCBJTlNUUlVDVElPTl9ERUNPREVSXFxuMTUwODpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4xNTA5OlxcdFxcdHNlbGVjdCBYODZfTUVNX0VOQ1JZUFRcXG4xNTEwOlxcdFxcdHNlbGVjdCBVTkFDQ0VQVEVEX01FTU9SWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwMjo0NTo1Mi44MDkxODA2NzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4ODI3NDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nIHByb2Nlc3M6XG5cbioqS1ZNX0FNRF9TRVYgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gc29tZXRoaW5nIGhlcmUuIEknbSByZXZpc2l0aW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgS1ZNX0FNRF9TRVZgIGFuZCBgQU1EX01FTV9FTkNSWVBUYC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBhbmQgYmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4sIGl0ICpzaG91bGRuJ3QqIHJlbHkgb24gYEFNRF9NRU1fRU5DUllQVGAuIEp1c3Qgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCBjcml0aWNhbCBhc3N1bXB0aW9uLiBOZWVkIHRvIGVuc3VyZSB0aGUgbG9naWMgYW5kIGFyY2hpdGVjdHVyZSBpcyBzb3VuZC4gU28sIEknbSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYEtWTV9BTURfU0VWYCBjb25maWd1cmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbi4gR290dGEgYmUgcHJlY2lzZSBoZXJlLCBubyByb29tIGZvciBhbWJpZ3VpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgU0VWIGZlYXR1cmUgaXMgaW5kZXBlbmRlbnQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1lbW9yeSBlbmNyeXB0aW9uIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0ODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ1OjU4LjE5NzQ1ODU3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDI6NDU6NTguMTk3NTIzNjU0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDg0NDY2MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEtWTSBTRVYgRGVidWdnaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIHRhcmdldHMgZm9yIGZ1enppbmcgaGVyZSBhcmUgY2xlYXJseSBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBUaGV5J3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJ2xsIGZsYWcgYFdvcnRoRnV6emluZz10cnVlYCBzaW5jZSB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcmVhIHRvIGV4cGxvcmUuXG5cbk5vdywgZm9yIGZvY3VzLCBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBTRVYgZGVidWdnaW5nIGFuZCBjcnlwdG8gb3BlcmF0aW9ucy4gVGhlIGtleSBzeW1ib2xzIGFyZTogYHNldl9kYmdfY3J5cHRfc2xvd19hbGxvY2AsIGBzZXZfZGJnX2RlY3J5cHRfc2xvd2AsIGBzZXZfZGJnX2VuY3J5cHRfc2xvd2AsIGFuZCBgc2V2X2RiZ19jcnlwdGAuIFRoZXNlIGFyZSB3aGVyZSBJIGV4cGVjdCB0aGUgYWxsb2NhdGlvbiBsb2dpYyBtb2RpZmljYXRpb25zIHRvIGNvbWUgaW50byBwbGF5LlxuXG5JbiB0ZXJtcyBvZiBlbmFibGVtZW50LCBJJ20gY29uZmlkZW50IGFib3V0IGVuYWJsaW5nIGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXJnZXRlZCBjb2RlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgdXNlZCBieSBLVk0gU0VWIGRlYnVnZ2luZyBjb21tYW5kcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgS1ZNX1NFVl9EQkdfREVDUllQVGAgYW5kIGBLVk1fU0VWX0RCR19FTkNSWVBUYC4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLiBUaGlzIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gbWVhbnMgSSBjYW4gaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gcGF0aHMsIG1ha2luZyBmdXp6aW5nIGEgdmlhYmxlIGFuZCBwb3RlbnRpYWxseSBlZmZlY3RpdmUgYXBwcm9hY2ggdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTQ3LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAyOjQ2OjA4LjY4MTk5MjgxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjkzODI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jXCIsXG4gICAgXCJzZXZfZGJnX2RlY3J5cHRfc2xvd1wiLFxuICAgIFwic2V2X2RiZ19lbmNyeXB0X3Nsb3dcIixcbiAgICBcInNldl9kYmdfY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIEtWTSBTRVYgZGVidWdnaW5nIGNvbW1hbmRzIChLVk1fU0VWX0RCR19ERUNSWVBULCBLVk1fU0VWX0RCR19FTkNSWVBUKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBLVk1fTUVNT1JZX0VOQ1JZUFRfT1AgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[1] Phase: Succeeded StartedAt: 2026-07-24 02:46:20 +0000 UTC FinishedAt: 2026-07-24 02:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 02:46:20 +0000 UTC FinishedAt: 2026-07-24 02:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2] Phase: Succeeded StartedAt: 2026-07-24 02:46:20 +0000 UTC FinishedAt: 2026-07-24 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 02:46:20 +0000 UTC FinishedAt: 2026-07-24 04:37:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 02:46:20 +0000 UTC FinishedAt: 2026-07-24 02:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 02:46:20 +0000 UTC FinishedAt: 2026-07-24 02:47:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowdgffj/series-workflowdgffj-convert-artifact-3141989238/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 02:47:23 +0000 UTC FinishedAt: 2026-07-24 03:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 02:47:23 +0000 UTC FinishedAt: 2026-07-24 03:16:35 +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:*3af790c0-307e-4f71-8d5e-869fd7c190e7,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-workflowdgffj/series-workflowdgffj-convert-artifact-3141989238/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": "28e5f457-a752-4d35-b2f0-4c0210024ec2", "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-workflowdgffj/series-workflowdgffj-build-action-4004318860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 02:47:23 +0000 UTC FinishedAt: 2026-07-24 03:16:02 +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:*3af790c0-307e-4f71-8d5e-869fd7c190e7,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-workflowdgffj/series-workflowdgffj-convert-artifact-3141989238/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": "28e5f457-a752-4d35-b2f0-4c0210024ec2", "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-workflowdgffj/series-workflowdgffj-build-action-4004318860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 03:16:35 +0000 UTC FinishedAt: 2026-07-24 03:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 03:16:35 +0000 UTC FinishedAt: 2026-07-24 03:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 03:16:35 +0000 UTC FinishedAt: 2026-07-24 03:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 03:16:35 +0000 UTC FinishedAt: 2026-07-24 03:16:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowdgffj/series-workflowdgffj-convert-artifact-2504784905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 03:16:45 +0000 UTC FinishedAt: 2026-07-24 03:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 03:16:45 +0000 UTC FinishedAt: 2026-07-24 03:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*28e5f457-a752-4d35-b2f0-4c0210024ec2,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-workflowdgffj/series-workflowdgffj-build-action-4004318860/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-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 03:18:50 +0000 UTC FinishedAt: 2026-07-24 03:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 03:18:50 +0000 UTC FinishedAt: 2026-07-24 03:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 03:18:50 +0000 UTC FinishedAt: 2026-07-24 04:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 03:18:50 +0000 UTC FinishedAt: 2026-07-24 04:02: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:*3af790c0-307e-4f71-8d5e-869fd7c190e7,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-workflowdgffj/series-workflowdgffj-convert-artifact-2504784905/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": "07eccb7f-fc20-4e27-860e-f3647256473b", "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-workflowdgffj/series-workflowdgffj-build-action-3944283621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 03:18:50 +0000 UTC FinishedAt: 2026-07-24 04:02:34 +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:*3af790c0-307e-4f71-8d5e-869fd7c190e7,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-workflowdgffj/series-workflowdgffj-convert-artifact-2504784905/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": "07eccb7f-fc20-4e27-860e-f3647256473b", "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-workflowdgffj/series-workflowdgffj-build-action-3944283621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 04:02:44 +0000 UTC FinishedAt: 2026-07-24 04:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 04:02:44 +0000 UTC FinishedAt: 2026-07-24 04:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 04:02:44 +0000 UTC FinishedAt: 2026-07-24 04:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 04:02:44 +0000 UTC FinishedAt: 2026-07-24 04:04:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07eccb7f-fc20-4e27-860e-f3647256473b,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-workflowdgffj/series-workflowdgffj-build-action-3944283621/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-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:37:55 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"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:*28e5f457-a752-4d35-b2f0-4c0210024ec2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07eccb7f-fc20-4e27-860e-f3647256473b,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-workflowdgffj/series-workflowdgffj-build-action-4004318860/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-workflowdgffj/series-workflowdgffj-build-action-3944283621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:04:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:04:51 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"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-workflowdgffj/series-workflowdgffj-convert-artifact-3886942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 04:04:46 +0000 UTC FinishedAt: 2026-07-24 04:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 04:04:56 +0000 UTC FinishedAt: 2026-07-24 04:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdgffj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_dbg_crypt_slow_alloc","sev_dbg_decrypt_slow","sev_dbg_encrypt_slow","sev_dbg_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP"],"series_id":"4a906561-2951-4411-98de-bbcf9d2f8ea7","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 04:04:56 +0000 UTC FinishedAt: 2026-07-24 04:37:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*28e5f457-a752-4d35-b2f0-4c0210024ec2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07eccb7f-fc20-4e27-860e-f3647256473b,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-workflowdgffj/series-workflowdgffj-build-action-4004318860/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-workflowdgffj/series-workflowdgffj-build-action-3944283621/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-workflowdgffj/series-workflowdgffj-convert-artifact-3886942/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,}