Name: series-workflow6r7bc Phase: Succeeded StartedAt: 2026-08-13 04:54:18 +0000 UTC FinishedAt: 2026-08-13 09:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[0] Phase: Succeeded StartedAt: 2026-08-13 04:54:18 +0000 UTC FinishedAt: 2026-08-13 05:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 04:54:18 +0000 UTC FinishedAt: 2026-08-13 05:45:00 +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": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "952ff59d-4a61-444b-85f2-85b2070993a3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "nested_vmx_enter_non_root_mode", "nested_vmx_check_restored_vmcs12", "vmx_handle_exit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aGVyZSBhIGZhaWx1cmUgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBjb3VsZCBsZWF2ZSB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggc3RhbGUgaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMgKEhQQXMpIG1hcHBlZCBpbiB2bWNzMDIuIElmIHVzZXJzcGFjZSByZXN1bWVkIHRoZSB2Q1BVLCBoYXJkd2FyZSBjb3VsZCBhY2Nlc3MgdGhlc2Ugc3RhbGUgSFBBcywgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZS1saWtlIGJlaGF2aW9yLiBUaGUgZml4IHJlLWFybXMgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QgdG8gZW5zdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nLlxuXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNJiMzOTtzIG5lc3RlZCBWTVggaW1wbGVtZW50YXRpb24gd2hlcmUgYSBmYWlsdXJlIHRvIG1hcCBWTUNTMTIgcGFnZXMgd291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ORVNURURfU1RBVEUgb3IgVk0tRW50ZXIpLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4OTM2ZWUzZDdhMGZiOWY4MmE3ZGU2ZGJmMmViZDI5ZGNkOWMxNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0Mjo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggZGRmNmRmN2JlZTkzYi4uOWU5YmQ2YzU0MWJhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC0zNDUzLDcgJiM0MzszNDUzLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBzdGF0ZSB3aGljaCBjYW4gbGVhZCB0byBhIGxvYWQgb2Ygd3JvbmcgUERQVFJzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKENDKCFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guY3IzKSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4gXHR9XG4gXG4gXG5AQCAtMzQ2OSw3ICYjNDM7MzQ2OSw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VpbnRlcm5hbC5zdWJlcnJvciA9XG4gXHRcdFx0XHRLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OO1xuIFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWludGVybmFsLm5kYXRhID0gMDtcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTM1MjUsNiAmIzQzOzM1MjUsMjAgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRleGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZS1hcm0gdGhlIHJlcXVlc3Qgc28gdGhhdCBLVk0gcmV0cmllcyB0aGUgbWFwcGluZyBpbnN0ZWFkIG9mIHJ1bm5pbmdcbiYjNDM7XHQgKiBMMiB3aXRoIGEgc3RhbGUgdm1jczAyLiAgQmFpbGluZyBoZXJlIGxlYXZlcyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlXG4mIzQzO1x0ICogd2l0aCB2bWNzMDIgbG9hZGVkIGFuZCBpdHMgQVBJQy1hY2Nlc3MsIHZpcnR1YWwtQVBJQyBhbmQgcG9zdGVkXG4mIzQzO1x0ICogaW50ZXJydXB0IGRlc2NyaXB0b3IgYWRkcmVzc2VzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBob3N0IHBhZ2VzIHRoYXRcbiYjNDM7XHQgKiB3ZXJlIG1hcHBlZCBmb3IgdGhlICpwcmV2aW91cyogbmVzdGVkIFZNLUVudGVyLCB3aGljaCBoYXZlIHNpbmNlIGJlZW5cbiYjNDM7XHQgKiB1bm1hcHBlZCBhbmQgdW5waW5uZWQgYnkgbmVzdGVkX3B1dF92bWNzMTJfcGFnZXMoKS4gIEtWTSByZXR1cm5zIHRvXG4mIzQzO1x0ICogdXNlcnNwYWNlIHdpdGhvdXQgbGVhdmluZyBndWVzdCBtb2RlLCBzbyBpZiB1c2Vyc3BhY2UgcmVzdW1lcyB0aGVcbiYjNDM7XHQgKiB2Q1BVLCBWTS1FbnRlciBzdWNjZWVkcyBhbmQgaGFyZHdhcmUgYWNjZXNzZXMgdGhvc2Ugc3RhbGUgSFBBcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ODkzNmVlM2Q3YTBmYjlmODJhN2RlNmRiZjJlYmQyOWRjZDljMTY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDU6NDI6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCBkZGY2ZGY3YmVlOTNiLi45ZTliZDZjNTQxYmFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTM0NTMsNyAmIzQzOzM0NTMsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCSAqIHN0YXRlIHdoaWNoIGNhbiBsZWFkIHRvIGEgbG9hZCBvZiB3cm9uZyBQRFBUUnMuCiAJCSAqLwogCQlpZiAoQ0MoIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtJmd0O2FyY2guY3IzKSkpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBmYWlsOwogCX0KIAogCkBAIC0zNDY5LDcgJiM0MzszNDY5LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJdmNwdS0mZ3Q7cnVuLSZndDtpbnRlcm5hbC5zdWJlcnJvciA9CiAJCQkJS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTjsKIAkJCXZjcHUtJmd0O3J1bi0mZ3Q7aW50ZXJuYWwubmRhdGEgPSAwOwotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gZmFpbDsKIAkJfQogCX0KIApAQCAtMzUyNSw2ICYjNDM7MzUyNSwyMCBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCWV4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTsKIAogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CS8qCiYjNDM7CSAqIFJlLWFybSB0aGUgcmVxdWVzdCBzbyB0aGF0IEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIGluc3RlYWQgb2YgcnVubmluZwomIzQzOwkgKiBMMiB3aXRoIGEgc3RhbGUgdm1jczAyLiAgQmFpbGluZyBoZXJlIGxlYXZlcyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlCiYjNDM7CSAqIHdpdGggdm1jczAyIGxvYWRlZCBhbmQgaXRzIEFQSUMtYWNjZXNzLCB2aXJ0dWFsLUFQSUMgYW5kIHBvc3RlZAomIzQzOwkgKiBpbnRlcnJ1cHQgZGVzY3JpcHRvciBhZGRyZXNzZXMgc3RpbGwgcG9pbnRpbmcgYXQgdGhlIGhvc3QgcGFnZXMgdGhhdAomIzQzOwkgKiB3ZXJlIG1hcHBlZCBmb3IgdGhlICpwcmV2aW91cyogbmVzdGVkIFZNLUVudGVyLCB3aGljaCBoYXZlIHNpbmNlIGJlZW4KJiM0MzsJICogdW5tYXBwZWQgYW5kIHVucGlubmVkIGJ5IG5lc3RlZF9wdXRfdm1jczEyX3BhZ2VzKCkuICBLVk0gcmV0dXJucyB0bwomIzQzOwkgKiB1c2Vyc3BhY2Ugd2l0aG91dCBsZWF2aW5nIGd1ZXN0IG1vZGUsIHNvIGlmIHVzZXJzcGFjZSByZXN1bWVzIHRoZQomIzQzOwkgKiB2Q1BVLCBWTS1FbnRlciBzdWNjZWVkcyBhbmQgaGFyZHdhcmUgYWNjZXNzZXMgdGhvc2Ugc3RhbGUgSFBBcy4KJiM0MzsJICovCiYjNDM7CWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtWTSBWTVggVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AuICBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIFRoZSBjb2RlIG5vdyBoYW5kbGVzIGEgZmFpbHVyZSBieSBqdW1waW5nIHRvIGBmYWlsYCwgcmUtYXJtaW5nIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0LCBhbmQgdGhlbiByZXR1cm5pbmcgYGZhbHNlYC4gVGhlIGNoYW5nZSBoYXMgdG8gZG8gd2l0aCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3JzIHdoZW4gcmV0cmlldmluZyBuZXN0ZWQgVk1DUzEyIHBhZ2VzLiBUaGUgZmFjdCB0aGF0IGl0IHJlLWFybXMgdGhlIHJlcXVlc3QgYWZ0ZXIgZmFpbHVyZSBhbmQgcmV0dXJucyBgZmFsc2VgIGlzIHRoZSBrZXkgdGhpbmcgSSYjMzk7bSBmb2N1c2VkIG9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbiBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgLiBUaGUgY29udGV4dCBpcyBLVk0mIzM5O3MgeDg2IG5lc3RlZCBWTVggY29kZSwgc28gZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZXMgbmV3IGlzc3Vlcy4gVGhlIHJlLWFybWluZyBvZiB0aGUgcmVxdWVzdCBhZnRlciB0aGUgZmFpbHVyZSBzZWVtcyBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaW4gdGhlIGV2ZW50IG9mIHRoaXMgJiMzNDtmYWlsJiMzNDsgY29uZGl0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgc2hvdWxkIGRvIHRoZSB0cmljay4gTm93IEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqS1ZNIE1vZHVsZSBEZXBlbmRlbmN5IFJldmlldyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgS1ZNIHN0dWZmIGFnYWluLiBJIGtub3cgYEtWTV9JTlRFTGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTttIGFmdGVyLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEJ1dCB3YWl0LCBgS1ZNYCBpdHNlbGYgaXMgYWxzbyBlc3NlbnRpYWwsIHJpZ2h0PyBJIGNhbiYjMzk7dCBqdXN0IGVuYWJsZSBgS1ZNX0lOVEVMYCBpbiBpc29sYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5kYW1lbnRhbCBgS1ZNYCBzdXBwb3J0IGluIHBsYWNlIGZpcnN0LgoKVGltZSB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgZm9yIGBLVk1fSU5URUxgLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZC4gTm8gcG9pbnQgaW4gYXNzdW1pbmc7IGJldHRlciB0byB2ZXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgZGlyZWN0bHkgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IEtWTSYjMzk7cyB4ODYgY29uZmlndXJhdGlvbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIGl0LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gd2lsbCBiZSBhcm91bmQgbGluZSA5NiBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0IHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcyBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0ISBJ4oCZbSBob3BpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3MQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGludm9sdmVzIGBLVk1gIGFuZCBzcGVjaWZpY2FsbHkgYEtWTV9JTlRFTGAsIHdoaWNoIGlzIGltcG9ydGFudCBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcywgYW5kIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4KCkxldCBtZSBjb25maXJtLCBpcyBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIHN0YXRpYz8gQWgsIHllcywgaXQgaXMuIFdhaXQgYSBzZWNvbmQsIHRoZSBkaWZmIGNvbmZpcm1zIHRoYXQgaXTigJlzIGBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGZpZ3VyZSBvdXQgaG93IGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGZpbmQgYWxsIG9mIGl0cyBjYWxsZXJzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX2dldF92bWNzMTJfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9OTEyPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljdl9jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy05MzgtXHQgKiB0aGUgZGVzY3JpcHRvciBhZGRyZXNzIGhhcyBiZWVuIGFscmVhZHkgY2hlY2tlZFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo5Mzk6XHQgKiBpbiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcy5cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTQwLVx0ICpcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MzE9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQ4MS1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0ODI6XHQgKiBUaGlzIGJpdCB3aWxsIGJlIGNvbXB1dGVkIGluIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzLCBiZWNhdXNlXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0ODMtXHQgKiB3ZSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTDEmIzM5O3MgTVNSIGJpdG1hcCB5ZXQuICBGb3Igbm93LCBrZWVwXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNDEzPXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDQxLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNDQyOnN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQ0My17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNTQ0PXN0YXRpYyBib29sIHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NjQtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM1NjU6XHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgIW5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTY2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjQzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY5NS1cdGlmIChmcm9tX3ZtZW50cnkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzY5NjpcdFx0aWYgKHVubGlrZWx5KCFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY5Ny1cdFx0XHR2bXhfc3dpdGNoX3ZtY3ModmNwdSwgXHUwMDI2dm14LVx1MDAzZXZtY3MwMSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzMwLVx0XHQgKiBuZWVkIHRvIHBlcmZvcm0gZ3BhIHRvIGhwYSB0cmFuc2xhdGlvbikuIFJlcXVlc3QgYSBjYWxsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3MzE6XHRcdCAqIHRvIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzIGJlZm9yZSB0aGUgbmV4dCBWTS1lbnRyeS4gIFRoZSBNU1JzXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3MzItXHRcdCAqIGhhdmUgYWxyZWFkeSBiZWVuIHNldCBhdCB2bWVudHJ5IHRpbWUgYW5kIHNob3VsZCBub3QgYmUgcmVzZXQuXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzAxNC1cdFx0ICogcmVzdG9yZWQgeWV0LiBFVk1DUyB3aWxsIGJlIG1hcHBlZCBmcm9tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwMTU6XHRcdCAqIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKCkuXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwMTYtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzY5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZNWCBDb2RlKioKCk9rYXksIHNvIEkgc2VlIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgYW5kIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGFyZSBjYWxsaW5nIGVhY2ggb3RoZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBGaXJzdCwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCB0byBzZWUgaWYgaXQmIzM5O3Mgc3RhdGljLCBhbmQgeWVzLCBpdCBpcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHBvdGVudGlhbCBpbmxpbmluZy4gTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIGl0cyBsb2dpYyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2MzA9c3RhdGljIHZvaWQgbG9hZF92bWNzMTJfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjQyLSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjQzOmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjQ0LVx0XHRcdFx0XHRcdFx0Ym9vbCBmcm9tX3ZtZW50cnkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzk4PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzctXHR2bXgtXHUwMDNlbmVzdGVkLmhhc19wcmVlbXB0aW9uX3RpbWVyX2RlYWRsaW5lID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4Nzg6XHRzdGF0dXMgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzktXHRpZiAodW5saWtlbHkoc3RhdHVzICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODUtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODg2Olx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoKSBhcyBpdCB3aWxsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODctXHQgKiBhbHNvIGJlIHVzZWQgYXMgcGFydCBvZiByZXN0b3JpbmcgblZNWCBzdGF0ZSBmb3Jcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTI9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc5LVx0dm14LVx1MDAzZW5lc3RlZC5mb3JjZV9tc3JfYml0bWFwX3JlY2FsYyA9IHRydWU7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwODA6XHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDgxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBOb24tU3RhdGljIEZ1bmN0aW9ucyBpbiBOZXN0ZWQgVk1YKioKCk9rYXksIHNvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgLi4uIEkgdGhvdWdodCBpdCBtaWdodCBiZSBzdGF0aWMsIGJ1dCB0aGUgZ3JlcCByZXN1bHRzIHNheSBvdGhlcndpc2UuIFRoYXQmIzM5O3MgdW51c3VhbC4gSXQmIzM5O3MgdGltZSB0byBkaWcgZGVlcGVyLiBJZiB0aGF0IG9uZSBpc24mIzM5O3Qgc3RhdGljLCBtYXliZSB0aGVyZSYjMzk7cyBhIHBhdHRlcm4sIG9yIGEgbG9naWNhbCByZWFzb24gZm9yIHRoaXMuIExldCYjMzk7cyBzaGlmdCBvdXIgZm9jdXMgYW5kIGludmVzdGlnYXRlIGBuZXN0ZWRfdm14X3J1bmAgYW5kIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAuIFRoZXkmIzM5O3JlIGxpa2VseSByZWxhdGVkLCBhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzICpub3QqIHN0YXRpYywgYW5kIHRoZXNlIHJlbGF0ZWQgZnVuY3Rpb25zIHNob3VsZCBob3BlZnVsbHkgc2hlZCBzb21lIGxpZ2h0LiBUaGlzIGNvdWxkIGluZGljYXRlIGEgc3VidGxlIGRlc2lnbiBjaG9pY2UsIGFuZCBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBpbXBsaWNhdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHBvdGVudGlhbGx5IGluIGhvdyB0aGUgVk0gZXhpdHMgdGhlIFZNWCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjQzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5NC0vKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzk1OiAqIG5lc3RlZF92bXhfcnVuKCkgaGFuZGxlcyBhIG5lc3RlZCBlbnRyeSwgaS5lLiwgYSBWTUxBVU5DSCBvciBWTVJFU1VNRSBvbiBMMVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzk2LSAqIGZvciBydW5uaW5nIGFuIEwyIG5lc3RlZCBndWVzdC5cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5Ny0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc5ODpzdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3OTkte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0OD1zdGF0aWMgaW50IGhhbmRsZV92bWxhdW5jaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NDkte1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1NjUwOlx0cmV0dXJuIG5lc3RlZF92bXhfcnVuKHZjcHUsIHRydWUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjUxLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTQ9c3RhdGljIGludCBoYW5kbGVfdm1yZXN1bWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY1Ni1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY1NzpcdHJldHVybiBuZXN0ZWRfdm14X3J1bih2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBWTVggU3RhdGUgVHJhbnNpdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBoYW5kbGVfdm1sYXVuY2hgIGFuZCBgaGFuZGxlX3ZtcmVzdW1lYCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXkmIzM5O3JlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIG5vdCB1bnVzdWFsIGZvciBoYW5kbGVycyBsaWtlIHRoaXMsIGJ1dCBpdCYjMzk7cyBhIGdvb2QgcmVtaW5kZXIgb2YgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IHdpdGggdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gVGhlIGtleSBoZXJlIGlzIGxpa2VseSBnb2luZyB0byBiZSBob3cgdGhlIGhhcmR3YXJlIG1hbmFnZXMgdGhlIHN0YXRlIGFjcm9zcyB0aG9zZSBjYWxscy4gVGltZSB0byBjaGVjayBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODkwPWludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTExLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTEyOnN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTEzLVx0XHRcdFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDk3PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NTA0LVx0LmdldF9zdGF0ZSA9IHZteF9nZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTA1Olx0LnNldF9zdGF0ZSA9IHZteF9zZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NTA2LVx0LmdldF9uZXN0ZWRfc3RhdGVfcGFnZXMgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxOAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVzdGVkIFZNWCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IGB2bXhfbmVzdGVkX29wc2AgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaXRzIGRlcGVuZGVuY2Ugb24gYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cywgdGhlIGV4dGVybmFsIGludGVyZmFjZXMgZm9yIHRoaXMgbW9kdWxlLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AgdGhhdCBhY3QgYXMgdGhlc2UgZW50cnkgcG9pbnRzLgoKTGV0IG1lIHNlZS4uLiBBaCwgdGhlcmUmIzM5O3MgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNpbmNlIHRoYXQgd291bGQgbWFrZSBpdCBpbmFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoaXMgZmlsZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBleHBvc2VkIGZvciB1c2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgZW50cnkgcG9pbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYzMD1zdGF0aWMgdm9pZCBsb2FkX3ZtY3MxMl9ob3N0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDItICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM2NDM6ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDQtXHRcdFx0XHRcdFx0XHRib29sIGZyb21fdm1lbnRyeSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3OTg9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3Ny1cdHZteC1cdTAwM2VuZXN0ZWQuaGFzX3ByZWVtcHRpb25fdGltZXJfZGVhZGxpbmUgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg3ODpcdHN0YXR1cyA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCB0cnVlKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3OS1cdGlmICh1bmxpa2VseShzdGF0dXMgIT0gTlZNWF9WTUVOVFJZX1NVQ0NFU1MpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4NS1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4ODY6XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpIGFzIGl0IHdpbGxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4Ny1cdCAqIGFsc28gYmUgdXNlZCBhcyBwYXJ0IG9mIHJlc3RvcmluZyBuVk1YIHN0YXRlIGZvclxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwNzktXHR2bXgtXHUwMDNlbmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA4MDpcdHJldCA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwODEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGZ1bmN0aW9uIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0Li4uIElmIGl0JiMzOTtzIG5vdCBzdGF0aWMsIHRoZSBiaWdnZXIgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBmdW5jdGlvbiBleHBvc2VkIGZvciB1c2Ugb3V0c2lkZSB0aGUgYG5lc3RlZC5jYCBmaWxlIGl0c2VsZj8gSXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXIgb3IgdXNlZCBieSBhbm90aGVyIG1vZHVsZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjMwPXN0YXRpYyB2b2lkIGxvYWRfdm1jczEyX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0Mi0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzY0MzplbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0NC1cdFx0XHRcdFx0XHRcdGJvb2wgZnJvbV92bWVudHJ5KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Mzc5OD1zdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODc3LVx0dm14LVx1MDAzZW5lc3RlZC5oYXNfcHJlZW1wdGlvbl90aW1lcl9kZWFkbGluZSA9IGZhbHNlO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODc4Olx0c3RhdHVzID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIHRydWUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODc5LVx0aWYgKHVubGlrZWx5KHN0YXR1cyAhPSBOVk1YX1ZNRU5UUllfU1VDQ0VTUykpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODg1LVx0LypcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg4NjpcdCAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2YgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKCkgYXMgaXQgd2lsbFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODg3LVx0ICogYWxzbyBiZSB1c2VkIGFzIHBhcnQgb2YgcmVzdG9yaW5nIG5WTVggc3RhdGUgZm9yXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA3OS1cdHZteC1cdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSB0cnVlO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3MDgwOlx0cmV0ID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA4MS1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0xMC0vKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDoxMTogKiBTdGF0dXMgcmV0dXJuZWQgYnkgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKCk6XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTEyLSAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MjY9dm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDoyNzplbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjgtXHRcdFx0XHRcdFx0ICAgICBib29sIGZyb21fdm1lbnRyeSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDIwPWludCB2bXhfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MzQtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg0MzU6XHRcdHJldCA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MzYtXHRcdGlmIChyZXQgIT0gTlZNWF9WTUVOVFJZX1NVQ0NFU1MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBjb2RlOgoKKipEZWVwIERpdmUgaW50byBWTVggTmVzdGluZyoqCgpPa2F5LCBzbyBJIHNlZSBhIGNydWNpYWwgZnVuY3Rpb24sIGB2bXhfbGVhdmVfc21tYCwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgc29tZXRoaW5nIGluIGB2bXguY2AuIE15IHNwaWRleS1zZW5zZSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmVzdGVkIFZNWCBvcGVyYXRpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIHN5bWJvbCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGFuYWx5c2lzIG9uIHRoYXQgZnVuY3Rpb24uCgpOb3csIGhvbGQgb24uIEkgYWxzbyBzZWUgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIHRoaXMga2luZCBvZiBzaXR1YXRpb24sIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgdm14X25lc3RlZF9vcHMuc2V0X3N0YXRlYC4gVGhhdCBgdm14X25lc3RlZF9vcHNgIHN0cnVjdHVyZSBpcyBwcm9iYWJseSB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nLCBzbyBJIG5lZWQgdG8gY2hlY2sgaXQgb3V0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQgdG8gbWFuYWdlIHRoZSBuZXN0ZWQgVk1YIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBjaGVjayBpdHMgZGVjbGFyYXRpb24sIGFuZCBob3cgdGhlIGBzZXRfc3RhdGVgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9uZXN0ZWRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODgwPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk3LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk4Olx0Lm5lc3RlZF9vcHMgPSBcdTAwMjZ2bXhfbmVzdGVkX29wcyxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5OS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzY9c3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0OTc6c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5OC1cdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfY3B1X2hhc19ub19od19lcnJjb2RlX2NjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzIxOmV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODk3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXN0ZWQgVk1YIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmVzdGVkIFZNWCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBzZWUgdGhhdCBgdm14X25lc3RlZF9vcHNgIGlzIHVzZWQgaW4gYG1haW4uY2AgdG8gaW5pdGlhbGl6ZSBgdnRfeDg2X29wcy5uZXN0ZWRfb3BzYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gdGhlIHN5bWJvbCB0YWJsZSBhbmQgd2hhdCYjMzk7cyBub3QuCgpMZXQmIzM5O3Mgc2VlLCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBleHBvcnRlZCBhbmQgd2hldGhlciBzeXprYWxsZXIgY2FuIHJlYWNoIGl0LiBJJiMzOTtsbCBjaGVjayBgbmVzdGVkX3ZteF9ydW5gLCB3aGljaCBpcyBhbHNvIHN0YXRpYzsgaXQgaXMgdW5saWtlbHkgdG8gYmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gYGhhbmRsZV92bWxhdW5jaGAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0LCB0b28uIFRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2A/IEFoYSEgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgaXMgKm5vbi1zdGF0aWMqIGFuZCBpdCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGNhbmRpZGF0ZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgbmVzdGVkX3ZteF9jaGVja19hcGljdl9jb250cm9sc2AgaXMgc3RhdGljLCBgcHJlcGFyZV92bWNzMDJfZWFybHlgIGlzIHN0YXRpYywgYG5lc3RlZF9nZXRfZXZtY3NfcGFnZWAgaXMgc3RhdGljLCBhbmQgYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBpcyBzdGF0aWMuIFRoZXkmIzM5O3JlIGFsbCBwcm9iYWJseSBpbnRlcm5hbCBoZWxwZXJzLgoKTm93LCBhYm91dCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIhIFRoYXQgbWVhbnMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIEJ1dCBpdCAqY291bGQqIHN0aWxsIGJlIGEgaGlkZGVuIHN5bWJvbCwgc28gc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gcmVhY2ggaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gQnV0LCBiYXNlZCBvbiB0aGUgcHJvbXB0LCBpdCBzb3VuZHMgbGlrZSBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGRlZmluaXRlbHkgYSBiZXR0ZXIgZm9jdXMgc2luY2UgaXQgaXMgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQuCgpJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCBmb3IgbW9yZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5lc3RlZCBWTVguIEkgbmVlZCB0byBrZWVwIHNlYXJjaGluZyBmb3IgYW55IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbmVzdGVkX3ZteF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4MT12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4OS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg5MDppbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIEludmVzdGlnYXRpb246IFZNWCBDb250ZXh0ICZhbXA7IFBvdGVudGlhbCBOZXN0aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFZNWCBoYW5kbGluZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGFueSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBvciBhbnl0aGluZyB0aGF0IHJlc2VtYmxlcyB0aGF0IHR5cGUgb2YgYXJjaGl0ZWN0dXJlLiBUaGUgaW1tZWRpYXRlIHNlYXJjaCBzdHJhdGVneSBpbnZvbHZlcyBsb29raW5nIGZvciBmdW5jdGlvbiBuYW1lcyBvciBjb2RlIGJsb2NrcyB0aGF0IG1pZ2h0IGNvbnRhaW4gYF52b2lkIG5lc3RlZF92bXhfYCwgb3Igc29tZXRoaW5nIGVxdWFsbHkgZGVzY3JpcHRpdmUuIEkmIzM5O20gZGVsaWJlcmF0ZWx5IHVzaW5nIGEgd2lsZGNhcmQgKGBeYCkgYXQgdGhlIGJlZ2lubmluZyB0byBncmFiIGFueXRoaW5nIHRoYXQgKnByZWNlZGVzKiB0aGUgcGhyYXNlIC0gaW4gZWZmZWN0IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB3cmFwcGVycyBvciBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGxvY2F0ZSBjb2RlIHNlZ21lbnRzIGludm9sdmVkIHdpdGggVk1YIG1hbmFnZW1lbnQsIGFuZCBpbiBwYXJ0aWN1bGFyLCBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbmRpY2F0aW9ucyBvZiBhICYjMzQ7bmVzdGVkJiMzNDsgZXhlY3V0aW9uIG1vZGVsLiBUaGlzIHJhcGlkIGNoZWNrIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgc2lnbmFsIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGluIHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfXSYjNDM7IG5lc3RlZF92bXhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMzNj1zdGF0aWMgdm9pZCBmcmVlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODQtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4NTp2b2lkIG5lc3RlZF92bXhfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY2Mj1zdGF0aWMgaW5saW5lXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjYzOnZvaWQgbmVzdGVkX3ZteF9zZXRfbXNyXyMjcncjI19pbnRlcmNlcHQoc3RydWN0IHZjcHVfdm14ICp2bXgsXHRcdFx0XFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjY0LVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMSxcdFx0XFxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTYxOTc9c3RhdGljIGludCBoYW5kbGVfdm1mdW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYyNTEtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYyNTI6Ym9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjI1My1cdFx0XHRcdCBpbnQgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY1NjY9c3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY3MDUtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY3MDY6Ym9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjcwNy17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODgxPXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg5LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODkwOmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4OTEte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwOTMtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwOTQ6dm9pZCBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA5NS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03MzUyPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfc2V0dXBfY3JfZml4ZWQoc3RydWN0IG5lc3RlZF92bXhfbXNycyAqbXNycylcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTczODEtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjczODI6dm9pZCBuZXN0ZWRfdm14X3NldHVwX2N0bHNfbXNycyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZiwgdTMyIGVwdF9jYXBzKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MzgzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0MTgtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0MTk6dm9pZCBuZXN0ZWRfdm14X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uKioKCk9rYXksIHNvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGxvb2tpbmcgc29saWQsIHRoYXQgc2VlbXMgdG8gYmUgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdoYXQgYWJvdXQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYD8gSXQmIzM5O3MgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyAqdGhlKiBlbnRyeSBwb2ludCBmb3IgdGhhdCBgS1ZNX1NFVF9ORVNURURfU1RBVEVgIGlvY3RsLiBJdCBmZWVscyBsaWtlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGllY2UgYmV0dGVyIGluIHJlbGF0aW9uIHRvIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBpbnRlZ3JhdGVzLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgYGt2bV94ODZfbmVzdGVkX29wc2AsIGl0IHNob3VsZCBoYXZlIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgb24gaG93IHRoZXNlIHBpZWNlcyBhcmUgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbGFwaWMuYz0zMjkzPWludCBrdm1fYXBpY19nZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTMzMDUtXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzozMzA2OmludCBrdm1fYXBpY19zZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMzMwNy17XG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmg9MTM2PWludCBrdm1fYXBpY19nZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKTtcbmFyY2gveDg2L2t2bS9sYXBpYy5oOjEzNzppbnQga3ZtX2FwaWNfc2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcyk7XG5hcmNoL3g4Ni9rdm0vbGFwaWMuaC0xMzgtaW50IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0yMTY1PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTcyLVx0LmdldF9zdGF0ZSA9IHN2bV9nZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTczOlx0LnNldF9zdGF0ZSA9IHN2bV9zZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTc0LVx0Lmh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoID0gc3ZtX2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ5Nz1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNC1cdC5nZXRfc3RhdGUgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNTpcdC5zZXRfc3RhdGUgPSB2bXhfc2V0X25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNi1cdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUzMTA9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9zZXRfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MzE3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMTg6XHRyID0ga3ZtX2FwaWNfc2V0X3N0YXRlKHZjcHUsIHMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTktXHRpZiAocilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjE4OT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjEtXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY1NjI6XHRcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VzZXRfc3RhdGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2My1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU4NC1cdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU4NTpcdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgXHUwMDI2a3ZtX3N0YXRlKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NTg2LVx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSBpbnRvIFZNIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGNhbGwsIGFuZCBpdCB1bHRpbWF0ZWx5IGxhbmRzIGluIGBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtzZXRfc3RhdGVgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkga25vdyBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBJIGNhbiB1c2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFzIGEgcHJldHR5IGdvb2QgZm9jdXMgcG9pbnQsIGFsdGhvdWdoIGl0IGlzIGEgaG90LXBhdGggZ2VuZXJpYyBmdW5jdGlvbi4KCk5vdywgd2hlcmUgZG9lcyBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGxlYWQ/IFJpZ2h0LCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgYW5kIGBuZXN0ZWRfdm14X3J1bmAuIEludGVyZXN0aW5nLCBpcyBgbmVzdGVkX3ZteF9ydW5gIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBBbmQgaG93IGFib3V0IGBoYW5kbGVfdm1sYXVuY2hgPyBBbHNvIHN0YXRpYywgYXMgZXhwZWN0ZWQuCgpNeSBsaW5lIG9mIHRoaW5raW5nIG5vdyBpcyB0byB0cnkgYW5kIGlkZW50aWZ5ICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgVk0gZXhpdHMsIGFuZCBpZiBgdm14X2hhbmRsZV9leGl0YCBpcyBub24tc3RhdGljLCBpdCBzaG91bGQgYmUgcHJvbWlzaW5nLiBBbmQgaW5kZWVkLCBgdm14X2hhbmRsZV9leGl0YCBpcyBub3Qgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfaGFuZGxlX2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNTk9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY0LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTY1Olx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjYtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5My1cdC5jaGVja19pbnRlcmNlcHQgPSB2bXhfY2hlY2tfaW50ZXJjZXB0LFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk0Olx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTUtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDA5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ3NC1cdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU0NzU6XHQgKiBTZWUgdGhlIGNvbW1lbnRzIGluIHZteF9oYW5kbGVfZXhpdC5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ3Ni1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjI1OD1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjI2Mi1cdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MjYzOlx0ICogdm14X2hhbmRsZV9leGl0KCkuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNjQtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY0OTE9dm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjY5NS0gKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjY5NjpzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Njk3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTQtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTU6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1Ni17XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTc6XHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTgtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz03MTY4PXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxODMtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjcxODQ6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzE4NS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9Mjk9dm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMwOmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzE6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zMi1pbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5vbi1TdGF0aWMgRnVuY3Rpb25zIGFuZCBhIFBvdGVudGlhbCBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwYXR0ZXJuOiBgdm14X2hhbmRsZV9leGl0YCwgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAsIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAsIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YCwgYG5lc3RlZF92bXhfY2hlY2tfaW9fYml0bWFwc2AsIGBuZXN0ZWRfdm14X2ZyZWVfdmNwdWAsIGBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXBgLCBgbmVzdGVkX3ZteF9zZXR1cF9jdGxzX21zcnNgLCBhbmQgYG5lc3RlZF92bXhfaGFyZHdhcmVfdW5zZXR1cGAg4oCTIHRoZXkgYXJlIGFsbCBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBwYXJ0IG9mIGFuIEFQSSBvciBleHBvc2VkIGZvciBzb21lIG90aGVyIG1vZHVsZSB0byBsZXZlcmFnZS4KCk15IGZvY3VzIGlzIGRyYXduIHRvIHRoaXMgYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBmdW5jdGlvbiBiZWNhdXNlIEkgdW5kZXJzdGFuZCB0aGF0IGl0JiMzOTtzIHRoZSBzdXNwZWN0ZWQgY3VscHJpdC4gQW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGFuZCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gSSByZW1lbWJlciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHJlY2FsbCB0aGUgZmxvdyBmcm9tIGEgcGFnZSBmYXVsdC4gSXQgc2VlbXMgYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBsZWFkcyB0byBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIHRocm91Z2ggdGhlIGZvbGxvd2luZyBjaGFpbjogYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgLSZndDsgYGt2bV9tbXVfcGFnZV9mYXVsdGAgLSZndDsgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgLSZndDsgYGt2bV9tbXVfZ2V0X3BhZ2VgIGFuZCB0aGVu4oCmIG9oLCByaWdodCwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHZteF9uZXN0ZWRfb3BzLmdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgLiBFeGNlbGxlbnQsIG5vdyBJIHVuZGVyc3RhbmQgdGhlIHBhdGguCgpJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYGdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHdpZGVzcHJlYWQgdGhpcyBwcm9ibGVtIG1pZ2h0IGJlLiBUaGUgaXNzdWUgY291bGQgYmUgdmVyeSBsb2NhbGl6ZWQgb3IgaW1wYWN0IG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCByZWx5IG9uIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE5NTA9c3RhdGljIGludCBzdm1fc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTExLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTEyOnN0YXRpYyBib29sIHN2bV9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjExMy17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0yMTY1PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTcwLVx0LnRyaXBsZV9mYXVsdCA9IG5lc3RlZF9zdm1fdHJpcGxlX2ZhdWx0LFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTcxOlx0LmdldF9uZXN0ZWRfc3RhdGVfcGFnZXMgPSBzdm1fZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE3Mi1cdC5nZXRfc3RhdGUgPSBzdm1fZ2V0X25lc3RlZF9zdGF0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM0NDI9c3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzU0My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzU0NDpzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NDUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ5Nz1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNS1cdC5zZXRfc3RhdGUgPSB2bXhfc2V0X25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNjpcdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDctXHQud3JpdGVfbG9nX2RpcnR5ID0gbmVzdGVkX3ZteF93cml0ZV9wbWxfYnVmZmVyLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNC1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMTEzNTpcdFx0XHRpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNi1cdFx0XHRcdHIgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg5OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIEZpeCoqCgpPa2F5LCBzbyBgZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB2Y3B1X2VudGVyX2d1ZXN0YCB3aGVuIHdlIGhhdmUgYSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0LiBUaGUgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHJlLWFybXMgdGhhdCByZXF1ZXN0IHdpdGhpbiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGluIGNhc2Ugb2YgZmFpbHVyZS4gRXNzZW50aWFsbHksIGl0JiMzOTtzIG1ha2luZyBzdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHJ1bm5pbmcgTDIgd2l0aCBhIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdm1jczAyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgd2l0aG91dCB0aGlzLCB3ZSYjMzk7ZCBiYWlsIG91dCwgbGVhdmluZyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggYW4gb3V0ZGF0ZWQgYHZtY3MwMmAsIGFuZCBpdHMgYWRkcmVzc2VzIHBvaW50aW5nIHRvICpob3N0KiBwYWdlcyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQgYmVjYXVzZSBgbmVzdGVkX3B1dF92bWNzMTJfcGFnZXMoKWAgaGFzIHVubWFwcGVkIGFuZCB1bnBpbm5lZCB0aGVtLiBLVk0gd291bGQgcmV0dXJuIHRvIHVzZXJzcGFjZSwgYW5kIGlmIHRoYXQgdXNlcnNwYWNlIHRoaW5nIHJlc3VtZXMgdGhlIHZDUFUsIFZNLUVudGVyIHdvdWxkIHN1Y2NlZWQsIGJ1dCB3ZSYjMzk7ZCBoYXZlIGhhcmR3YXJlIGFjY2Vzc2luZyB0aG9zZSBzdGFsZSBIUEFzIOKAkyBhIGRlZmluaXRlIHJlY2lwZSBmb3IgZGlzYXN0ZXIuCgpUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4IHRoYXQgSSB0aGluayBpcyByaXBlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzLCBzcGVjaWZpY2FsbHkgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBpbiB0aGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LgoKTGV0JiMzOTtzIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcmVsZXZhbnQgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYz8KT2theSwgSSYjMzk7bGwgYWxzbyBhZGQgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBmdXp6aW5nIGZvY3VzIGxpc3QuCmBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAgYW5kIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YAoKU28gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGluIHRoZSBmdXp6aW5nOgotIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgCi0gYHZteF9oYW5kbGVfZXhpdGAKCk5vdywgYmVmb3JlIEkgZ2V0IGNhcnJpZWQgYXdheSwgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGJ1aWxkcy4gSSBrbm93IGl0JiMzOTtzIEtWTSBhbmQgS1ZNX0lOVEVMLCBidXQgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIGVsc2UuIENoZWNraW5nIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2Agbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMDUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIEZ1enppbmcgU3RyYXRlZ3kqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmb2N1cyBpcyBLVk0gZnV6emluZywgYW5kIEkga25vdyB0aGF0IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7S1ZNJiMzNDssICYjMzQ7S1ZNX0lOVEVMJiMzNDtdYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGZpbGUuIEkmIzM5O20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMgYW5kIGxpa2VseSB0byBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gT2theSwgSSBzZWUgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAsIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YCwgYW5kIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAuIEFmdGVyIHJldmlldywgSSYjMzk7dmUgZGVjaWRlZCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBhbmQgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYCBoYXZlIHRoZSBtb3N0IGZ1enppbmcgcG90ZW50aWFsLiBJIHdpbGwgYWxzbyBpbmNsdWRlIGB2bXhfaGFuZGxlX2V4aXRgIGluIG15IHRlc3Rpbmcgc3RyYXRlZ3kuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGRldGFpbHMgb2YgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYCB0byBlbnN1cmUgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY4ODE9dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4OTA6aW50IG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg5MS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA3My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA3NDpcdHJldCA9IG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI0PXZvaWQgbmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKHZvaWQpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDoyNTppbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjYtdm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODQyMD1pbnQgdm14X2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDMxLVx0XHQvKiBUcmlwbGUgZmF1bHQgaWYgdGhlIHN0YXRlIGlzIGludmFsaWQuICAqL1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDMyOlx0XHRpZiAobmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIodmNwdSkgXHUwMDNjIDApXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MzMtXHRcdFx0cmV0dXJuIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjA2CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWTVggTW9kdWxlIFN5bWJvbCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIHVzYWdlIG9mIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAsIGFuZCBjb25maXJtZWQgdGhhdCBpdCYjMzk7cyBpbmRlZWQgY2FsbGVkIHdpdGhpbiBgdm14X2xlYXZlX3NtbWAgYW5kIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAuIEV4Y2VsbGVudC4gVGhpcyBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3QuCgpHaXZlbiB0aGlzLCBJIG5lZWQgdG8ga2VlcCBhIGxhc2VyIGZvY3VzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHMgZm9yIGZ1cnRoZXIgYW5hbHlzaXM6CgoqICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAKKiAgIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAKKiAgIGB2bXhfaGFuZGxlX2V4aXRgCgpUaGF0IHNlZW1zIHRvIGJlIGEgc29saWQgbGlzdCBvZiBrZXkgZnVuY3Rpb25zIHRvIHNjcnV0aW5pemUuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcy4gTGV0JiMzOTtzIGdldCB0aGVzZSByZXN1bHRzIHNldCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aGVyZSBhIGZhaWx1cmUgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBjb3VsZCBsZWF2ZSB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggc3RhbGUgaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMgKEhQQXMpIG1hcHBlZCBpbiB2bWNzMDIuIElmIHVzZXJzcGFjZSByZXN1bWVkIHRoZSB2Q1BVLCBoYXJkd2FyZSBjb3VsZCBhY2Nlc3MgdGhlc2Ugc3RhbGUgSFBBcywgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZS1saWtlIGJlaGF2aW9yLiBUaGUgZml4IHJlLWFybXMgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QgdG8gZW5zdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nLlxuXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg5MzZlZTNkN2EwZmI5ZjgyYTdkZTZkYmYyZWJkMjlkY2Q5YzE2NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggZGRmNmRmN2JlZTkzYi4uOWU5YmQ2YzU0MWJhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC0zNDUzLDcgJiM0MzszNDUzLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkgKiBzdGF0ZSB3aGljaCBjYW4gbGVhZCB0byBhIGxvYWQgb2Ygd3JvbmcgUERQVFJzLgogCQkgKi8KIAkJaWYgKENDKCFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LSZndDthcmNoLmNyMykpKQotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gZmFpbDsKIAl9CiAKIApAQCAtMzQ2OSw3ICYjNDM7MzQ2OSw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCXZjcHUtJmd0O3J1bi0mZ3Q7aW50ZXJuYWwuc3ViZXJyb3IgPQogCQkJCUtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047CiAJCQl2Y3B1LSZndDtydW4tJmd0O2ludGVybmFsLm5kYXRhID0gMDsKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CiAKQEAgLTM1MjUsNiAmIzQzOzM1MjUsMjAgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlleGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7CiAKIAlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwkvKgomIzQzOwkgKiBSZS1hcm0gdGhlIHJlcXVlc3Qgc28gdGhhdCBLVk0gcmV0cmllcyB0aGUgbWFwcGluZyBpbnN0ZWFkIG9mIHJ1bm5pbmcKJiM0MzsJICogTDIgd2l0aCBhIHN0YWxlIHZtY3MwMi4gIEJhaWxpbmcgaGVyZSBsZWF2ZXMgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZQomIzQzOwkgKiB3aXRoIHZtY3MwMiBsb2FkZWQgYW5kIGl0cyBBUElDLWFjY2VzcywgdmlydHVhbC1BUElDIGFuZCBwb3N0ZWQKJiM0MzsJICogaW50ZXJydXB0IGRlc2NyaXB0b3IgYWRkcmVzc2VzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBob3N0IHBhZ2VzIHRoYXQKJiM0MzsJICogd2VyZSBtYXBwZWQgZm9yIHRoZSAqcHJldmlvdXMqIG5lc3RlZCBWTS1FbnRlciwgd2hpY2ggaGF2ZSBzaW5jZSBiZWVuCiYjNDM7CSAqIHVubWFwcGVkIGFuZCB1bnBpbm5lZCBieSBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpLiAgS1ZNIHJldHVybnMgdG8KJiM0MzsJICogdXNlcnNwYWNlIHdpdGhvdXQgbGVhdmluZyBndWVzdCBtb2RlLCBzbyBpZiB1c2Vyc3BhY2UgcmVzdW1lcyB0aGUKJiM0MzsJICogdkNQVSwgVk0tRW50ZXIgc3VjY2VlZHMgYW5kIGhhcmR3YXJlIGFjY2Vzc2VzIHRob3NlIHN0YWxlIEhQQXMuCiYjNDM7CSAqLwomIzQzOwlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMwoJCQkJCQkJb3V0cHV0OiAyMjAKCQkJCQkJCXRob3VnaHRzOiA3MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBCYXNpY2FsbHksIGluc3RlYWQgb2YganVzdCBiYWlsaW5nIG91dCB3aXRoIGBmYWxzZWAgd2hlbiBpdCBmYWlscywgaXQgbm93IHJlLWFybXMgYSByZXF1ZXN0IHRvIHJldHJ5IHRoZSBtYXBwaW5nLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHRvIHByZXZlbnQgTDIgZnJvbSBydW5uaW5nIHdpdGggYSBzdGFsZSBgdm1jczAyYC4gVGhlIGNvcmUgcHJvYmxlbT8gSGFyZHdhcmUgYWNjZXNzaW5nIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSB0aGF0IHdlcmUgdmFsaWQgKmJlZm9yZSogYSBuZXN0ZWQgVk0tRW50ZXIsIGJ1dCBhcmUgbm93IGdhcmJhZ2UgYmVjYXVzZSB0aGV5JiMzOTt2ZSBiZWVuIHVubWFwcGVkLiBUaGlzIGxlYWRzIHRvIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpbyDigJMgdXNlLWFmdGVyLWZyZWUsIGVmZmVjdGl2ZWx5LiBOb3QgaWRlYWwhCgpNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyB0byBjb25zaWRlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBCdXQgaG9sZCBvbi4uLiB0aGlzIGlzIGFsbCBhYm91dCBzdGFsZSAqYWRkcmVzc2VzKiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBga3ZtX21ha2VfcmVxdWVzdGAganVzdCBzZXRzIGEgYml0IGluIGB2Y3B1LSZndDtyZXF1ZXN0c2AuIEl0JiMzOTtzIG5vdCBjcmVhdGluZyBuZXcgZGF0YSwgYWxsb2NhdGluZyBtZW1vcnksIG9yIGxlYWtpbmcgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBmaXggaXRzZWxmIGlzIG1lcmVseSByZS1hcm1pbmcgdGhlIHJlcXVlc3QsIGFuZCB0aGUgdW5kZXJseWluZyBpc3N1ZSBpcyBzdGFsZSBwb2ludGVycywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBLQVNBTiBpcyBidWlsdCBmb3IuCgpTbywgS01TQU4gaXMgYSBub24tc3RhcnRlciBoZXJlLiBLQVNBTiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdvdWxkIGJlIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMga2luZCBvZiB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVnLiBXaGlsZSBLQVNBTiBtaWdodCBub3QgY2F0Y2ggdGhlIGhhcmR3YXJlJiMzOTtzIGRpcmVjdCBhY2Nlc3MgdG8gc3RhbGUgSFBBcyAoZGVwZW5kaW5nIG9uIHRoZSBpbnN0cnVtZW50YXRpb24pLCBLTVNBTiBkZWZpbml0ZWx5IHdvbiYjMzk7dCwgc2luY2UgaXQgdGFyZ2V0cyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgcGxhaW4gYW5kIHNpbXBsZSwgYW5kIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdoZXJlIGEgZmFpbHVyZSBpbiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGNvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcyAoSFBBcykgbWFwcGVkIGluIHZtY3MwMi4gSWYgdXNlcnNwYWNlIHJlc3VtZWQgdGhlIHZDUFUsIGhhcmR3YXJlIGNvdWxkIGFjY2VzcyB0aGVzZSBzdGFsZSBIUEFzLCBsZWFkaW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlLWxpa2UgYmVoYXZpb3IuIFRoZSBmaXggcmUtYXJtcyB0aGUgYEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFU2AgcmVxdWVzdCB0byBlbnN1cmUgS1ZNIHJldHJpZXMgdGhlIG1hcHBpbmcuXG5cblRoaXMgaXNzdWUgaXMgcmVsYXRlZCB0byBzdGFsZSBwb2ludGVycyBhbmQgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBtb3JlIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGFjY2VzcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aGVyZSBhIGZhaWx1cmUgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBjb3VsZCBsZWF2ZSB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggc3RhbGUgaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMgKEhQQXMpIG1hcHBlZCBpbiB2bWNzMDIuIElmIHVzZXJzcGFjZSByZXN1bWVkIHRoZSB2Q1BVLCBoYXJkd2FyZSBjb3VsZCBhY2Nlc3MgdGhlc2Ugc3RhbGUgSFBBcywgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZS1saWtlIGJlaGF2aW9yLiBUaGUgZml4IHJlLWFybXMgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QgdG8gZW5zdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nLlxuXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDI6NDQuMDYxOTA3Njc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTU4MDc1Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlXCIsXG4gICAgXCJuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMlwiLFxuICAgIFwidm14X2hhbmRsZV9leGl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2hlcmUgYSBmYWlsdXJlIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgY291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSBtYXBwZWQgaW4gdm1jczAyLiBJZiB1c2Vyc3BhY2UgcmVzdW1lZCB0aGUgdkNQVSwgaGFyZHdhcmUgY291bGQgYWNjZXNzIHRoZXNlIHN0YWxlIEhQQXMsIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUtbGlrZSBiZWhhdmlvci4gVGhlIGZpeCByZS1hcm1zIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0IHRvIGVuc3VyZSBLVk0gcmV0cmllcyB0aGUgbWFwcGluZy5cXG5cXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0ncyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQyOjQ0LjA2MTkxMzYyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTA5NTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4OTM2ZWUzZDdhMGZiOWY4MmE3ZGU2ZGJmMmViZDI5ZGNkOWMxNjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDU6NDI6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5pbmRleCBkZGY2ZGY3YmVlOTNiLi45ZTliZDZjNTQxYmFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuQEAgLTM0NTMsNyArMzQ1Myw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0ICogc3RhdGUgd2hpY2ggY2FuIGxlYWQgdG8gYSBsb2FkIG9mIHdyb25nIFBEUFRScy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChDQyghbG9hZF9wZHB0cnModmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5jcjMpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdH1cXG4gXFxuIFxcbkBAIC0zNDY5LDcgKzM0NjksNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlaW50ZXJuYWwuc3ViZXJyb3IgPVxcbiBcXHRcXHRcXHRcXHRLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OO1xcbiBcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWludGVybmFsLm5kYXRhID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMzUyNSw2ICszNTI1LDIwIEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0ZXhlY19jb250cm9sc19jbGVhcmJpdCh2bXgsIENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuK1xcbitmYWlsOlxcbitcXHQvKlxcbitcXHQgKiBSZS1hcm0gdGhlIHJlcXVlc3Qgc28gdGhhdCBLVk0gcmV0cmllcyB0aGUgbWFwcGluZyBpbnN0ZWFkIG9mIHJ1bm5pbmdcXG4rXFx0ICogTDIgd2l0aCBhIHN0YWxlIHZtY3MwMi4gIEJhaWxpbmcgaGVyZSBsZWF2ZXMgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZVxcbitcXHQgKiB3aXRoIHZtY3MwMiBsb2FkZWQgYW5kIGl0cyBBUElDLWFjY2VzcywgdmlydHVhbC1BUElDIGFuZCBwb3N0ZWRcXG4rXFx0ICogaW50ZXJydXB0IGRlc2NyaXB0b3IgYWRkcmVzc2VzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBob3N0IHBhZ2VzIHRoYXRcXG4rXFx0ICogd2VyZSBtYXBwZWQgZm9yIHRoZSAqcHJldmlvdXMqIG5lc3RlZCBWTS1FbnRlciwgd2hpY2ggaGF2ZSBzaW5jZSBiZWVuXFxuK1xcdCAqIHVubWFwcGVkIGFuZCB1bnBpbm5lZCBieSBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpLiAgS1ZNIHJldHVybnMgdG9cXG4rXFx0ICogdXNlcnNwYWNlIHdpdGhvdXQgbGVhdmluZyBndWVzdCBtb2RlLCBzbyBpZiB1c2Vyc3BhY2UgcmVzdW1lcyB0aGVcXG4rXFx0ICogdkNQVSwgVk0tRW50ZXIgc3VjY2VlZHMgYW5kIGhhcmR3YXJlIGFjY2Vzc2VzIHRob3NlIHN0YWxlIEhQQXMuXFxuK1xcdCAqL1xcbitcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mjo0NS4zNTE3MDg1OTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTE3MDI4Nzc3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVcIixcbiAgICBcIm5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyXCIsXG4gICAgXCJ2bXhfaGFuZGxlX2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0ncyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4OTM2ZWUzZDdhMGZiOWY4MmE3ZGU2ZGJmMmViZDI5ZGNkOWMxNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0Mjo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCBkZGY2ZGY3YmVlOTNiLi45ZTliZDZjNTQxYmFhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTM0NTMsNyArMzQ1Myw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0ICogc3RhdGUgd2hpY2ggY2FuIGxlYWQgdG8gYSBsb2FkIG9mIHdyb25nIFBEUFRScy5cbiBcdFx0ICovXG4gXHRcdGlmIChDQyghbG9hZF9wZHB0cnModmNwdSwgdmNwdS1cdTAwM2VhcmNoLmNyMykpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRnb3RvIGZhaWw7XG4gXHR9XG4gXG4gXG5AQCAtMzQ2OSw3ICszNDY5LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWludGVybmFsLnN1YmVycm9yID1cbiBcdFx0XHRcdEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047XG4gXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlaW50ZXJuYWwubmRhdGEgPSAwO1xuLVx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNTI1LDYgKzM1MjUsMjAgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRleGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbitcbitmYWlsOlxuK1x0LypcbitcdCAqIFJlLWFybSB0aGUgcmVxdWVzdCBzbyB0aGF0IEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIGluc3RlYWQgb2YgcnVubmluZ1xuK1x0ICogTDIgd2l0aCBhIHN0YWxlIHZtY3MwMi4gIEJhaWxpbmcgaGVyZSBsZWF2ZXMgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZVxuK1x0ICogd2l0aCB2bWNzMDIgbG9hZGVkIGFuZCBpdHMgQVBJQy1hY2Nlc3MsIHZpcnR1YWwtQVBJQyBhbmQgcG9zdGVkXG4rXHQgKiBpbnRlcnJ1cHQgZGVzY3JpcHRvciBhZGRyZXNzZXMgc3RpbGwgcG9pbnRpbmcgYXQgdGhlIGhvc3QgcGFnZXMgdGhhdFxuK1x0ICogd2VyZSBtYXBwZWQgZm9yIHRoZSAqcHJldmlvdXMqIG5lc3RlZCBWTS1FbnRlciwgd2hpY2ggaGF2ZSBzaW5jZSBiZWVuXG4rXHQgKiB1bm1hcHBlZCBhbmQgdW5waW5uZWQgYnkgbmVzdGVkX3B1dF92bWNzMTJfcGFnZXMoKS4gIEtWTSByZXR1cm5zIHRvXG4rXHQgKiB1c2Vyc3BhY2Ugd2l0aG91dCBsZWF2aW5nIGd1ZXN0IG1vZGUsIHNvIGlmIHVzZXJzcGFjZSByZXN1bWVzIHRoZVxuK1x0ICogdkNQVSwgVk0tRW50ZXIgc3VjY2VlZHMgYW5kIGhhcmR3YXJlIGFjY2Vzc2VzIHRob3NlIHN0YWxlIEhQQXMuXG4rXHQgKi9cbitcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDI6NDUuMzUxNzEwMjgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYxNTY3NTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIFZNWCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBidWcgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYC4gVGhlIGNvZGUgbm93IGhhbmRsZXMgYSBmYWlsdXJlIGJ5IGp1bXBpbmcgdG8gYGZhaWxgLCByZS1hcm1pbmcgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QsIGFuZCB0aGVuIHJldHVybmluZyBgZmFsc2VgLiBUaGUgY2hhbmdlIGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMgd2hlbiByZXRyaWV2aW5nIG5lc3RlZCBWTUNTMTIgcGFnZXMuIFRoZSBmYWN0IHRoYXQgaXQgcmUtYXJtcyB0aGUgcmVxdWVzdCBhZnRlciBmYWlsdXJlIGFuZCByZXR1cm5zIGBmYWxzZWAgaXMgdGhlIGtleSB0aGluZyBJJ20gZm9jdXNlZCBvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbiBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgLiBUaGUgY29udGV4dCBpcyBLVk0ncyB4ODYgbmVzdGVkIFZNWCBjb2RlLCBzbyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBuZXcgaXNzdWVzLiBUaGUgcmUtYXJtaW5nIG9mIHRoZSByZXF1ZXN0IGFmdGVyIHRoZSBmYWlsdXJlIHNlZW1zIGxpa2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGluIHRoZSBldmVudCBvZiB0aGlzIFwiZmFpbFwiIGNvbmRpdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgc2hvdWxkIGRvIHRoZSB0cmljay4gTm93IEknbGwgaGVhZCBvdmVyIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mjo1My45NjczODg5NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQyOjU0LjAxMzU2MjE2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NzkxNDU0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktWTSBNb2R1bGUgRGVwZW5kZW5jeSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gc3R1ZmYgYWdhaW4uIEkga25vdyBgS1ZNX0lOVEVMYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBhZnRlciwgdGhhdCdzIGEgZ2l2ZW4uIEJ1dCB3YWl0LCBgS1ZNYCBpdHNlbGYgaXMgYWxzbyBlc3NlbnRpYWwsIHJpZ2h0PyBJIGNhbid0IGp1c3QgZW5hYmxlIGBLVk1fSU5URUxgIGluIGlzb2xhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bmRhbWVudGFsIGBLVk1gIHN1cHBvcnQgaW4gcGxhY2UgZmlyc3QuXG5cblRpbWUgdG8gZHJpbGwgZG93bi4gTGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgZm9yIGBLVk1fSU5URUxgLiBJJ2xsIGhlYWQgb3ZlciB0byBgYXJjaC94ODYva3ZtL0tjb25maWdgIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZC4gTm8gcG9pbnQgaW4gYXNzdW1pbmc7IGJldHRlciB0byB2ZXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgZGlyZWN0bHkgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDI6NTkuNTkyNzExMDM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Nzk2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mjo1OS42NDE1MTM3NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY5NTY0MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBLVk0ncyB4ODYgY29uZmlndXJhdGlvbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIGl0LCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIHdpbGwgYmUgYXJvdW5kIGxpbmUgOTYgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgaW4gdGhpcyBhcmVhLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc2VlIHdoYXQncyB3aGF0ISBJ4oCZbSBob3BpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MDIuNjExMDgwNDEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxcbiAgOTE6XFx0XFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcXFwicmVhbFxcXCIgVk0gd29ya2xvYWQgYXMgYVxcbiAgOTI6XFx0XFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBLVk1fSU5URUxcXG4gIDk3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgSUEzMl9GRUFUX0NUTFxcbiAgOTk6XFx0XFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbiAxMDA6XFx0XFx0aGVscFxcbiAxMDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJ3MgVlRcXG4gMTAyOlxcdFxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxMDU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4gMTA4OlxcdCAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuIDEwOTpcXHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzowMi42MTExNTMxMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY0MDExMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpbnZvbHZlcyBgS1ZNYCBhbmQgc3BlY2lmaWNhbGx5IGBLVk1fSU5URUxgLCB3aGljaCBpcyBpbXBvcnRhbnQgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNoYW5nZXMsIGFuZCB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIG1vZGlmaWVkIGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi5cblxuTGV0IG1lIGNvbmZpcm0sIGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2Agc3RhdGljPyBBaCwgeWVzLCBpdCBpcy4gV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgY29uZmlybXMgdGhhdCBpdOKAmXMgYHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIFRvIGRvIHRoYXQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBmaWd1cmUgb3V0IGhvdyBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEkgbmVlZCB0byBmaW5kIGFsbCBvZiBpdHMgY2FsbGVycyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzowNy4wNzUxNjY4NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz05MTI9c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2FwaWN2X2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTM4LVxcdCAqIHRoZSBkZXNjcmlwdG9yIGFkZHJlc3MgaGFzIGJlZW4gYWxyZWFkeSBjaGVja2VkXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo5Mzk6XFx0ICogaW4gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMuXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy05NDAtXFx0ICpcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjQzMT1zdGF0aWMgdm9pZCBwcmVwYXJlX3ZtY3MwMl9lYXJseShzdHJ1Y3QgdmNwdV92bXggKnZteCwgc3RydWN0IGxvYWRlZF92bWNzICp2bWNzMDEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0ODEtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0ODI6XFx0ICogVGhpcyBiaXQgd2lsbCBiZSBjb21wdXRlZCBpbiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcywgYmVjYXVzZVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQ4My1cXHQgKiB3ZSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTDEncyBNU1IgYml0bWFwIHlldC4gIEZvciBub3csIGtlZXBcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQxMz1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X2V2bWNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDQxLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzQ0MjpzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzU0ND1zdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NjQtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTY1OlxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NjYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjQzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjk1LVxcdGlmIChmcm9tX3ZtZW50cnkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM2OTY6XFx0XFx0aWYgKHVubGlrZWx5KCFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2OTctXFx0XFx0XFx0dm14X3N3aXRjaF92bWNzKHZjcHUsIFxcdTAwMjZ2bXgtXFx1MDAzZXZtY3MwMSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3MzAtXFx0XFx0ICogbmVlZCB0byBwZXJmb3JtIGdwYSB0byBocGEgdHJhbnNsYXRpb24pLiBSZXF1ZXN0IGEgY2FsbFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzczMTpcXHRcXHQgKiB0byBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyBiZWZvcmUgdGhlIG5leHQgVk0tZW50cnkuICBUaGUgTVNSc1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzczMi1cXHRcXHQgKiBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXQgdm1lbnRyeSB0aW1lIGFuZCBzaG91bGQgbm90IGJlIHJlc2V0Llxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDE0LVxcdFxcdCAqIHJlc3RvcmVkIHlldC4gRVZNQ1Mgd2lsbCBiZSBtYXBwZWQgZnJvbVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzAxNTpcXHRcXHQgKiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcygpLlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzAxNi1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MDcuMTIwNDkxODEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDMwNDE3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTVggQ29kZSoqXG5cbk9rYXksIHNvIEkgc2VlIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgYW5kIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGFyZSBjYWxsaW5nIGVhY2ggb3RoZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBGaXJzdCwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIHRvIHNlZSBpZiBpdCdzIHN0YXRpYywgYW5kIHllcywgaXQgaXMuIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHBvdGVudGlhbCBpbmxpbmluZy4gTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgaXRzZWxmLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTAuMjYzNTM2Mzk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI2MzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2MzA9c3RhdGljIHZvaWQgbG9hZF92bWNzMTJfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjQzOmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRib29sIGZyb21fdm1lbnRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Mzc5OD1zdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzctXFx0dm14LVxcdTAwM2VuZXN0ZWQuaGFzX3ByZWVtcHRpb25fdGltZXJfZGVhZGxpbmUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4Nzg6XFx0c3RhdHVzID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIHRydWUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3OS1cXHRpZiAodW5saWtlbHkoc3RhdHVzICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4NS1cXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg4NjpcXHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpIGFzIGl0IHdpbGxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODctXFx0ICogYWxzbyBiZSB1c2VkIGFzIHBhcnQgb2YgcmVzdG9yaW5nIG5WTVggc3RhdGUgZm9yXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTI9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwNzktXFx0dm14LVxcdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSB0cnVlO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA4MDpcXHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA4MS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoxMC4zNDI4MDk0NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NjQyOTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMgRnVuY3Rpb25zIGluIE5lc3RlZCBWTVgqKlxuXG5Pa2F5LCBzbyBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4uLiBJIHRob3VnaHQgaXQgbWlnaHQgYmUgc3RhdGljLCBidXQgdGhlIGdyZXAgcmVzdWx0cyBzYXkgb3RoZXJ3aXNlLiBUaGF0J3MgdW51c3VhbC4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIuIElmIHRoYXQgb25lIGlzbid0IHN0YXRpYywgbWF5YmUgdGhlcmUncyBhIHBhdHRlcm4sIG9yIGEgbG9naWNhbCByZWFzb24gZm9yIHRoaXMuIExldCdzIHNoaWZ0IG91ciBmb2N1cyBhbmQgaW52ZXN0aWdhdGUgYG5lc3RlZF92bXhfcnVuYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gVGhleSdyZSBsaWtlbHkgcmVsYXRlZCwgYW5kIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBwcm9iYWJseSBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyAqbm90KiBzdGF0aWMsIGFuZCB0aGVzZSByZWxhdGVkIGZ1bmN0aW9ucyBzaG91bGQgaG9wZWZ1bGx5IHNoZWQgc29tZSBsaWdodC4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHN1YnRsZSBkZXNpZ24gY2hvaWNlLCBhbmQgSSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciB0aGUgaW1wbGljYXRpb25zIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHBvdGVudGlhbGx5IGluIGhvdyB0aGUgVk0gZXhpdHMgdGhlIFZNWCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTUuMzE5MjQyMTgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzkyOTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfdm14X3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzY0Mz1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5NC0vKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc5NTogKiBuZXN0ZWRfdm14X3J1bigpIGhhbmRsZXMgYSBuZXN0ZWQgZW50cnksIGkuZS4sIGEgVk1MQVVOQ0ggb3IgVk1SRVNVTUUgb24gTDFcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3OTYtICogZm9yIHJ1bm5pbmcgYW4gTDIgbmVzdGVkIGd1ZXN0LlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5Ny0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3OTg6c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NDg9c3RhdGljIGludCBoYW5kbGVfdm1sYXVuY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY0OS17XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1NjUwOlxcdHJldHVybiBuZXN0ZWRfdm14X3J1bih2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NTEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NjU0PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcmVzdW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY1Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU2NTc6XFx0cmV0dXJuIG5lc3RlZF92bXhfcnVuKHZjcHUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoxNS40MTMyMTAyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkzMzY5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFZNWCBTdGF0ZSBUcmFuc2l0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBoYW5kbGVfdm1sYXVuY2hgIGFuZCBgaGFuZGxlX3ZtcmVzdW1lYCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXkncmUgZGVmaW5lZCBhcyBgc3RhdGljYC4gUmlnaHQsIHRoYXQncyBub3QgdW51c3VhbCBmb3IgaGFuZGxlcnMgbGlrZSB0aGlzLCBidXQgaXQncyBhIGdvb2QgcmVtaW5kZXIgb2YgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IHdpdGggdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gVGhlIGtleSBoZXJlIGlzIGxpa2VseSBnb2luZyB0byBiZSBob3cgdGhlIGhhcmR3YXJlIG1hbmFnZXMgdGhlIHN0YXRlIGFjcm9zcyB0aG9zZSBjYWxscy4gVGltZSB0byBjaGVjayBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTkuMzA2NTgyOTk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY0MTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfc2V0X25lc3RlZF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg5MD1pbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTExLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjkxMjpzdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5MTMtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0OTc9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNC1cXHQuZ2V0X3N0YXRlID0gdm14X2dldF9uZXN0ZWRfc3RhdGUsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTA1OlxcdC5zZXRfc3RhdGUgPSB2bXhfc2V0X25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDYtXFx0LmdldF9uZXN0ZWRfc3RhdGVfcGFnZXMgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTkuNDA0MjMwNjc1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzEzNjc4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXN0ZWQgVk1YIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gaG93IGB2bXhfbmVzdGVkX29wc2AgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaXRzIGRlcGVuZGVuY2Ugb24gYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cywgdGhlIGV4dGVybmFsIGludGVyZmFjZXMgZm9yIHRoaXMgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCB0aGF0IGFjdCBhcyB0aGVzZSBlbnRyeSBwb2ludHMuXG5cbkxldCBtZSBzZWUuLi4gQWgsIHRoZXJlJ3MgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCBpc24ndCBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgc2luY2UgdGhhdCB3b3VsZCBtYWtlIGl0IGluYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyBmaWxlLiBIb3BlZnVsbHksIGl0J3MgZXhwb3NlZCBmb3IgdXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIGVudHJ5IHBvaW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQzOjIyLjkzNTYwMTE4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5MDAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjMwPXN0YXRpYyB2b2lkIGxvYWRfdm1jczEyX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjQyLSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzY0MzplbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBmcm9tX3ZtZW50cnkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3OTg9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODc3LVxcdHZteC1cXHUwMDNlbmVzdGVkLmhhc19wcmVlbXB0aW9uX3RpbWVyX2RlYWRsaW5lID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODc4OlxcdHN0YXR1cyA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzktXFx0aWYgKHVubGlrZWx5KHN0YXR1cyAhPSBOVk1YX1ZNRU5UUllfU1VDQ0VTUykpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODUtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4ODY6XFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoKSBhcyBpdCB3aWxsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODg3LVxcdCAqIGFsc28gYmUgdXNlZCBhcyBwYXJ0IG9mIHJlc3RvcmluZyBuVk1YIHN0YXRlIGZvclxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc5LVxcdHZteC1cXHUwMDNlbmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwODA6XFx0cmV0ID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwODEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MjMuMDI2NTA4MDg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjQzNzgxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBmdW5jdGlvbiBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuLi4gSWYgaXQncyBub3Qgc3RhdGljLCB0aGUgYmlnZ2VyIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoaXMgZnVuY3Rpb24gZXhwb3NlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGBuZXN0ZWQuY2AgZmlsZSBpdHNlbGY/IElzIGl0IGRlY2xhcmVkIGluIGEgaGVhZGVyIG9yIHVzZWQgYnkgYW5vdGhlciBtb2R1bGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoyOC4zOTA5MDMyOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mzk2NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2MzA9c3RhdGljIHZvaWQgbG9hZF92bWNzMTJfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjQzOmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRib29sIGZyb21fdm1lbnRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Mzc5OD1zdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzctXFx0dm14LVxcdTAwM2VuZXN0ZWQuaGFzX3ByZWVtcHRpb25fdGltZXJfZGVhZGxpbmUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4Nzg6XFx0c3RhdHVzID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIHRydWUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3OS1cXHRpZiAodW5saWtlbHkoc3RhdHVzICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4NS1cXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg4NjpcXHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpIGFzIGl0IHdpbGxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODctXFx0ICogYWxzbyBiZSB1c2VkIGFzIHBhcnQgb2YgcmVzdG9yaW5nIG5WTVggc3RhdGUgZm9yXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTI9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwNzktXFx0dm14LVxcdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSB0cnVlO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA4MDpcXHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA4MS1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0xMC0vKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MTE6ICogU3RhdHVzIHJldHVybmVkIGJ5IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpOlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMTItICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI2PXZvaWQgbmVzdGVkX3ZteF9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjI3OmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGZyb21fdm1lbnRyeSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0MjA9aW50IHZteF9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDM0LVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODQzNTpcXHRcXHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQzNi1cXHRcXHRpZiAocmV0ICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoyOC40NDkzMDY2NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwOTQxNDIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXMgY29kZTpcblxuKipEZWVwIERpdmUgaW50byBWTVggTmVzdGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYHZteF9sZWF2ZV9zbW1gLCBhbmQgaXQncyBjYWxsaW5nIHNvbWV0aGluZyBpbiBgdm14LmNgLiBNeSBzcGlkZXktc2Vuc2UgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIG5lc3RlZCBWTVggb3BlcmF0aW9uLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHN5bWJvbCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGluaXRpYWwgYW5hbHlzaXMgb24gdGhhdCBmdW5jdGlvbi5cblxuTm93LCBob2xkIG9uLiBJIGFsc28gc2VlIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAuIEl0J3Mgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIHRoaXMga2luZCBvZiBzaXR1YXRpb24sIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGB2bXhfbmVzdGVkX29wcy5zZXRfc3RhdGVgLiBUaGF0IGB2bXhfbmVzdGVkX29wc2Agc3RydWN0dXJlIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIGFjdGlvbiBpcyBoYXBwZW5pbmcsIHNvIEkgbmVlZCB0byBjaGVjayBpdCBvdXQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQgdG8gbWFuYWdlIHRoZSBuZXN0ZWQgVk1YIGVudmlyb25tZW50LiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIGl0cyBkZWNsYXJhdGlvbiwgYW5kIGhvdyB0aGUgYHNldF9zdGF0ZWAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzozMi43NTg3MjQ4MjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQzNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9uZXN0ZWRfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk3LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjk5ODpcXHQubmVzdGVkX29wcyA9IFxcdTAwMjZ2bXhfbmVzdGVkX29wcyxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzY9c3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0OTc6c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTgtXFx0LmxlYXZlX25lc3RlZCA9IHZteF9sZWF2ZV9uZXN0ZWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTMxMj1zdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX2NwdV9oYXNfbm9faHdfZXJyY29kZV9jYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMyMTpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcztcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MzIuODM3ODc1MDU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjIwODg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5lc3RlZCBWTVggRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmVzdGVkIFZNWCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBzZWUgdGhhdCBgdm14X25lc3RlZF9vcHNgIGlzIHVzZWQgaW4gYG1haW4uY2AgdG8gaW5pdGlhbGl6ZSBgdnRfeDg2X29wcy5uZXN0ZWRfb3BzYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHRoZSBzeW1ib2wgdGFibGUgYW5kIHdoYXQncyBub3QuXG5cbkxldCdzIHNlZSwgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGJlIGlubGluZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBleHBvcnRlZCBhbmQgd2hldGhlciBzeXprYWxsZXIgY2FuIHJlYWNoIGl0LiBJJ2xsIGNoZWNrIGBuZXN0ZWRfdm14X3J1bmAsIHdoaWNoIGlzIGFsc28gc3RhdGljOyBpdCBpcyB1bmxpa2VseSB0byBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBgaGFuZGxlX3ZtbGF1bmNoYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoYXQsIHRvby4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYD8gQWhhISBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyAqbm9uLXN0YXRpYyogYW5kIGl0IGNhbGxzIHRoYXQgZnVuY3Rpb24uIFRoYXQncyBhIHN0cm9uZyBjYW5kaWRhdGUuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIGBuZXN0ZWRfdm14X2NoZWNrX2FwaWN2X2NvbnRyb2xzYCBpcyBzdGF0aWMsIGBwcmVwYXJlX3ZtY3MwMl9lYXJseWAgaXMgc3RhdGljLCBgbmVzdGVkX2dldF9ldm1jc19wYWdlYCBpcyBzdGF0aWMsIGFuZCBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGlzIHN0YXRpYy4gVGhleSdyZSBhbGwgcHJvYmFibHkgaW50ZXJuYWwgaGVscGVycy5cblxuTm93LCBhYm91dCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBJdCdzIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyISBUaGF0IG1lYW5zIGl0IHdvbid0IGJlIGlubGluZWQuIEJ1dCBpdCAqY291bGQqIHN0aWxsIGJlIGEgaGlkZGVuIHN5bWJvbCwgc28gc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gcmVhY2ggaXQuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMuIEJ1dCwgYmFzZWQgb24gdGhlIHByb21wdCwgaXQgc291bmRzIGxpa2UgSSBzaG91bGQgZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyBkZWZpbml0ZWx5IGEgYmV0dGVyIGZvY3VzIHNpbmNlIGl0IGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLlxuXG5JIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCBmb3IgbW9yZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5lc3RlZCBWTVguIEkgbmVlZCB0byBrZWVwIHNlYXJjaGluZyBmb3IgYW55IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODk3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQzOjQxLjU1OTk2NzY5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5MTY4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBuZXN0ZWRfdm14X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4MT12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg5MDppbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQzOjQxLjYzNzg4OTExMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzgzNDYyMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEludmVzdGlnYXRpb246IFZNWCBDb250ZXh0IFx1MDAyNiBQb3RlbnRpYWwgTmVzdGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHdpdGhpbiB0aGUga2VybmVsJ3MgVk1YIGhhbmRsaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYW55IGNvZGUgcGF0aHMgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGFueXRoaW5nIHRoYXQgcmVzZW1ibGVzIHRoYXQgdHlwZSBvZiBhcmNoaXRlY3R1cmUuIFRoZSBpbW1lZGlhdGUgc2VhcmNoIHN0cmF0ZWd5IGludm9sdmVzIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIG5hbWVzIG9yIGNvZGUgYmxvY2tzIHRoYXQgbWlnaHQgY29udGFpbiBgXnZvaWQgbmVzdGVkX3ZteF9gLCBvciBzb21ldGhpbmcgZXF1YWxseSBkZXNjcmlwdGl2ZS4gSSdtIGRlbGliZXJhdGVseSB1c2luZyBhIHdpbGRjYXJkIChgXmApIGF0IHRoZSBiZWdpbm5pbmcgdG8gZ3JhYiBhbnl0aGluZyB0aGF0ICpwcmVjZWRlcyogdGhlIHBocmFzZSAtIGluIGVmZmVjdCBsb29raW5nIGZvciBwb3RlbnRpYWwgd3JhcHBlcnMgb3Igc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gVGhlIGdvYWwgaXMgdG8gcmFwaWRseSBsb2NhdGUgY29kZSBzZWdtZW50cyBpbnZvbHZlZCB3aXRoIFZNWCBtYW5hZ2VtZW50LCBhbmQgaW4gcGFydGljdWxhciwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5kaWNhdGlvbnMgb2YgYSBcIm5lc3RlZFwiIGV4ZWN1dGlvbiBtb2RlbC4gVGhpcyByYXBpZCBjaGVjayBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIHNpZ25hbCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDE4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6NDkuNDIxMzUzNjUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyNTU5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpfXSsgbmVzdGVkX3ZteF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMzNj1zdGF0aWMgdm9pZCBmcmVlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NC0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4NTp2b2lkIG5lc3RlZF92bXhfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY2Mj1zdGF0aWMgaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjYzOnZvaWQgbmVzdGVkX3ZteF9zZXRfbXNyXyMjcncjI19pbnRlcmNlcHQoc3RydWN0IHZjcHVfdm14ICp2bXgsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjY0LVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICptc3JfYml0bWFwX2wxLFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjE5Nz1zdGF0aWMgaW50IGhhbmRsZV92bWZ1bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjUxLSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjI1Mjpib29sIG5lc3RlZF92bXhfY2hlY2tfaW9fYml0bWFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBwb3J0LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjI1My1cXHRcXHRcXHRcXHQgaW50IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY1NjY9c3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjcwNS0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY3MDY6Ym9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY3MDcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODgxPXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODkwOmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA5My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwOTQ6dm9pZCBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAodm9pZClcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwOTUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03MzUyPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfc2V0dXBfY3JfZml4ZWQoc3RydWN0IG5lc3RlZF92bXhfbXNycyAqbXNycylcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzM4MS0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjczODI6dm9pZCBuZXN0ZWRfdm14X3NldHVwX2N0bHNfbXNycyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZiwgdTMyIGVwdF9jYXBzKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzM4My17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0MTgtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDE5OnZvaWQgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDIwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6NDkuNTI5NjE0MDYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjUwODMxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGxvb2tpbmcgc29saWQsIHRoYXQgc2VlbXMgdG8gYmUgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEJ1dCBub3cgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gV2hhdCBhYm91dCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgPyBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgaXQncyAqdGhlKiBlbnRyeSBwb2ludCBmb3IgdGhhdCBgS1ZNX1NFVF9ORVNURURfU1RBVEVgIGlvY3RsLiBJdCBmZWVscyBsaWtlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGllY2UgYmV0dGVyIGluIHJlbGF0aW9uIHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZWdyYXRlcy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIGF0IGBrdm1feDg2X25lc3RlZF9vcHNgLCBpdCBzaG91bGQgaGF2ZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIG9uIGhvdyB0aGVzZSBwaWVjZXMgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6NTQuMjk0NzAwMTExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyMjU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2xhcGljLmM9MzI5Mz1pbnQga3ZtX2FwaWNfZ2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcylcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTMzMDUtXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MzMwNjppbnQga3ZtX2FwaWNfc2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcylcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0zMzA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5oPTEzNj1pbnQga3ZtX2FwaWNfZ2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcyk7XFxuYXJjaC94ODYva3ZtL2xhcGljLmg6MTM3OmludCBrdm1fYXBpY19zZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKTtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuaC0xMzgtaW50IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTIxNjU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBzdm1fbmVzdGVkX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE3Mi1cXHQuZ2V0X3N0YXRlID0gc3ZtX2dldF9uZXN0ZWRfc3RhdGUsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTczOlxcdC5zZXRfc3RhdGUgPSBzdm1fc2V0X25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIxNzQtXFx0Lmh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoID0gc3ZtX2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDk3PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDQtXFx0LmdldF9zdGF0ZSA9IHZteF9nZXRfbmVzdGVkX3N0YXRlLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNTpcXHQuc2V0X3N0YXRlID0gdm14X3NldF9uZXN0ZWRfc3RhdGUsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NTA2LVxcdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTMxMD1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3NldF9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxODpcXHRyID0ga3ZtX2FwaWNfc2V0X3N0YXRlKHZjcHUsIHMpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzE5LVxcdGlmIChyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjEtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1NjI6XFx0XFx0aWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VzZXRfc3RhdGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU4NC1cXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU4NTpcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlc2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgXFx1MDAyNmt2bV9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1ODYtXFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mzo1NC40MDI5MzA4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzMwNDEyMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSBpbnRvIFZNIEV4aXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBjYWxsLCBhbmQgaXQgdWx0aW1hdGVseSBsYW5kcyBpbiBga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VzZXRfc3RhdGVgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkga25vdyBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBJIGNhbiB1c2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFzIGEgcHJldHR5IGdvb2QgZm9jdXMgcG9pbnQsIGFsdGhvdWdoIGl0IGlzIGEgaG90LXBhdGggZ2VuZXJpYyBmdW5jdGlvbi5cblxuTm93LCB3aGVyZSBkb2VzIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgbGVhZD8gUmlnaHQsIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGNhbGxlZCBmcm9tIGJvdGggYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBhbmQgYG5lc3RlZF92bXhfcnVuYC4gSW50ZXJlc3RpbmcsIGlzIGBuZXN0ZWRfdm14X3J1bmAgYWxzbyBzdGF0aWM/IFllcCwgaXQgaXMuIEFuZCBob3cgYWJvdXQgYGhhbmRsZV92bWxhdW5jaGA/IEFsc28gc3RhdGljLCBhcyBleHBlY3RlZC5cblxuTXkgbGluZSBvZiB0aGlua2luZyBub3cgaXMgdG8gdHJ5IGFuZCBpZGVudGlmeSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIFZNIGV4aXRzLCBhbmQgaWYgYHZteF9oYW5kbGVfZXhpdGAgaXMgbm9uLXN0YXRpYywgaXQgc2hvdWxkIGJlIHByb21pc2luZy4gQW5kIGluZGVlZCwgYHZteF9oYW5kbGVfZXhpdGAgaXMgbm90IHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MDAuMTMzMzQ0NzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjEwNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9oYW5kbGVfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNTk9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjQtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTY1OlxcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Ni19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODA9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5My1cXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5OTQ6XFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDA5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NDc0LVxcdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NDc1OlxcdCAqIFNlZSB0aGUgY29tbWVudHMgaW4gdm14X2hhbmRsZV9leGl0LlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ3Ni1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjI1OD1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MjYyLVxcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjI2MzpcXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNjQtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY0OTE9dm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Njk1LSAqL1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjY5NjpzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjY5Ny17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTQtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODU1OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODU2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTc6XFx0aW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1OC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzE2OD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxODMtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTg0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTg1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI5PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzA6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzE6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzItaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjAwLjIyMjU1OTkxOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUxNjgxNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyBhbmQgYSBQb3RlbnRpYWwgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBhdHRlcm46IGB2bXhfaGFuZGxlX2V4aXRgLCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCwgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYCwgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLCBgbmVzdGVkX3ZteF9jaGVja19pb19iaXRtYXBzYCwgYG5lc3RlZF92bXhfZnJlZV92Y3B1YCwgYG5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcGAsIGBuZXN0ZWRfdm14X3NldHVwX2N0bHNfbXNyc2AsIGFuZCBgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwYCDigJMgdGhleSBhcmUgYWxsIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkgYXJlIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHByb2JhYmx5IHBhcnQgb2YgYW4gQVBJIG9yIGV4cG9zZWQgZm9yIHNvbWUgb3RoZXIgbW9kdWxlIHRvIGxldmVyYWdlLlxuXG5NeSBmb2N1cyBpcyBkcmF3biB0byB0aGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgZnVuY3Rpb24gYmVjYXVzZSBJIHVuZGVyc3RhbmQgdGhhdCBpdCdzIHRoZSBzdXNwZWN0ZWQgY3VscHJpdC4gQW5kIGl0J3MgY2FsbGVkIGJ5IGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgYW5kIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgLiBJIHJlbWVtYmVyIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgcmVjYWxsIHRoZSBmbG93IGZyb20gYSBwYWdlIGZhdWx0LiBJdCBzZWVtcyBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGxlYWRzIHRvIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNoYWluOiBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCAtXHUwMDNlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIC1cdTAwM2UgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgLVx1MDAzZSBga3ZtX21tdV9nZXRfcGFnZWAgYW5kIHRoZW7igKYgb2gsIHJpZ2h0LCBpdCdzIGFzc2lnbmVkIHRvIGB2bXhfbmVzdGVkX29wcy5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYC4gRXhjZWxsZW50LCBub3cgSSB1bmRlcnN0YW5kIHRoZSBwYXRoLlxuXG5JIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYGdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHdpZGVzcHJlYWQgdGhpcyBwcm9ibGVtIG1pZ2h0IGJlLiBUaGUgaXNzdWUgY291bGQgYmUgdmVyeSBsb2NhbGl6ZWQgb3IgaW1wYWN0IG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCByZWx5IG9uIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjA2LjQ3NDI0NDQ0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzODUzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTk1MD1zdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjExMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIxMTI6c3RhdGljIGJvb2wgc3ZtX2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjExMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTIxNjU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBzdm1fbmVzdGVkX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE3MC1cXHQudHJpcGxlX2ZhdWx0ID0gbmVzdGVkX3N2bV90cmlwbGVfZmF1bHQsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTcxOlxcdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gc3ZtX2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTcyLVxcdC5nZXRfc3RhdGUgPSBzdm1fZ2V0X25lc3RlZF9zdGF0ZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQ0Mj1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NDMtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTQ0OnN0YXRpYyBib29sIHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDk3PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDUtXFx0LnNldF9zdGF0ZSA9IHZteF9zZXRfbmVzdGVkX3N0YXRlLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNjpcXHQuZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyA9IHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNy1cXHQud3JpdGVfbG9nX2RpcnR5ID0gbmVzdGVkX3ZteF93cml0ZV9wbWxfYnVmZmVyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTEyPXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMzQtXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTExMzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHZjcHUpKSkge1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNi1cXHRcXHRcXHRcXHRyID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MDYuNTQ0NjM0NTk0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTY4NTkxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gRml4KipcblxuT2theSwgc28gYGdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGdldHMgY2FsbGVkIHdpdGhpbiBgdmNwdV9lbnRlcl9ndWVzdGAgd2hlbiB3ZSBoYXZlIGEgYEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFU2AgcmVxdWVzdC4gVGhlIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZXhwbGljaXRseSByZS1hcm1zIHRoYXQgcmVxdWVzdCB3aXRoaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBpbiBjYXNlIG9mIGZhaWx1cmUuIEVzc2VudGlhbGx5LCBpdCdzIG1ha2luZyBzdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHJ1bm5pbmcgTDIgd2l0aCBhIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdm1jczAyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgd2l0aG91dCB0aGlzLCB3ZSdkIGJhaWwgb3V0LCBsZWF2aW5nIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBhbiBvdXRkYXRlZCBgdm1jczAyYCwgYW5kIGl0cyBhZGRyZXNzZXMgcG9pbnRpbmcgdG8gKmhvc3QqIHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBiZWNhdXNlIGBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpYCBoYXMgdW5tYXBwZWQgYW5kIHVucGlubmVkIHRoZW0uIEtWTSB3b3VsZCByZXR1cm4gdG8gdXNlcnNwYWNlLCBhbmQgaWYgdGhhdCB1c2Vyc3BhY2UgdGhpbmcgcmVzdW1lcyB0aGUgdkNQVSwgVk0tRW50ZXIgd291bGQgc3VjY2VlZCwgYnV0IHdlJ2QgaGF2ZSBoYXJkd2FyZSBhY2Nlc3NpbmcgdGhvc2Ugc3RhbGUgSFBBcyDigJMgYSBkZWZpbml0ZSByZWNpcGUgZm9yIGRpc2FzdGVyLlxuXG5UaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4IHRoYXQgSSB0aGluayBpcyByaXBlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzLCBzcGVjaWZpY2FsbHkgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBpbiB0aGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LlxuXG5MZXQncyBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIHBvdGVudGlhbGx5IHJlbGV2YW50IHRoYXQgYXJlbid0IHN0YXRpYz9cbk9rYXksIEknbGwgYWxzbyBhZGQgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBmdXp6aW5nIGZvY3VzIGxpc3QuXG5gbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJgIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGBcblxuU28gSSdtIGdvaW5nIHRvIGluY2x1ZGUgaW4gdGhlIGZ1enppbmc6XG4tIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgXG4tIGB2bXhfaGFuZGxlX2V4aXRgXG5cbk5vdywgYmVmb3JlIEkgZ2V0IGNhcnJpZWQgYXdheSwgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgYnVpbGRzLiBJIGtub3cgaXQncyBLVk0gYW5kIEtWTV9JTlRFTCwgYnV0IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHRoZXJlIGlzbid0IGFueXRoaW5nIGVsc2UuIENoZWNraW5nIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2Agbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjE5LjExMzIyOTYyNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4ODE0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0NDoxOS4xODYxMTg3ODNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2MDAxOTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gRnV6emluZyBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmb2N1cyBpcyBLVk0gZnV6emluZywgYW5kIEkga25vdyB0aGF0IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgW1wiS1ZNXCIsIFwiS1ZNX0lOVEVMXCJdYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCBmaWxlLiBJJ20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYyBhbmQgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBPa2F5LCBJIHNlZSBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCwgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLCBhbmQgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYC4gQWZ0ZXIgcmV2aWV3LCBJJ3ZlIGRlY2lkZWQgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgYW5kIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAgaGF2ZSB0aGUgbW9zdCBmdXp6aW5nIHBvdGVudGlhbC4gSSB3aWxsIGFsc28gaW5jbHVkZSBgdm14X2hhbmRsZV9leGl0YCBpbiBteSB0ZXN0aW5nIHN0cmF0ZWd5LlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGUgZGV0YWlscyBvZiBgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJgIHRvIGVuc3VyZSBpdCdzIGEgZ29vZCBjYW5kaWRhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTA1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjI3LjQ0NjE0MTM3MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE3MTgyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODgxPXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODkwOmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA3My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwNzQ6XFx0cmV0ID0gbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yND12b2lkIG5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjI1OmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjYtdm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDIwPWludCB2bXhfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQzMS1cXHRcXHQvKiBUcmlwbGUgZmF1bHQgaWYgdGhlIHN0YXRlIGlzIGludmFsaWQuICAqL1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODQzMjpcXHRcXHRpZiAobmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIodmNwdSkgXFx1MDAzYyAwKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQzMy1cXHRcXHRcXHRyZXR1cm4gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MjcuNTM3ODc3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzkzNTE3OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZNWCBNb2R1bGUgU3ltYm9sIFVzYWdlKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIHVzYWdlIG9mIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAsIGFuZCBjb25maXJtZWQgdGhhdCBpdCdzIGluZGVlZCBjYWxsZWQgd2l0aGluIGB2bXhfbGVhdmVfc21tYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGZ1bmN0aW9ucyBpbnRlcmFjdC5cblxuR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGtlZXAgYSBsYXNlciBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGZvciBmdXJ0aGVyIGFuYWx5c2lzOlxuXG4qICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWBcbiogICBgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJgXG4qICAgYHZteF9oYW5kbGVfZXhpdGBcblxuVGhhdCBzZWVtcyB0byBiZSBhIHNvbGlkIGxpc3Qgb2Yga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcy4gTGV0J3MgZ2V0IHRoZXNlIHJlc3VsdHMgc2V0IGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIwNiwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MzYuOTMxMzk5MDg4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMTgzNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwibmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSdzIG5lc3RlZCBWTVggaW1wbGVtZW50YXRpb24gd2hlcmUgYSBmYWlsdXJlIHRvIG1hcCBWTUNTMTIgcGFnZXMgd291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ORVNURURfU1RBVEUgb3IgVk0tRW50ZXIpLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwibmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSdzIG5lc3RlZCBWTVggaW1wbGVtZW50YXRpb24gd2hlcmUgYSBmYWlsdXJlIHRvIG1hcCBWTUNTMTIgcGFnZXMgd291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ORVNURURfU1RBVEUgb3IgVk0tRW50ZXIpLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MzcuMDU0NTkxODM3WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE2NTM4MTkyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjM3LjA1NTQwNjQyN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjE2NDU2MzM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdoZXJlIGEgZmFpbHVyZSBpbiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGNvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcyAoSFBBcykgbWFwcGVkIGluIHZtY3MwMi4gSWYgdXNlcnNwYWNlIHJlc3VtZWQgdGhlIHZDUFUsIGhhcmR3YXJlIGNvdWxkIGFjY2VzcyB0aGVzZSBzdGFsZSBIUEFzLCBsZWFkaW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlLWxpa2UgYmVoYXZpb3IuIFRoZSBmaXggcmUtYXJtcyB0aGUgYEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFU2AgcmVxdWVzdCB0byBlbnN1cmUgS1ZNIHJldHJpZXMgdGhlIG1hcHBpbmcuXFxuXFxuVGhpcyBpc3N1ZSBpcyByZWxhdGVkIHRvIHN0YWxlIHBvaW50ZXJzIGFuZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgYWNjZXNzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjg5MzZlZTNkN2EwZmI5ZjgyYTdkZTZkYmYyZWJkMjlkY2Q5YzE2NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IGRkZjZkZjdiZWU5M2IuLjllOWJkNmM1NDFiYWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtMzQ1Myw3ICszNDUzLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBzdGF0ZSB3aGljaCBjYW4gbGVhZCB0byBhIGxvYWQgb2Ygd3JvbmcgUERQVFJzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKENDKCFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guY3IzKSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gZmFpbDtcbiBcdH1cbiBcbiBcbkBAIC0zNDY5LDcgKzM0NjksNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlaW50ZXJuYWwuc3ViZXJyb3IgPVxuIFx0XHRcdFx0S1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTjtcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VpbnRlcm5hbC5uZGF0YSA9IDA7XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTM1MjUsNiArMzUyNSwyMCBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGV4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuK1xuK2ZhaWw6XG4rXHQvKlxuK1x0ICogUmUtYXJtIHRoZSByZXF1ZXN0IHNvIHRoYXQgS1ZNIHJldHJpZXMgdGhlIG1hcHBpbmcgaW5zdGVhZCBvZiBydW5uaW5nXG4rXHQgKiBMMiB3aXRoIGEgc3RhbGUgdm1jczAyLiAgQmFpbGluZyBoZXJlIGxlYXZlcyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlXG4rXHQgKiB3aXRoIHZtY3MwMiBsb2FkZWQgYW5kIGl0cyBBUElDLWFjY2VzcywgdmlydHVhbC1BUElDIGFuZCBwb3N0ZWRcbitcdCAqIGludGVycnVwdCBkZXNjcmlwdG9yIGFkZHJlc3NlcyBzdGlsbCBwb2ludGluZyBhdCB0aGUgaG9zdCBwYWdlcyB0aGF0XG4rXHQgKiB3ZXJlIG1hcHBlZCBmb3IgdGhlICpwcmV2aW91cyogbmVzdGVkIFZNLUVudGVyLCB3aGljaCBoYXZlIHNpbmNlIGJlZW5cbitcdCAqIHVubWFwcGVkIGFuZCB1bnBpbm5lZCBieSBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpLiAgS1ZNIHJldHVybnMgdG9cbitcdCAqIHVzZXJzcGFjZSB3aXRob3V0IGxlYXZpbmcgZ3Vlc3QgbW9kZSwgc28gaWYgdXNlcnNwYWNlIHJlc3VtZXMgdGhlXG4rXHQgKiB2Q1BVLCBWTS1FbnRlciBzdWNjZWVkcyBhbmQgaGFyZHdhcmUgYWNjZXNzZXMgdGhvc2Ugc3RhbGUgSFBBcy5cbitcdCAqL1xuK1x0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0NDozNy4wNTU0MDc3MzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNjQ1NDE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBCYXNpY2FsbHksIGluc3RlYWQgb2YganVzdCBiYWlsaW5nIG91dCB3aXRoIGBmYWxzZWAgd2hlbiBpdCBmYWlscywgaXQgbm93IHJlLWFybXMgYSByZXF1ZXN0IHRvIHJldHJ5IHRoZSBtYXBwaW5nLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHRvIHByZXZlbnQgTDIgZnJvbSBydW5uaW5nIHdpdGggYSBzdGFsZSBgdm1jczAyYC4gVGhlIGNvcmUgcHJvYmxlbT8gSGFyZHdhcmUgYWNjZXNzaW5nIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSB0aGF0IHdlcmUgdmFsaWQgKmJlZm9yZSogYSBuZXN0ZWQgVk0tRW50ZXIsIGJ1dCBhcmUgbm93IGdhcmJhZ2UgYmVjYXVzZSB0aGV5J3ZlIGJlZW4gdW5tYXBwZWQuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvIOKAkyB1c2UtYWZ0ZXItZnJlZSwgZWZmZWN0aXZlbHkuIE5vdCBpZGVhbCFcblxuTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMgdG8gY29uc2lkZXIgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gQnV0IGhvbGQgb24uLi4gdGhpcyBpcyBhbGwgYWJvdXQgc3RhbGUgKmFkZHJlc3NlcyosIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gYGt2bV9tYWtlX3JlcXVlc3RgIGp1c3Qgc2V0cyBhIGJpdCBpbiBgdmNwdS1cdTAwM2VyZXF1ZXN0c2AuIEl0J3Mgbm90IGNyZWF0aW5nIG5ldyBkYXRhLCBhbGxvY2F0aW5nIG1lbW9yeSwgb3IgbGVha2luZyBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlIGZpeCBpdHNlbGYgaXMgbWVyZWx5IHJlLWFybWluZyB0aGUgcmVxdWVzdCwgYW5kIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIHN0YWxlIHBvaW50ZXJzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEtBU0FOIGlzIGJ1aWx0IGZvci5cblxuU28sIEtNU0FOIGlzIGEgbm9uLXN0YXJ0ZXIgaGVyZS4gS0FTQU4sIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3b3VsZCBiZSB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGtpbmQgb2YgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIGJ1Zy4gV2hpbGUgS0FTQU4gbWlnaHQgbm90IGNhdGNoIHRoZSBoYXJkd2FyZSdzIGRpcmVjdCBhY2Nlc3MgdG8gc3RhbGUgSFBBcyAoZGVwZW5kaW5nIG9uIHRoZSBpbnN0cnVtZW50YXRpb24pLCBLTVNBTiBkZWZpbml0ZWx5IHdvbid0LCBzaW5jZSBpdCB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCBwbGFpbiBhbmQgc2ltcGxlLCBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6NDkuMjE5OTUyNjgxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2hlcmUgYSBmYWlsdXJlIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgY291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSBtYXBwZWQgaW4gdm1jczAyLiBJZiB1c2Vyc3BhY2UgcmVzdW1lZCB0aGUgdkNQVSwgaGFyZHdhcmUgY291bGQgYWNjZXNzIHRoZXNlIHN0YWxlIEhQQXMsIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUtbGlrZSBiZWhhdmlvci4gVGhlIGZpeCByZS1hcm1zIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0IHRvIGVuc3VyZSBLVk0gcmV0cmllcyB0aGUgbWFwcGluZy5cXG5cXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2hlcmUgYSBmYWlsdXJlIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgY291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSBtYXBwZWQgaW4gdm1jczAyLiBJZiB1c2Vyc3BhY2UgcmVzdW1lZCB0aGUgdkNQVSwgaGFyZHdhcmUgY291bGQgYWNjZXNzIHRoZXNlIHN0YWxlIEhQQXMsIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUtbGlrZSBiZWhhdmlvci4gVGhlIGZpeCByZS1hcm1zIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0IHRvIGVuc3VyZSBLVk0gcmV0cmllcyB0aGUgbWFwcGluZy5cXG5cXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 04:54:18 +0000 UTC FinishedAt: 2026-08-13 05:44:50 +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": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "952ff59d-4a61-444b-85f2-85b2070993a3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "nested_vmx_enter_non_root_mode", "nested_vmx_check_restored_vmcs12", "vmx_handle_exit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aGVyZSBhIGZhaWx1cmUgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBjb3VsZCBsZWF2ZSB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggc3RhbGUgaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMgKEhQQXMpIG1hcHBlZCBpbiB2bWNzMDIuIElmIHVzZXJzcGFjZSByZXN1bWVkIHRoZSB2Q1BVLCBoYXJkd2FyZSBjb3VsZCBhY2Nlc3MgdGhlc2Ugc3RhbGUgSFBBcywgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZS1saWtlIGJlaGF2aW9yLiBUaGUgZml4IHJlLWFybXMgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QgdG8gZW5zdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nLlxuXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNJiMzOTtzIG5lc3RlZCBWTVggaW1wbGVtZW50YXRpb24gd2hlcmUgYSBmYWlsdXJlIHRvIG1hcCBWTUNTMTIgcGFnZXMgd291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ORVNURURfU1RBVEUgb3IgVk0tRW50ZXIpLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4OTM2ZWUzZDdhMGZiOWY4MmE3ZGU2ZGJmMmViZDI5ZGNkOWMxNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0Mjo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggZGRmNmRmN2JlZTkzYi4uOWU5YmQ2YzU0MWJhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC0zNDUzLDcgJiM0MzszNDUzLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBzdGF0ZSB3aGljaCBjYW4gbGVhZCB0byBhIGxvYWQgb2Ygd3JvbmcgUERQVFJzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKENDKCFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guY3IzKSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4gXHR9XG4gXG4gXG5AQCAtMzQ2OSw3ICYjNDM7MzQ2OSw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VpbnRlcm5hbC5zdWJlcnJvciA9XG4gXHRcdFx0XHRLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OO1xuIFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWludGVybmFsLm5kYXRhID0gMDtcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTM1MjUsNiAmIzQzOzM1MjUsMjAgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRleGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZS1hcm0gdGhlIHJlcXVlc3Qgc28gdGhhdCBLVk0gcmV0cmllcyB0aGUgbWFwcGluZyBpbnN0ZWFkIG9mIHJ1bm5pbmdcbiYjNDM7XHQgKiBMMiB3aXRoIGEgc3RhbGUgdm1jczAyLiAgQmFpbGluZyBoZXJlIGxlYXZlcyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlXG4mIzQzO1x0ICogd2l0aCB2bWNzMDIgbG9hZGVkIGFuZCBpdHMgQVBJQy1hY2Nlc3MsIHZpcnR1YWwtQVBJQyBhbmQgcG9zdGVkXG4mIzQzO1x0ICogaW50ZXJydXB0IGRlc2NyaXB0b3IgYWRkcmVzc2VzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBob3N0IHBhZ2VzIHRoYXRcbiYjNDM7XHQgKiB3ZXJlIG1hcHBlZCBmb3IgdGhlICpwcmV2aW91cyogbmVzdGVkIFZNLUVudGVyLCB3aGljaCBoYXZlIHNpbmNlIGJlZW5cbiYjNDM7XHQgKiB1bm1hcHBlZCBhbmQgdW5waW5uZWQgYnkgbmVzdGVkX3B1dF92bWNzMTJfcGFnZXMoKS4gIEtWTSByZXR1cm5zIHRvXG4mIzQzO1x0ICogdXNlcnNwYWNlIHdpdGhvdXQgbGVhdmluZyBndWVzdCBtb2RlLCBzbyBpZiB1c2Vyc3BhY2UgcmVzdW1lcyB0aGVcbiYjNDM7XHQgKiB2Q1BVLCBWTS1FbnRlciBzdWNjZWVkcyBhbmQgaGFyZHdhcmUgYWNjZXNzZXMgdGhvc2Ugc3RhbGUgSFBBcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ODkzNmVlM2Q3YTBmYjlmODJhN2RlNmRiZjJlYmQyOWRjZDljMTY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDU6NDI6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCBkZGY2ZGY3YmVlOTNiLi45ZTliZDZjNTQxYmFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTM0NTMsNyAmIzQzOzM0NTMsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCSAqIHN0YXRlIHdoaWNoIGNhbiBsZWFkIHRvIGEgbG9hZCBvZiB3cm9uZyBQRFBUUnMuCiAJCSAqLwogCQlpZiAoQ0MoIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtJmd0O2FyY2guY3IzKSkpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBmYWlsOwogCX0KIAogCkBAIC0zNDY5LDcgJiM0MzszNDY5LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJdmNwdS0mZ3Q7cnVuLSZndDtpbnRlcm5hbC5zdWJlcnJvciA9CiAJCQkJS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTjsKIAkJCXZjcHUtJmd0O3J1bi0mZ3Q7aW50ZXJuYWwubmRhdGEgPSAwOwotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gZmFpbDsKIAkJfQogCX0KIApAQCAtMzUyNSw2ICYjNDM7MzUyNSwyMCBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCWV4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTsKIAogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CS8qCiYjNDM7CSAqIFJlLWFybSB0aGUgcmVxdWVzdCBzbyB0aGF0IEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIGluc3RlYWQgb2YgcnVubmluZwomIzQzOwkgKiBMMiB3aXRoIGEgc3RhbGUgdm1jczAyLiAgQmFpbGluZyBoZXJlIGxlYXZlcyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlCiYjNDM7CSAqIHdpdGggdm1jczAyIGxvYWRlZCBhbmQgaXRzIEFQSUMtYWNjZXNzLCB2aXJ0dWFsLUFQSUMgYW5kIHBvc3RlZAomIzQzOwkgKiBpbnRlcnJ1cHQgZGVzY3JpcHRvciBhZGRyZXNzZXMgc3RpbGwgcG9pbnRpbmcgYXQgdGhlIGhvc3QgcGFnZXMgdGhhdAomIzQzOwkgKiB3ZXJlIG1hcHBlZCBmb3IgdGhlICpwcmV2aW91cyogbmVzdGVkIFZNLUVudGVyLCB3aGljaCBoYXZlIHNpbmNlIGJlZW4KJiM0MzsJICogdW5tYXBwZWQgYW5kIHVucGlubmVkIGJ5IG5lc3RlZF9wdXRfdm1jczEyX3BhZ2VzKCkuICBLVk0gcmV0dXJucyB0bwomIzQzOwkgKiB1c2Vyc3BhY2Ugd2l0aG91dCBsZWF2aW5nIGd1ZXN0IG1vZGUsIHNvIGlmIHVzZXJzcGFjZSByZXN1bWVzIHRoZQomIzQzOwkgKiB2Q1BVLCBWTS1FbnRlciBzdWNjZWVkcyBhbmQgaGFyZHdhcmUgYWNjZXNzZXMgdGhvc2Ugc3RhbGUgSFBBcy4KJiM0MzsJICovCiYjNDM7CWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtWTSBWTVggVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AuICBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIFRoZSBjb2RlIG5vdyBoYW5kbGVzIGEgZmFpbHVyZSBieSBqdW1waW5nIHRvIGBmYWlsYCwgcmUtYXJtaW5nIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0LCBhbmQgdGhlbiByZXR1cm5pbmcgYGZhbHNlYC4gVGhlIGNoYW5nZSBoYXMgdG8gZG8gd2l0aCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3JzIHdoZW4gcmV0cmlldmluZyBuZXN0ZWQgVk1DUzEyIHBhZ2VzLiBUaGUgZmFjdCB0aGF0IGl0IHJlLWFybXMgdGhlIHJlcXVlc3QgYWZ0ZXIgZmFpbHVyZSBhbmQgcmV0dXJucyBgZmFsc2VgIGlzIHRoZSBrZXkgdGhpbmcgSSYjMzk7bSBmb2N1c2VkIG9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbiBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgLiBUaGUgY29udGV4dCBpcyBLVk0mIzM5O3MgeDg2IG5lc3RlZCBWTVggY29kZSwgc28gZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZXMgbmV3IGlzc3Vlcy4gVGhlIHJlLWFybWluZyBvZiB0aGUgcmVxdWVzdCBhZnRlciB0aGUgZmFpbHVyZSBzZWVtcyBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaW4gdGhlIGV2ZW50IG9mIHRoaXMgJiMzNDtmYWlsJiMzNDsgY29uZGl0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgc2hvdWxkIGRvIHRoZSB0cmljay4gTm93IEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqS1ZNIE1vZHVsZSBEZXBlbmRlbmN5IFJldmlldyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgS1ZNIHN0dWZmIGFnYWluLiBJIGtub3cgYEtWTV9JTlRFTGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTttIGFmdGVyLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEJ1dCB3YWl0LCBgS1ZNYCBpdHNlbGYgaXMgYWxzbyBlc3NlbnRpYWwsIHJpZ2h0PyBJIGNhbiYjMzk7dCBqdXN0IGVuYWJsZSBgS1ZNX0lOVEVMYCBpbiBpc29sYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5kYW1lbnRhbCBgS1ZNYCBzdXBwb3J0IGluIHBsYWNlIGZpcnN0LgoKVGltZSB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgZm9yIGBLVk1fSU5URUxgLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZC4gTm8gcG9pbnQgaW4gYXNzdW1pbmc7IGJldHRlciB0byB2ZXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgZGlyZWN0bHkgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IEtWTSYjMzk7cyB4ODYgY29uZmlndXJhdGlvbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIGl0LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gd2lsbCBiZSBhcm91bmQgbGluZSA5NiBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0IHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcyBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0ISBJ4oCZbSBob3BpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3MQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGludm9sdmVzIGBLVk1gIGFuZCBzcGVjaWZpY2FsbHkgYEtWTV9JTlRFTGAsIHdoaWNoIGlzIGltcG9ydGFudCBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcywgYW5kIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4KCkxldCBtZSBjb25maXJtLCBpcyBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIHN0YXRpYz8gQWgsIHllcywgaXQgaXMuIFdhaXQgYSBzZWNvbmQsIHRoZSBkaWZmIGNvbmZpcm1zIHRoYXQgaXTigJlzIGBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGZpZ3VyZSBvdXQgaG93IGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGZpbmQgYWxsIG9mIGl0cyBjYWxsZXJzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX2dldF92bWNzMTJfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9OTEyPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljdl9jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy05MzgtXHQgKiB0aGUgZGVzY3JpcHRvciBhZGRyZXNzIGhhcyBiZWVuIGFscmVhZHkgY2hlY2tlZFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo5Mzk6XHQgKiBpbiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcy5cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTQwLVx0ICpcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MzE9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQ4MS1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0ODI6XHQgKiBUaGlzIGJpdCB3aWxsIGJlIGNvbXB1dGVkIGluIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzLCBiZWNhdXNlXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0ODMtXHQgKiB3ZSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTDEmIzM5O3MgTVNSIGJpdG1hcCB5ZXQuICBGb3Igbm93LCBrZWVwXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNDEzPXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDQxLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNDQyOnN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQ0My17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNTQ0PXN0YXRpYyBib29sIHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NjQtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM1NjU6XHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgIW5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHZjcHUpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTY2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjQzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY5NS1cdGlmIChmcm9tX3ZtZW50cnkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzY5NjpcdFx0aWYgKHVubGlrZWx5KCFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY5Ny1cdFx0XHR2bXhfc3dpdGNoX3ZtY3ModmNwdSwgXHUwMDI2dm14LVx1MDAzZXZtY3MwMSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzMwLVx0XHQgKiBuZWVkIHRvIHBlcmZvcm0gZ3BhIHRvIGhwYSB0cmFuc2xhdGlvbikuIFJlcXVlc3QgYSBjYWxsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3MzE6XHRcdCAqIHRvIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzIGJlZm9yZSB0aGUgbmV4dCBWTS1lbnRyeS4gIFRoZSBNU1JzXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3MzItXHRcdCAqIGhhdmUgYWxyZWFkeSBiZWVuIHNldCBhdCB2bWVudHJ5IHRpbWUgYW5kIHNob3VsZCBub3QgYmUgcmVzZXQuXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzAxNC1cdFx0ICogcmVzdG9yZWQgeWV0LiBFVk1DUyB3aWxsIGJlIG1hcHBlZCBmcm9tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwMTU6XHRcdCAqIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKCkuXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwMTYtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzY5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZNWCBDb2RlKioKCk9rYXksIHNvIEkgc2VlIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgYW5kIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGFyZSBjYWxsaW5nIGVhY2ggb3RoZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBGaXJzdCwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCB0byBzZWUgaWYgaXQmIzM5O3Mgc3RhdGljLCBhbmQgeWVzLCBpdCBpcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHBvdGVudGlhbCBpbmxpbmluZy4gTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIGl0cyBsb2dpYyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2MzA9c3RhdGljIHZvaWQgbG9hZF92bWNzMTJfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjQyLSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjQzOmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjQ0LVx0XHRcdFx0XHRcdFx0Ym9vbCBmcm9tX3ZtZW50cnkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzk4PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzctXHR2bXgtXHUwMDNlbmVzdGVkLmhhc19wcmVlbXB0aW9uX3RpbWVyX2RlYWRsaW5lID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4Nzg6XHRzdGF0dXMgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzktXHRpZiAodW5saWtlbHkoc3RhdHVzICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODUtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODg2Olx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoKSBhcyBpdCB3aWxsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODctXHQgKiBhbHNvIGJlIHVzZWQgYXMgcGFydCBvZiByZXN0b3JpbmcgblZNWCBzdGF0ZSBmb3Jcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTI9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc5LVx0dm14LVx1MDAzZW5lc3RlZC5mb3JjZV9tc3JfYml0bWFwX3JlY2FsYyA9IHRydWU7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwODA6XHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDgxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBOb24tU3RhdGljIEZ1bmN0aW9ucyBpbiBOZXN0ZWQgVk1YKioKCk9rYXksIHNvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgLi4uIEkgdGhvdWdodCBpdCBtaWdodCBiZSBzdGF0aWMsIGJ1dCB0aGUgZ3JlcCByZXN1bHRzIHNheSBvdGhlcndpc2UuIFRoYXQmIzM5O3MgdW51c3VhbC4gSXQmIzM5O3MgdGltZSB0byBkaWcgZGVlcGVyLiBJZiB0aGF0IG9uZSBpc24mIzM5O3Qgc3RhdGljLCBtYXliZSB0aGVyZSYjMzk7cyBhIHBhdHRlcm4sIG9yIGEgbG9naWNhbCByZWFzb24gZm9yIHRoaXMuIExldCYjMzk7cyBzaGlmdCBvdXIgZm9jdXMgYW5kIGludmVzdGlnYXRlIGBuZXN0ZWRfdm14X3J1bmAgYW5kIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAuIFRoZXkmIzM5O3JlIGxpa2VseSByZWxhdGVkLCBhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzICpub3QqIHN0YXRpYywgYW5kIHRoZXNlIHJlbGF0ZWQgZnVuY3Rpb25zIHNob3VsZCBob3BlZnVsbHkgc2hlZCBzb21lIGxpZ2h0LiBUaGlzIGNvdWxkIGluZGljYXRlIGEgc3VidGxlIGRlc2lnbiBjaG9pY2UsIGFuZCBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBpbXBsaWNhdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHBvdGVudGlhbGx5IGluIGhvdyB0aGUgVk0gZXhpdHMgdGhlIFZNWCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjQzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5NC0vKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzk1OiAqIG5lc3RlZF92bXhfcnVuKCkgaGFuZGxlcyBhIG5lc3RlZCBlbnRyeSwgaS5lLiwgYSBWTUxBVU5DSCBvciBWTVJFU1VNRSBvbiBMMVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzk2LSAqIGZvciBydW5uaW5nIGFuIEwyIG5lc3RlZCBndWVzdC5cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5Ny0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc5ODpzdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3OTkte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0OD1zdGF0aWMgaW50IGhhbmRsZV92bWxhdW5jaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NDkte1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1NjUwOlx0cmV0dXJuIG5lc3RlZF92bXhfcnVuKHZjcHUsIHRydWUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjUxLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTQ9c3RhdGljIGludCBoYW5kbGVfdm1yZXN1bWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY1Ni1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY1NzpcdHJldHVybiBuZXN0ZWRfdm14X3J1bih2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBWTVggU3RhdGUgVHJhbnNpdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBoYW5kbGVfdm1sYXVuY2hgIGFuZCBgaGFuZGxlX3ZtcmVzdW1lYCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXkmIzM5O3JlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIG5vdCB1bnVzdWFsIGZvciBoYW5kbGVycyBsaWtlIHRoaXMsIGJ1dCBpdCYjMzk7cyBhIGdvb2QgcmVtaW5kZXIgb2YgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IHdpdGggdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gVGhlIGtleSBoZXJlIGlzIGxpa2VseSBnb2luZyB0byBiZSBob3cgdGhlIGhhcmR3YXJlIG1hbmFnZXMgdGhlIHN0YXRlIGFjcm9zcyB0aG9zZSBjYWxscy4gVGltZSB0byBjaGVjayBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODkwPWludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTExLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTEyOnN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTEzLVx0XHRcdFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDk3PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NTA0LVx0LmdldF9zdGF0ZSA9IHZteF9nZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTA1Olx0LnNldF9zdGF0ZSA9IHZteF9zZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NTA2LVx0LmdldF9uZXN0ZWRfc3RhdGVfcGFnZXMgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxOAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVzdGVkIFZNWCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IGB2bXhfbmVzdGVkX29wc2AgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaXRzIGRlcGVuZGVuY2Ugb24gYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cywgdGhlIGV4dGVybmFsIGludGVyZmFjZXMgZm9yIHRoaXMgbW9kdWxlLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AgdGhhdCBhY3QgYXMgdGhlc2UgZW50cnkgcG9pbnRzLgoKTGV0IG1lIHNlZS4uLiBBaCwgdGhlcmUmIzM5O3MgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNpbmNlIHRoYXQgd291bGQgbWFrZSBpdCBpbmFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoaXMgZmlsZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBleHBvc2VkIGZvciB1c2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgZW50cnkgcG9pbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYzMD1zdGF0aWMgdm9pZCBsb2FkX3ZtY3MxMl9ob3N0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDItICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM2NDM6ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDQtXHRcdFx0XHRcdFx0XHRib29sIGZyb21fdm1lbnRyeSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3OTg9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3Ny1cdHZteC1cdTAwM2VuZXN0ZWQuaGFzX3ByZWVtcHRpb25fdGltZXJfZGVhZGxpbmUgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg3ODpcdHN0YXR1cyA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCB0cnVlKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3OS1cdGlmICh1bmxpa2VseShzdGF0dXMgIT0gTlZNWF9WTUVOVFJZX1NVQ0NFU1MpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4NS1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4ODY6XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpIGFzIGl0IHdpbGxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4Ny1cdCAqIGFsc28gYmUgdXNlZCBhcyBwYXJ0IG9mIHJlc3RvcmluZyBuVk1YIHN0YXRlIGZvclxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwNzktXHR2bXgtXHUwMDNlbmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA4MDpcdHJldCA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwODEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGZ1bmN0aW9uIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0Li4uIElmIGl0JiMzOTtzIG5vdCBzdGF0aWMsIHRoZSBiaWdnZXIgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBmdW5jdGlvbiBleHBvc2VkIGZvciB1c2Ugb3V0c2lkZSB0aGUgYG5lc3RlZC5jYCBmaWxlIGl0c2VsZj8gSXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXIgb3IgdXNlZCBieSBhbm90aGVyIG1vZHVsZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjMwPXN0YXRpYyB2b2lkIGxvYWRfdm1jczEyX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0Mi0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzY0MzplbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0NC1cdFx0XHRcdFx0XHRcdGJvb2wgZnJvbV92bWVudHJ5KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Mzc5OD1zdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODc3LVx0dm14LVx1MDAzZW5lc3RlZC5oYXNfcHJlZW1wdGlvbl90aW1lcl9kZWFkbGluZSA9IGZhbHNlO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODc4Olx0c3RhdHVzID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIHRydWUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODc5LVx0aWYgKHVubGlrZWx5KHN0YXR1cyAhPSBOVk1YX1ZNRU5UUllfU1VDQ0VTUykpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODg1LVx0LypcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg4NjpcdCAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2YgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKCkgYXMgaXQgd2lsbFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODg3LVx0ICogYWxzbyBiZSB1c2VkIGFzIHBhcnQgb2YgcmVzdG9yaW5nIG5WTVggc3RhdGUgZm9yXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA3OS1cdHZteC1cdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSB0cnVlO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3MDgwOlx0cmV0ID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA4MS1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0xMC0vKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDoxMTogKiBTdGF0dXMgcmV0dXJuZWQgYnkgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKCk6XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTEyLSAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MjY9dm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDoyNzplbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjgtXHRcdFx0XHRcdFx0ICAgICBib29sIGZyb21fdm1lbnRyeSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDIwPWludCB2bXhfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MzQtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg0MzU6XHRcdHJldCA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MzYtXHRcdGlmIChyZXQgIT0gTlZNWF9WTUVOVFJZX1NVQ0NFU1MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBjb2RlOgoKKipEZWVwIERpdmUgaW50byBWTVggTmVzdGluZyoqCgpPa2F5LCBzbyBJIHNlZSBhIGNydWNpYWwgZnVuY3Rpb24sIGB2bXhfbGVhdmVfc21tYCwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgc29tZXRoaW5nIGluIGB2bXguY2AuIE15IHNwaWRleS1zZW5zZSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmVzdGVkIFZNWCBvcGVyYXRpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIHN5bWJvbCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGFuYWx5c2lzIG9uIHRoYXQgZnVuY3Rpb24uCgpOb3csIGhvbGQgb24uIEkgYWxzbyBzZWUgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIHRoaXMga2luZCBvZiBzaXR1YXRpb24sIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgdm14X25lc3RlZF9vcHMuc2V0X3N0YXRlYC4gVGhhdCBgdm14X25lc3RlZF9vcHNgIHN0cnVjdHVyZSBpcyBwcm9iYWJseSB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nLCBzbyBJIG5lZWQgdG8gY2hlY2sgaXQgb3V0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQgdG8gbWFuYWdlIHRoZSBuZXN0ZWQgVk1YIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBjaGVjayBpdHMgZGVjbGFyYXRpb24sIGFuZCBob3cgdGhlIGBzZXRfc3RhdGVgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9uZXN0ZWRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODgwPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk3LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk4Olx0Lm5lc3RlZF9vcHMgPSBcdTAwMjZ2bXhfbmVzdGVkX29wcyxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5OS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzY9c3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0OTc6c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5OC1cdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfY3B1X2hhc19ub19od19lcnJjb2RlX2NjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzIxOmV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODk3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXN0ZWQgVk1YIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmVzdGVkIFZNWCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBzZWUgdGhhdCBgdm14X25lc3RlZF9vcHNgIGlzIHVzZWQgaW4gYG1haW4uY2AgdG8gaW5pdGlhbGl6ZSBgdnRfeDg2X29wcy5uZXN0ZWRfb3BzYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gdGhlIHN5bWJvbCB0YWJsZSBhbmQgd2hhdCYjMzk7cyBub3QuCgpMZXQmIzM5O3Mgc2VlLCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBleHBvcnRlZCBhbmQgd2hldGhlciBzeXprYWxsZXIgY2FuIHJlYWNoIGl0LiBJJiMzOTtsbCBjaGVjayBgbmVzdGVkX3ZteF9ydW5gLCB3aGljaCBpcyBhbHNvIHN0YXRpYzsgaXQgaXMgdW5saWtlbHkgdG8gYmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gYGhhbmRsZV92bWxhdW5jaGAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0LCB0b28uIFRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2A/IEFoYSEgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgaXMgKm5vbi1zdGF0aWMqIGFuZCBpdCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGNhbmRpZGF0ZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgbmVzdGVkX3ZteF9jaGVja19hcGljdl9jb250cm9sc2AgaXMgc3RhdGljLCBgcHJlcGFyZV92bWNzMDJfZWFybHlgIGlzIHN0YXRpYywgYG5lc3RlZF9nZXRfZXZtY3NfcGFnZWAgaXMgc3RhdGljLCBhbmQgYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBpcyBzdGF0aWMuIFRoZXkmIzM5O3JlIGFsbCBwcm9iYWJseSBpbnRlcm5hbCBoZWxwZXJzLgoKTm93LCBhYm91dCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIhIFRoYXQgbWVhbnMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIEJ1dCBpdCAqY291bGQqIHN0aWxsIGJlIGEgaGlkZGVuIHN5bWJvbCwgc28gc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gcmVhY2ggaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gQnV0LCBiYXNlZCBvbiB0aGUgcHJvbXB0LCBpdCBzb3VuZHMgbGlrZSBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGRlZmluaXRlbHkgYSBiZXR0ZXIgZm9jdXMgc2luY2UgaXQgaXMgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQuCgpJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCBmb3IgbW9yZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5lc3RlZCBWTVguIEkgbmVlZCB0byBrZWVwIHNlYXJjaGluZyBmb3IgYW55IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbmVzdGVkX3ZteF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4MT12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4OS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg5MDppbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIEludmVzdGlnYXRpb246IFZNWCBDb250ZXh0ICZhbXA7IFBvdGVudGlhbCBOZXN0aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFZNWCBoYW5kbGluZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGFueSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBvciBhbnl0aGluZyB0aGF0IHJlc2VtYmxlcyB0aGF0IHR5cGUgb2YgYXJjaGl0ZWN0dXJlLiBUaGUgaW1tZWRpYXRlIHNlYXJjaCBzdHJhdGVneSBpbnZvbHZlcyBsb29raW5nIGZvciBmdW5jdGlvbiBuYW1lcyBvciBjb2RlIGJsb2NrcyB0aGF0IG1pZ2h0IGNvbnRhaW4gYF52b2lkIG5lc3RlZF92bXhfYCwgb3Igc29tZXRoaW5nIGVxdWFsbHkgZGVzY3JpcHRpdmUuIEkmIzM5O20gZGVsaWJlcmF0ZWx5IHVzaW5nIGEgd2lsZGNhcmQgKGBeYCkgYXQgdGhlIGJlZ2lubmluZyB0byBncmFiIGFueXRoaW5nIHRoYXQgKnByZWNlZGVzKiB0aGUgcGhyYXNlIC0gaW4gZWZmZWN0IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB3cmFwcGVycyBvciBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGxvY2F0ZSBjb2RlIHNlZ21lbnRzIGludm9sdmVkIHdpdGggVk1YIG1hbmFnZW1lbnQsIGFuZCBpbiBwYXJ0aWN1bGFyLCBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbmRpY2F0aW9ucyBvZiBhICYjMzQ7bmVzdGVkJiMzNDsgZXhlY3V0aW9uIG1vZGVsLiBUaGlzIHJhcGlkIGNoZWNrIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgc2lnbmFsIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGluIHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfXSYjNDM7IG5lc3RlZF92bXhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMzNj1zdGF0aWMgdm9pZCBmcmVlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODQtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4NTp2b2lkIG5lc3RlZF92bXhfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY2Mj1zdGF0aWMgaW5saW5lXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjYzOnZvaWQgbmVzdGVkX3ZteF9zZXRfbXNyXyMjcncjI19pbnRlcmNlcHQoc3RydWN0IHZjcHVfdm14ICp2bXgsXHRcdFx0XFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjY0LVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMSxcdFx0XFxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTYxOTc9c3RhdGljIGludCBoYW5kbGVfdm1mdW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYyNTEtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYyNTI6Ym9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjI1My1cdFx0XHRcdCBpbnQgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY1NjY9c3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY3MDUtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY3MDY6Ym9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjcwNy17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODgxPXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg5LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODkwOmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4OTEte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwOTMtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwOTQ6dm9pZCBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA5NS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03MzUyPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfc2V0dXBfY3JfZml4ZWQoc3RydWN0IG5lc3RlZF92bXhfbXNycyAqbXNycylcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTczODEtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjczODI6dm9pZCBuZXN0ZWRfdm14X3NldHVwX2N0bHNfbXNycyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZiwgdTMyIGVwdF9jYXBzKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MzgzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0MTgtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0MTk6dm9pZCBuZXN0ZWRfdm14X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uKioKCk9rYXksIHNvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGxvb2tpbmcgc29saWQsIHRoYXQgc2VlbXMgdG8gYmUgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdoYXQgYWJvdXQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYD8gSXQmIzM5O3MgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyAqdGhlKiBlbnRyeSBwb2ludCBmb3IgdGhhdCBgS1ZNX1NFVF9ORVNURURfU1RBVEVgIGlvY3RsLiBJdCBmZWVscyBsaWtlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGllY2UgYmV0dGVyIGluIHJlbGF0aW9uIHRvIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBpbnRlZ3JhdGVzLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgYGt2bV94ODZfbmVzdGVkX29wc2AsIGl0IHNob3VsZCBoYXZlIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgb24gaG93IHRoZXNlIHBpZWNlcyBhcmUgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbGFwaWMuYz0zMjkzPWludCBrdm1fYXBpY19nZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTMzMDUtXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzozMzA2OmludCBrdm1fYXBpY19zZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMzMwNy17XG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmg9MTM2PWludCBrdm1fYXBpY19nZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKTtcbmFyY2gveDg2L2t2bS9sYXBpYy5oOjEzNzppbnQga3ZtX2FwaWNfc2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcyk7XG5hcmNoL3g4Ni9rdm0vbGFwaWMuaC0xMzgtaW50IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0yMTY1PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTcyLVx0LmdldF9zdGF0ZSA9IHN2bV9nZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTczOlx0LnNldF9zdGF0ZSA9IHN2bV9zZXRfbmVzdGVkX3N0YXRlLFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTc0LVx0Lmh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoID0gc3ZtX2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ5Nz1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNC1cdC5nZXRfc3RhdGUgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNTpcdC5zZXRfc3RhdGUgPSB2bXhfc2V0X25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNi1cdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUzMTA9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9zZXRfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MzE3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMTg6XHRyID0ga3ZtX2FwaWNfc2V0X3N0YXRlKHZjcHUsIHMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTktXHRpZiAocilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjE4OT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjEtXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY1NjI6XHRcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VzZXRfc3RhdGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2My1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU4NC1cdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU4NTpcdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgXHUwMDI2a3ZtX3N0YXRlKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NTg2LVx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSBpbnRvIFZNIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGNhbGwsIGFuZCBpdCB1bHRpbWF0ZWx5IGxhbmRzIGluIGBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtzZXRfc3RhdGVgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkga25vdyBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBJIGNhbiB1c2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFzIGEgcHJldHR5IGdvb2QgZm9jdXMgcG9pbnQsIGFsdGhvdWdoIGl0IGlzIGEgaG90LXBhdGggZ2VuZXJpYyBmdW5jdGlvbi4KCk5vdywgd2hlcmUgZG9lcyBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGxlYWQ/IFJpZ2h0LCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgYW5kIGBuZXN0ZWRfdm14X3J1bmAuIEludGVyZXN0aW5nLCBpcyBgbmVzdGVkX3ZteF9ydW5gIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBBbmQgaG93IGFib3V0IGBoYW5kbGVfdm1sYXVuY2hgPyBBbHNvIHN0YXRpYywgYXMgZXhwZWN0ZWQuCgpNeSBsaW5lIG9mIHRoaW5raW5nIG5vdyBpcyB0byB0cnkgYW5kIGlkZW50aWZ5ICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgVk0gZXhpdHMsIGFuZCBpZiBgdm14X2hhbmRsZV9leGl0YCBpcyBub24tc3RhdGljLCBpdCBzaG91bGQgYmUgcHJvbWlzaW5nLiBBbmQgaW5kZWVkLCBgdm14X2hhbmRsZV9leGl0YCBpcyBub3Qgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfaGFuZGxlX2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNTk9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY0LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTY1Olx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjYtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5My1cdC5jaGVja19pbnRlcmNlcHQgPSB2bXhfY2hlY2tfaW50ZXJjZXB0LFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk0Olx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTUtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDA5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ3NC1cdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU0NzU6XHQgKiBTZWUgdGhlIGNvbW1lbnRzIGluIHZteF9oYW5kbGVfZXhpdC5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ3Ni1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjI1OD1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjI2Mi1cdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MjYzOlx0ICogdm14X2hhbmRsZV9leGl0KCkuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNjQtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY0OTE9dm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjY5NS0gKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjY5NjpzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Njk3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTQtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTU6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1Ni17XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTc6XHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTgtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz03MTY4PXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxODMtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjcxODQ6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzE4NS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9Mjk9dm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMwOmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzE6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zMi1pbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5vbi1TdGF0aWMgRnVuY3Rpb25zIGFuZCBhIFBvdGVudGlhbCBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwYXR0ZXJuOiBgdm14X2hhbmRsZV9leGl0YCwgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAsIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAsIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YCwgYG5lc3RlZF92bXhfY2hlY2tfaW9fYml0bWFwc2AsIGBuZXN0ZWRfdm14X2ZyZWVfdmNwdWAsIGBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXBgLCBgbmVzdGVkX3ZteF9zZXR1cF9jdGxzX21zcnNgLCBhbmQgYG5lc3RlZF92bXhfaGFyZHdhcmVfdW5zZXR1cGAg4oCTIHRoZXkgYXJlIGFsbCBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBwYXJ0IG9mIGFuIEFQSSBvciBleHBvc2VkIGZvciBzb21lIG90aGVyIG1vZHVsZSB0byBsZXZlcmFnZS4KCk15IGZvY3VzIGlzIGRyYXduIHRvIHRoaXMgYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBmdW5jdGlvbiBiZWNhdXNlIEkgdW5kZXJzdGFuZCB0aGF0IGl0JiMzOTtzIHRoZSBzdXNwZWN0ZWQgY3VscHJpdC4gQW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGFuZCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gSSByZW1lbWJlciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHJlY2FsbCB0aGUgZmxvdyBmcm9tIGEgcGFnZSBmYXVsdC4gSXQgc2VlbXMgYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBsZWFkcyB0byBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIHRocm91Z2ggdGhlIGZvbGxvd2luZyBjaGFpbjogYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgLSZndDsgYGt2bV9tbXVfcGFnZV9mYXVsdGAgLSZndDsgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgLSZndDsgYGt2bV9tbXVfZ2V0X3BhZ2VgIGFuZCB0aGVu4oCmIG9oLCByaWdodCwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHZteF9uZXN0ZWRfb3BzLmdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgLiBFeGNlbGxlbnQsIG5vdyBJIHVuZGVyc3RhbmQgdGhlIHBhdGguCgpJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYGdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHdpZGVzcHJlYWQgdGhpcyBwcm9ibGVtIG1pZ2h0IGJlLiBUaGUgaXNzdWUgY291bGQgYmUgdmVyeSBsb2NhbGl6ZWQgb3IgaW1wYWN0IG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCByZWx5IG9uIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE5NTA9c3RhdGljIGludCBzdm1fc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTExLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTEyOnN0YXRpYyBib29sIHN2bV9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjExMy17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0yMTY1PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTcwLVx0LnRyaXBsZV9mYXVsdCA9IG5lc3RlZF9zdm1fdHJpcGxlX2ZhdWx0LFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTcxOlx0LmdldF9uZXN0ZWRfc3RhdGVfcGFnZXMgPSBzdm1fZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE3Mi1cdC5nZXRfc3RhdGUgPSBzdm1fZ2V0X25lc3RlZF9zdGF0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM0NDI9c3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzU0My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzU0NDpzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NDUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ5Nz1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNS1cdC5zZXRfc3RhdGUgPSB2bXhfc2V0X25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNjpcdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDctXHQud3JpdGVfbG9nX2RpcnR5ID0gbmVzdGVkX3ZteF93cml0ZV9wbWxfYnVmZmVyLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNC1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMTEzNTpcdFx0XHRpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNi1cdFx0XHRcdHIgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg5OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIEZpeCoqCgpPa2F5LCBzbyBgZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB2Y3B1X2VudGVyX2d1ZXN0YCB3aGVuIHdlIGhhdmUgYSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0LiBUaGUgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHJlLWFybXMgdGhhdCByZXF1ZXN0IHdpdGhpbiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGluIGNhc2Ugb2YgZmFpbHVyZS4gRXNzZW50aWFsbHksIGl0JiMzOTtzIG1ha2luZyBzdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHJ1bm5pbmcgTDIgd2l0aCBhIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdm1jczAyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgd2l0aG91dCB0aGlzLCB3ZSYjMzk7ZCBiYWlsIG91dCwgbGVhdmluZyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggYW4gb3V0ZGF0ZWQgYHZtY3MwMmAsIGFuZCBpdHMgYWRkcmVzc2VzIHBvaW50aW5nIHRvICpob3N0KiBwYWdlcyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQgYmVjYXVzZSBgbmVzdGVkX3B1dF92bWNzMTJfcGFnZXMoKWAgaGFzIHVubWFwcGVkIGFuZCB1bnBpbm5lZCB0aGVtLiBLVk0gd291bGQgcmV0dXJuIHRvIHVzZXJzcGFjZSwgYW5kIGlmIHRoYXQgdXNlcnNwYWNlIHRoaW5nIHJlc3VtZXMgdGhlIHZDUFUsIFZNLUVudGVyIHdvdWxkIHN1Y2NlZWQsIGJ1dCB3ZSYjMzk7ZCBoYXZlIGhhcmR3YXJlIGFjY2Vzc2luZyB0aG9zZSBzdGFsZSBIUEFzIOKAkyBhIGRlZmluaXRlIHJlY2lwZSBmb3IgZGlzYXN0ZXIuCgpUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4IHRoYXQgSSB0aGluayBpcyByaXBlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzLCBzcGVjaWZpY2FsbHkgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBpbiB0aGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LgoKTGV0JiMzOTtzIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcmVsZXZhbnQgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYz8KT2theSwgSSYjMzk7bGwgYWxzbyBhZGQgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBmdXp6aW5nIGZvY3VzIGxpc3QuCmBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAgYW5kIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YAoKU28gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGluIHRoZSBmdXp6aW5nOgotIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgCi0gYHZteF9oYW5kbGVfZXhpdGAKCk5vdywgYmVmb3JlIEkgZ2V0IGNhcnJpZWQgYXdheSwgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGJ1aWxkcy4gSSBrbm93IGl0JiMzOTtzIEtWTSBhbmQgS1ZNX0lOVEVMLCBidXQgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIGVsc2UuIENoZWNraW5nIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2Agbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMDUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIEZ1enppbmcgU3RyYXRlZ3kqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmb2N1cyBpcyBLVk0gZnV6emluZywgYW5kIEkga25vdyB0aGF0IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7S1ZNJiMzNDssICYjMzQ7S1ZNX0lOVEVMJiMzNDtdYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGZpbGUuIEkmIzM5O20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMgYW5kIGxpa2VseSB0byBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gT2theSwgSSBzZWUgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAsIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YCwgYW5kIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAuIEFmdGVyIHJldmlldywgSSYjMzk7dmUgZGVjaWRlZCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBhbmQgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYCBoYXZlIHRoZSBtb3N0IGZ1enppbmcgcG90ZW50aWFsLiBJIHdpbGwgYWxzbyBpbmNsdWRlIGB2bXhfaGFuZGxlX2V4aXRgIGluIG15IHRlc3Rpbmcgc3RyYXRlZ3kuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGRldGFpbHMgb2YgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYCB0byBlbnN1cmUgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY4ODE9dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4OTA6aW50IG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg5MS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA3My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA3NDpcdHJldCA9IG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI0PXZvaWQgbmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKHZvaWQpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDoyNTppbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjYtdm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODQyMD1pbnQgdm14X2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDMxLVx0XHQvKiBUcmlwbGUgZmF1bHQgaWYgdGhlIHN0YXRlIGlzIGludmFsaWQuICAqL1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDMyOlx0XHRpZiAobmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIodmNwdSkgXHUwMDNjIDApXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MzMtXHRcdFx0cmV0dXJuIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjA2CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWTVggTW9kdWxlIFN5bWJvbCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIHVzYWdlIG9mIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAsIGFuZCBjb25maXJtZWQgdGhhdCBpdCYjMzk7cyBpbmRlZWQgY2FsbGVkIHdpdGhpbiBgdm14X2xlYXZlX3NtbWAgYW5kIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAuIEV4Y2VsbGVudC4gVGhpcyBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3QuCgpHaXZlbiB0aGlzLCBJIG5lZWQgdG8ga2VlcCBhIGxhc2VyIGZvY3VzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHMgZm9yIGZ1cnRoZXIgYW5hbHlzaXM6CgoqICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAKKiAgIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAKKiAgIGB2bXhfaGFuZGxlX2V4aXRgCgpUaGF0IHNlZW1zIHRvIGJlIGEgc29saWQgbGlzdCBvZiBrZXkgZnVuY3Rpb25zIHRvIHNjcnV0aW5pemUuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcy4gTGV0JiMzOTtzIGdldCB0aGVzZSByZXN1bHRzIHNldCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTImIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aGVyZSBhIGZhaWx1cmUgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBjb3VsZCBsZWF2ZSB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggc3RhbGUgaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMgKEhQQXMpIG1hcHBlZCBpbiB2bWNzMDIuIElmIHVzZXJzcGFjZSByZXN1bWVkIHRoZSB2Q1BVLCBoYXJkd2FyZSBjb3VsZCBhY2Nlc3MgdGhlc2Ugc3RhbGUgSFBBcywgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZS1saWtlIGJlaGF2aW9yLiBUaGUgZml4IHJlLWFybXMgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QgdG8gZW5zdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nLlxuXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg5MzZlZTNkN2EwZmI5ZjgyYTdkZTZkYmYyZWJkMjlkY2Q5YzE2NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggZGRmNmRmN2JlZTkzYi4uOWU5YmQ2YzU0MWJhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC0zNDUzLDcgJiM0MzszNDUzLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkgKiBzdGF0ZSB3aGljaCBjYW4gbGVhZCB0byBhIGxvYWQgb2Ygd3JvbmcgUERQVFJzLgogCQkgKi8KIAkJaWYgKENDKCFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LSZndDthcmNoLmNyMykpKQotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gZmFpbDsKIAl9CiAKIApAQCAtMzQ2OSw3ICYjNDM7MzQ2OSw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCXZjcHUtJmd0O3J1bi0mZ3Q7aW50ZXJuYWwuc3ViZXJyb3IgPQogCQkJCUtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047CiAJCQl2Y3B1LSZndDtydW4tJmd0O2ludGVybmFsLm5kYXRhID0gMDsKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CiAKQEAgLTM1MjUsNiAmIzQzOzM1MjUsMjAgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlleGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7CiAKIAlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwkvKgomIzQzOwkgKiBSZS1hcm0gdGhlIHJlcXVlc3Qgc28gdGhhdCBLVk0gcmV0cmllcyB0aGUgbWFwcGluZyBpbnN0ZWFkIG9mIHJ1bm5pbmcKJiM0MzsJICogTDIgd2l0aCBhIHN0YWxlIHZtY3MwMi4gIEJhaWxpbmcgaGVyZSBsZWF2ZXMgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZQomIzQzOwkgKiB3aXRoIHZtY3MwMiBsb2FkZWQgYW5kIGl0cyBBUElDLWFjY2VzcywgdmlydHVhbC1BUElDIGFuZCBwb3N0ZWQKJiM0MzsJICogaW50ZXJydXB0IGRlc2NyaXB0b3IgYWRkcmVzc2VzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBob3N0IHBhZ2VzIHRoYXQKJiM0MzsJICogd2VyZSBtYXBwZWQgZm9yIHRoZSAqcHJldmlvdXMqIG5lc3RlZCBWTS1FbnRlciwgd2hpY2ggaGF2ZSBzaW5jZSBiZWVuCiYjNDM7CSAqIHVubWFwcGVkIGFuZCB1bnBpbm5lZCBieSBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpLiAgS1ZNIHJldHVybnMgdG8KJiM0MzsJICogdXNlcnNwYWNlIHdpdGhvdXQgbGVhdmluZyBndWVzdCBtb2RlLCBzbyBpZiB1c2Vyc3BhY2UgcmVzdW1lcyB0aGUKJiM0MzsJICogdkNQVSwgVk0tRW50ZXIgc3VjY2VlZHMgYW5kIGhhcmR3YXJlIGFjY2Vzc2VzIHRob3NlIHN0YWxlIEhQQXMuCiYjNDM7CSAqLwomIzQzOwlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMwoJCQkJCQkJb3V0cHV0OiAyMjAKCQkJCQkJCXRob3VnaHRzOiA3MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBCYXNpY2FsbHksIGluc3RlYWQgb2YganVzdCBiYWlsaW5nIG91dCB3aXRoIGBmYWxzZWAgd2hlbiBpdCBmYWlscywgaXQgbm93IHJlLWFybXMgYSByZXF1ZXN0IHRvIHJldHJ5IHRoZSBtYXBwaW5nLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHRvIHByZXZlbnQgTDIgZnJvbSBydW5uaW5nIHdpdGggYSBzdGFsZSBgdm1jczAyYC4gVGhlIGNvcmUgcHJvYmxlbT8gSGFyZHdhcmUgYWNjZXNzaW5nIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSB0aGF0IHdlcmUgdmFsaWQgKmJlZm9yZSogYSBuZXN0ZWQgVk0tRW50ZXIsIGJ1dCBhcmUgbm93IGdhcmJhZ2UgYmVjYXVzZSB0aGV5JiMzOTt2ZSBiZWVuIHVubWFwcGVkLiBUaGlzIGxlYWRzIHRvIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpbyDigJMgdXNlLWFmdGVyLWZyZWUsIGVmZmVjdGl2ZWx5LiBOb3QgaWRlYWwhCgpNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyB0byBjb25zaWRlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBCdXQgaG9sZCBvbi4uLiB0aGlzIGlzIGFsbCBhYm91dCBzdGFsZSAqYWRkcmVzc2VzKiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBga3ZtX21ha2VfcmVxdWVzdGAganVzdCBzZXRzIGEgYml0IGluIGB2Y3B1LSZndDtyZXF1ZXN0c2AuIEl0JiMzOTtzIG5vdCBjcmVhdGluZyBuZXcgZGF0YSwgYWxsb2NhdGluZyBtZW1vcnksIG9yIGxlYWtpbmcgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBmaXggaXRzZWxmIGlzIG1lcmVseSByZS1hcm1pbmcgdGhlIHJlcXVlc3QsIGFuZCB0aGUgdW5kZXJseWluZyBpc3N1ZSBpcyBzdGFsZSBwb2ludGVycywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBLQVNBTiBpcyBidWlsdCBmb3IuCgpTbywgS01TQU4gaXMgYSBub24tc3RhcnRlciBoZXJlLiBLQVNBTiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdvdWxkIGJlIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMga2luZCBvZiB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVnLiBXaGlsZSBLQVNBTiBtaWdodCBub3QgY2F0Y2ggdGhlIGhhcmR3YXJlJiMzOTtzIGRpcmVjdCBhY2Nlc3MgdG8gc3RhbGUgSFBBcyAoZGVwZW5kaW5nIG9uIHRoZSBpbnN0cnVtZW50YXRpb24pLCBLTVNBTiBkZWZpbml0ZWx5IHdvbiYjMzk7dCwgc2luY2UgaXQgdGFyZ2V0cyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgcGxhaW4gYW5kIHNpbXBsZSwgYW5kIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdoZXJlIGEgZmFpbHVyZSBpbiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGNvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcyAoSFBBcykgbWFwcGVkIGluIHZtY3MwMi4gSWYgdXNlcnNwYWNlIHJlc3VtZWQgdGhlIHZDUFUsIGhhcmR3YXJlIGNvdWxkIGFjY2VzcyB0aGVzZSBzdGFsZSBIUEFzLCBsZWFkaW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlLWxpa2UgYmVoYXZpb3IuIFRoZSBmaXggcmUtYXJtcyB0aGUgYEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFU2AgcmVxdWVzdCB0byBlbnN1cmUgS1ZNIHJldHJpZXMgdGhlIG1hcHBpbmcuXG5cblRoaXMgaXNzdWUgaXMgcmVsYXRlZCB0byBzdGFsZSBwb2ludGVycyBhbmQgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBtb3JlIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGFjY2VzcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aGVyZSBhIGZhaWx1cmUgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBjb3VsZCBsZWF2ZSB0aGUgdkNQVSBpbiBndWVzdCBtb2RlIHdpdGggc3RhbGUgaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMgKEhQQXMpIG1hcHBlZCBpbiB2bWNzMDIuIElmIHVzZXJzcGFjZSByZXN1bWVkIHRoZSB2Q1BVLCBoYXJkd2FyZSBjb3VsZCBhY2Nlc3MgdGhlc2Ugc3RhbGUgSFBBcywgbGVhZGluZyB0byBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZS1saWtlIGJlaGF2aW9yLiBUaGUgZml4IHJlLWFybXMgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QgdG8gZW5zdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nLlxuXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDI6NDQuMDYxOTA3Njc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTU4MDc1Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlXCIsXG4gICAgXCJuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMlwiLFxuICAgIFwidm14X2hhbmRsZV9leGl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2hlcmUgYSBmYWlsdXJlIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgY291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSBtYXBwZWQgaW4gdm1jczAyLiBJZiB1c2Vyc3BhY2UgcmVzdW1lZCB0aGUgdkNQVSwgaGFyZHdhcmUgY291bGQgYWNjZXNzIHRoZXNlIHN0YWxlIEhQQXMsIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUtbGlrZSBiZWhhdmlvci4gVGhlIGZpeCByZS1hcm1zIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0IHRvIGVuc3VyZSBLVk0gcmV0cmllcyB0aGUgbWFwcGluZy5cXG5cXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0ncyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQyOjQ0LjA2MTkxMzYyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTA5NTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4OTM2ZWUzZDdhMGZiOWY4MmE3ZGU2ZGJmMmViZDI5ZGNkOWMxNjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDU6NDI6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5pbmRleCBkZGY2ZGY3YmVlOTNiLi45ZTliZDZjNTQxYmFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuQEAgLTM0NTMsNyArMzQ1Myw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0ICogc3RhdGUgd2hpY2ggY2FuIGxlYWQgdG8gYSBsb2FkIG9mIHdyb25nIFBEUFRScy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChDQyghbG9hZF9wZHB0cnModmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5jcjMpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdH1cXG4gXFxuIFxcbkBAIC0zNDY5LDcgKzM0NjksNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlaW50ZXJuYWwuc3ViZXJyb3IgPVxcbiBcXHRcXHRcXHRcXHRLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OO1xcbiBcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWludGVybmFsLm5kYXRhID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMzUyNSw2ICszNTI1LDIwIEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0ZXhlY19jb250cm9sc19jbGVhcmJpdCh2bXgsIENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuK1xcbitmYWlsOlxcbitcXHQvKlxcbitcXHQgKiBSZS1hcm0gdGhlIHJlcXVlc3Qgc28gdGhhdCBLVk0gcmV0cmllcyB0aGUgbWFwcGluZyBpbnN0ZWFkIG9mIHJ1bm5pbmdcXG4rXFx0ICogTDIgd2l0aCBhIHN0YWxlIHZtY3MwMi4gIEJhaWxpbmcgaGVyZSBsZWF2ZXMgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZVxcbitcXHQgKiB3aXRoIHZtY3MwMiBsb2FkZWQgYW5kIGl0cyBBUElDLWFjY2VzcywgdmlydHVhbC1BUElDIGFuZCBwb3N0ZWRcXG4rXFx0ICogaW50ZXJydXB0IGRlc2NyaXB0b3IgYWRkcmVzc2VzIHN0aWxsIHBvaW50aW5nIGF0IHRoZSBob3N0IHBhZ2VzIHRoYXRcXG4rXFx0ICogd2VyZSBtYXBwZWQgZm9yIHRoZSAqcHJldmlvdXMqIG5lc3RlZCBWTS1FbnRlciwgd2hpY2ggaGF2ZSBzaW5jZSBiZWVuXFxuK1xcdCAqIHVubWFwcGVkIGFuZCB1bnBpbm5lZCBieSBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpLiAgS1ZNIHJldHVybnMgdG9cXG4rXFx0ICogdXNlcnNwYWNlIHdpdGhvdXQgbGVhdmluZyBndWVzdCBtb2RlLCBzbyBpZiB1c2Vyc3BhY2UgcmVzdW1lcyB0aGVcXG4rXFx0ICogdkNQVSwgVk0tRW50ZXIgc3VjY2VlZHMgYW5kIGhhcmR3YXJlIGFjY2Vzc2VzIHRob3NlIHN0YWxlIEhQQXMuXFxuK1xcdCAqL1xcbitcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mjo0NS4zNTE3MDg1OTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTE3MDI4Nzc3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVcIixcbiAgICBcIm5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyXCIsXG4gICAgXCJ2bXhfaGFuZGxlX2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0ncyBuZXN0ZWQgVk1YIGltcGxlbWVudGF0aW9uIHdoZXJlIGEgZmFpbHVyZSB0byBtYXAgVk1DUzEyIHBhZ2VzIHdvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfTkVTVEVEX1NUQVRFIG9yIFZNLUVudGVyKS4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4OTM2ZWUzZDdhMGZiOWY4MmE3ZGU2ZGJmMmViZDI5ZGNkOWMxNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0Mjo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCBkZGY2ZGY3YmVlOTNiLi45ZTliZDZjNTQxYmFhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTM0NTMsNyArMzQ1Myw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0ICogc3RhdGUgd2hpY2ggY2FuIGxlYWQgdG8gYSBsb2FkIG9mIHdyb25nIFBEUFRScy5cbiBcdFx0ICovXG4gXHRcdGlmIChDQyghbG9hZF9wZHB0cnModmNwdSwgdmNwdS1cdTAwM2VhcmNoLmNyMykpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRnb3RvIGZhaWw7XG4gXHR9XG4gXG4gXG5AQCAtMzQ2OSw3ICszNDY5LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWludGVybmFsLnN1YmVycm9yID1cbiBcdFx0XHRcdEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047XG4gXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlaW50ZXJuYWwubmRhdGEgPSAwO1xuLVx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNTI1LDYgKzM1MjUsMjAgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRleGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbitcbitmYWlsOlxuK1x0LypcbitcdCAqIFJlLWFybSB0aGUgcmVxdWVzdCBzbyB0aGF0IEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIGluc3RlYWQgb2YgcnVubmluZ1xuK1x0ICogTDIgd2l0aCBhIHN0YWxlIHZtY3MwMi4gIEJhaWxpbmcgaGVyZSBsZWF2ZXMgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZVxuK1x0ICogd2l0aCB2bWNzMDIgbG9hZGVkIGFuZCBpdHMgQVBJQy1hY2Nlc3MsIHZpcnR1YWwtQVBJQyBhbmQgcG9zdGVkXG4rXHQgKiBpbnRlcnJ1cHQgZGVzY3JpcHRvciBhZGRyZXNzZXMgc3RpbGwgcG9pbnRpbmcgYXQgdGhlIGhvc3QgcGFnZXMgdGhhdFxuK1x0ICogd2VyZSBtYXBwZWQgZm9yIHRoZSAqcHJldmlvdXMqIG5lc3RlZCBWTS1FbnRlciwgd2hpY2ggaGF2ZSBzaW5jZSBiZWVuXG4rXHQgKiB1bm1hcHBlZCBhbmQgdW5waW5uZWQgYnkgbmVzdGVkX3B1dF92bWNzMTJfcGFnZXMoKS4gIEtWTSByZXR1cm5zIHRvXG4rXHQgKiB1c2Vyc3BhY2Ugd2l0aG91dCBsZWF2aW5nIGd1ZXN0IG1vZGUsIHNvIGlmIHVzZXJzcGFjZSByZXN1bWVzIHRoZVxuK1x0ICogdkNQVSwgVk0tRW50ZXIgc3VjY2VlZHMgYW5kIGhhcmR3YXJlIGFjY2Vzc2VzIHRob3NlIHN0YWxlIEhQQXMuXG4rXHQgKi9cbitcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDI6NDUuMzUxNzEwMjgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYxNTY3NTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIFZNWCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBidWcgaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYC4gVGhlIGNvZGUgbm93IGhhbmRsZXMgYSBmYWlsdXJlIGJ5IGp1bXBpbmcgdG8gYGZhaWxgLCByZS1hcm1pbmcgdGhlIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIHJlcXVlc3QsIGFuZCB0aGVuIHJldHVybmluZyBgZmFsc2VgLiBUaGUgY2hhbmdlIGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMgd2hlbiByZXRyaWV2aW5nIG5lc3RlZCBWTUNTMTIgcGFnZXMuIFRoZSBmYWN0IHRoYXQgaXQgcmUtYXJtcyB0aGUgcmVxdWVzdCBhZnRlciBmYWlsdXJlIGFuZCByZXR1cm5zIGBmYWxzZWAgaXMgdGhlIGtleSB0aGluZyBJJ20gZm9jdXNlZCBvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbiBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgLiBUaGUgY29udGV4dCBpcyBLVk0ncyB4ODYgbmVzdGVkIFZNWCBjb2RlLCBzbyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlcyBuZXcgaXNzdWVzLiBUaGUgcmUtYXJtaW5nIG9mIHRoZSByZXF1ZXN0IGFmdGVyIHRoZSBmYWlsdXJlIHNlZW1zIGxpa2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGluIHRoZSBldmVudCBvZiB0aGlzIFwiZmFpbFwiIGNvbmRpdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgc2hvdWxkIGRvIHRoZSB0cmljay4gTm93IEknbGwgaGVhZCBvdmVyIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mjo1My45NjczODg5NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQyOjU0LjAxMzU2MjE2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NzkxNDU0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktWTSBNb2R1bGUgRGVwZW5kZW5jeSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gc3R1ZmYgYWdhaW4uIEkga25vdyBgS1ZNX0lOVEVMYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBhZnRlciwgdGhhdCdzIGEgZ2l2ZW4uIEJ1dCB3YWl0LCBgS1ZNYCBpdHNlbGYgaXMgYWxzbyBlc3NlbnRpYWwsIHJpZ2h0PyBJIGNhbid0IGp1c3QgZW5hYmxlIGBLVk1fSU5URUxgIGluIGlzb2xhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bmRhbWVudGFsIGBLVk1gIHN1cHBvcnQgaW4gcGxhY2UgZmlyc3QuXG5cblRpbWUgdG8gZHJpbGwgZG93bi4gTGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgZm9yIGBLVk1fSU5URUxgLiBJJ2xsIGhlYWQgb3ZlciB0byBgYXJjaC94ODYva3ZtL0tjb25maWdgIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZC4gTm8gcG9pbnQgaW4gYXNzdW1pbmc7IGJldHRlciB0byB2ZXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgZGlyZWN0bHkgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDI6NTkuNTkyNzExMDM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Nzk2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mjo1OS42NDE1MTM3NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY5NTY0MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBLVk0ncyB4ODYgY29uZmlndXJhdGlvbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIGl0LCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIHdpbGwgYmUgYXJvdW5kIGxpbmUgOTYgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgaW4gdGhpcyBhcmVhLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc2VlIHdoYXQncyB3aGF0ISBJ4oCZbSBob3BpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MDIuNjExMDgwNDEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxcbiAgOTE6XFx0XFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcXFwicmVhbFxcXCIgVk0gd29ya2xvYWQgYXMgYVxcbiAgOTI6XFx0XFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBLVk1fSU5URUxcXG4gIDk3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgSUEzMl9GRUFUX0NUTFxcbiAgOTk6XFx0XFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbiAxMDA6XFx0XFx0aGVscFxcbiAxMDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJ3MgVlRcXG4gMTAyOlxcdFxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxMDU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4gMTA4OlxcdCAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuIDEwOTpcXHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzowMi42MTExNTMxMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY0MDExMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpbnZvbHZlcyBgS1ZNYCBhbmQgc3BlY2lmaWNhbGx5IGBLVk1fSU5URUxgLCB3aGljaCBpcyBpbXBvcnRhbnQgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNoYW5nZXMsIGFuZCB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIG1vZGlmaWVkIGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AuIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi5cblxuTGV0IG1lIGNvbmZpcm0sIGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2Agc3RhdGljPyBBaCwgeWVzLCBpdCBpcy4gV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgY29uZmlybXMgdGhhdCBpdOKAmXMgYHN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIFRvIGRvIHRoYXQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBmaWd1cmUgb3V0IGhvdyBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEkgbmVlZCB0byBmaW5kIGFsbCBvZiBpdHMgY2FsbGVycyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzowNy4wNzUxNjY4NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz05MTI9c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2FwaWN2X2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTM4LVxcdCAqIHRoZSBkZXNjcmlwdG9yIGFkZHJlc3MgaGFzIGJlZW4gYWxyZWFkeSBjaGVja2VkXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo5Mzk6XFx0ICogaW4gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMuXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy05NDAtXFx0ICpcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjQzMT1zdGF0aWMgdm9pZCBwcmVwYXJlX3ZtY3MwMl9lYXJseShzdHJ1Y3QgdmNwdV92bXggKnZteCwgc3RydWN0IGxvYWRlZF92bWNzICp2bWNzMDEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0ODEtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0ODI6XFx0ICogVGhpcyBiaXQgd2lsbCBiZSBjb21wdXRlZCBpbiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcywgYmVjYXVzZVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQ4My1cXHQgKiB3ZSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTDEncyBNU1IgYml0bWFwIHlldC4gIEZvciBub3csIGtlZXBcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQxMz1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X2V2bWNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDQxLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzQ0MjpzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzU0ND1zdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NjQtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTY1OlxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NjYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjQzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjk1LVxcdGlmIChmcm9tX3ZtZW50cnkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM2OTY6XFx0XFx0aWYgKHVubGlrZWx5KCFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2OTctXFx0XFx0XFx0dm14X3N3aXRjaF92bWNzKHZjcHUsIFxcdTAwMjZ2bXgtXFx1MDAzZXZtY3MwMSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3MzAtXFx0XFx0ICogbmVlZCB0byBwZXJmb3JtIGdwYSB0byBocGEgdHJhbnNsYXRpb24pLiBSZXF1ZXN0IGEgY2FsbFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzczMTpcXHRcXHQgKiB0byBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyBiZWZvcmUgdGhlIG5leHQgVk0tZW50cnkuICBUaGUgTVNSc1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzczMi1cXHRcXHQgKiBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXQgdm1lbnRyeSB0aW1lIGFuZCBzaG91bGQgbm90IGJlIHJlc2V0Llxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDE0LVxcdFxcdCAqIHJlc3RvcmVkIHlldC4gRVZNQ1Mgd2lsbCBiZSBtYXBwZWQgZnJvbVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzAxNTpcXHRcXHQgKiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcygpLlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzAxNi1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MDcuMTIwNDkxODEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDMwNDE3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTVggQ29kZSoqXG5cbk9rYXksIHNvIEkgc2VlIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgYW5kIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGFyZSBjYWxsaW5nIGVhY2ggb3RoZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBGaXJzdCwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIHRvIHNlZSBpZiBpdCdzIHN0YXRpYywgYW5kIHllcywgaXQgaXMuIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHBvdGVudGlhbCBpbmxpbmluZy4gTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgaXRzZWxmLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTAuMjYzNTM2Mzk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI2MzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2MzA9c3RhdGljIHZvaWQgbG9hZF92bWNzMTJfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjQzOmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRib29sIGZyb21fdm1lbnRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Mzc5OD1zdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzctXFx0dm14LVxcdTAwM2VuZXN0ZWQuaGFzX3ByZWVtcHRpb25fdGltZXJfZGVhZGxpbmUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4Nzg6XFx0c3RhdHVzID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIHRydWUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3OS1cXHRpZiAodW5saWtlbHkoc3RhdHVzICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4NS1cXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg4NjpcXHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpIGFzIGl0IHdpbGxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODctXFx0ICogYWxzbyBiZSB1c2VkIGFzIHBhcnQgb2YgcmVzdG9yaW5nIG5WTVggc3RhdGUgZm9yXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTI9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwNzktXFx0dm14LVxcdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSB0cnVlO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA4MDpcXHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA4MS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoxMC4zNDI4MDk0NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NjQyOTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMgRnVuY3Rpb25zIGluIE5lc3RlZCBWTVgqKlxuXG5Pa2F5LCBzbyBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4uLiBJIHRob3VnaHQgaXQgbWlnaHQgYmUgc3RhdGljLCBidXQgdGhlIGdyZXAgcmVzdWx0cyBzYXkgb3RoZXJ3aXNlLiBUaGF0J3MgdW51c3VhbC4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIuIElmIHRoYXQgb25lIGlzbid0IHN0YXRpYywgbWF5YmUgdGhlcmUncyBhIHBhdHRlcm4sIG9yIGEgbG9naWNhbCByZWFzb24gZm9yIHRoaXMuIExldCdzIHNoaWZ0IG91ciBmb2N1cyBhbmQgaW52ZXN0aWdhdGUgYG5lc3RlZF92bXhfcnVuYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gVGhleSdyZSBsaWtlbHkgcmVsYXRlZCwgYW5kIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBwcm9iYWJseSBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyAqbm90KiBzdGF0aWMsIGFuZCB0aGVzZSByZWxhdGVkIGZ1bmN0aW9ucyBzaG91bGQgaG9wZWZ1bGx5IHNoZWQgc29tZSBsaWdodC4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHN1YnRsZSBkZXNpZ24gY2hvaWNlLCBhbmQgSSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciB0aGUgaW1wbGljYXRpb25zIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHBvdGVudGlhbGx5IGluIGhvdyB0aGUgVk0gZXhpdHMgdGhlIFZNWCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTUuMzE5MjQyMTgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzkyOTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfdm14X3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzY0Mz1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5NC0vKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc5NTogKiBuZXN0ZWRfdm14X3J1bigpIGhhbmRsZXMgYSBuZXN0ZWQgZW50cnksIGkuZS4sIGEgVk1MQVVOQ0ggb3IgVk1SRVNVTUUgb24gTDFcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3OTYtICogZm9yIHJ1bm5pbmcgYW4gTDIgbmVzdGVkIGd1ZXN0LlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5Ny0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3OTg6c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc5OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NDg9c3RhdGljIGludCBoYW5kbGVfdm1sYXVuY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY0OS17XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1NjUwOlxcdHJldHVybiBuZXN0ZWRfdm14X3J1bih2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NTEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NjU0PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcmVzdW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY1Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU2NTc6XFx0cmV0dXJuIG5lc3RlZF92bXhfcnVuKHZjcHUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoxNS40MTMyMTAyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkzMzY5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFZNWCBTdGF0ZSBUcmFuc2l0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBoYW5kbGVfdm1sYXVuY2hgIGFuZCBgaGFuZGxlX3ZtcmVzdW1lYCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXkncmUgZGVmaW5lZCBhcyBgc3RhdGljYC4gUmlnaHQsIHRoYXQncyBub3QgdW51c3VhbCBmb3IgaGFuZGxlcnMgbGlrZSB0aGlzLCBidXQgaXQncyBhIGdvb2QgcmVtaW5kZXIgb2YgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IHdpdGggdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gVGhlIGtleSBoZXJlIGlzIGxpa2VseSBnb2luZyB0byBiZSBob3cgdGhlIGhhcmR3YXJlIG1hbmFnZXMgdGhlIHN0YXRlIGFjcm9zcyB0aG9zZSBjYWxscy4gVGltZSB0byBjaGVjayBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTkuMzA2NTgyOTk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY0MTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfc2V0X25lc3RlZF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg5MD1pbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTExLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjkxMjpzdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5MTMtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0OTc9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNC1cXHQuZ2V0X3N0YXRlID0gdm14X2dldF9uZXN0ZWRfc3RhdGUsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTA1OlxcdC5zZXRfc3RhdGUgPSB2bXhfc2V0X25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDYtXFx0LmdldF9uZXN0ZWRfc3RhdGVfcGFnZXMgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MTkuNDA0MjMwNjc1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzEzNjc4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXN0ZWQgVk1YIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gaG93IGB2bXhfbmVzdGVkX29wc2AgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaXRzIGRlcGVuZGVuY2Ugb24gYHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cywgdGhlIGV4dGVybmFsIGludGVyZmFjZXMgZm9yIHRoaXMgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCB0aGF0IGFjdCBhcyB0aGVzZSBlbnRyeSBwb2ludHMuXG5cbkxldCBtZSBzZWUuLi4gQWgsIHRoZXJlJ3MgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCBpc24ndCBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgc2luY2UgdGhhdCB3b3VsZCBtYWtlIGl0IGluYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyBmaWxlLiBIb3BlZnVsbHksIGl0J3MgZXhwb3NlZCBmb3IgdXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIGVudHJ5IHBvaW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQzOjIyLjkzNTYwMTE4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5MDAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjMwPXN0YXRpYyB2b2lkIGxvYWRfdm1jczEyX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjQyLSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzY0MzplbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBmcm9tX3ZtZW50cnkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3OTg9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODc3LVxcdHZteC1cXHUwMDNlbmVzdGVkLmhhc19wcmVlbXB0aW9uX3RpbWVyX2RlYWRsaW5lID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODc4OlxcdHN0YXR1cyA9IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSh2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzktXFx0aWYgKHVubGlrZWx5KHN0YXR1cyAhPSBOVk1YX1ZNRU5UUllfU1VDQ0VTUykpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODUtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4ODY6XFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoKSBhcyBpdCB3aWxsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODg3LVxcdCAqIGFsc28gYmUgdXNlZCBhcyBwYXJ0IG9mIHJlc3RvcmluZyBuVk1YIHN0YXRlIGZvclxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTEyPXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc5LVxcdHZteC1cXHUwMDNlbmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwODA6XFx0cmV0ID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwODEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MjMuMDI2NTA4MDg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjQzNzgxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBmdW5jdGlvbiBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuLi4gSWYgaXQncyBub3Qgc3RhdGljLCB0aGUgYmlnZ2VyIHF1ZXN0aW9uIGJlY29tZXM6IGlzIHRoaXMgZnVuY3Rpb24gZXhwb3NlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGBuZXN0ZWQuY2AgZmlsZSBpdHNlbGY/IElzIGl0IGRlY2xhcmVkIGluIGEgaGVhZGVyIG9yIHVzZWQgYnkgYW5vdGhlciBtb2R1bGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoyOC4zOTA5MDMyOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mzk2NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2MzA9c3RhdGljIHZvaWQgbG9hZF92bWNzMTJfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NDItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjQzOmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRib29sIGZyb21fdm1lbnRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Mzc5OD1zdGF0aWMgaW50IG5lc3RlZF92bXhfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsYXVuY2gpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NzctXFx0dm14LVxcdTAwM2VuZXN0ZWQuaGFzX3ByZWVtcHRpb25fdGltZXJfZGVhZGxpbmUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4Nzg6XFx0c3RhdHVzID0gbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHZjcHUsIHRydWUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg3OS1cXHRpZiAodW5saWtlbHkoc3RhdHVzICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg4NS1cXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg4NjpcXHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpIGFzIGl0IHdpbGxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4ODctXFx0ICogYWxzbyBiZSB1c2VkIGFzIHBhcnQgb2YgcmVzdG9yaW5nIG5WTVggc3RhdGUgZm9yXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTI9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwNzktXFx0dm14LVxcdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSB0cnVlO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzA4MDpcXHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA4MS1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0xMC0vKlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MTE6ICogU3RhdHVzIHJldHVybmVkIGJ5IG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSgpOlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMTItICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI2PXZvaWQgbmVzdGVkX3ZteF9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjI3OmVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGZyb21fdm1lbnRyeSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0MjA9aW50IHZteF9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDM0LVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODQzNTpcXHRcXHRyZXQgPSBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQzNi1cXHRcXHRpZiAocmV0ICE9IE5WTVhfVk1FTlRSWV9TVUNDRVNTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzoyOC40NDkzMDY2NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwOTQxNDIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXMgY29kZTpcblxuKipEZWVwIERpdmUgaW50byBWTVggTmVzdGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYHZteF9sZWF2ZV9zbW1gLCBhbmQgaXQncyBjYWxsaW5nIHNvbWV0aGluZyBpbiBgdm14LmNgLiBNeSBzcGlkZXktc2Vuc2UgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIG5lc3RlZCBWTVggb3BlcmF0aW9uLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHN5bWJvbCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGluaXRpYWwgYW5hbHlzaXMgb24gdGhhdCBmdW5jdGlvbi5cblxuTm93LCBob2xkIG9uLiBJIGFsc28gc2VlIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAuIEl0J3Mgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIHRoaXMga2luZCBvZiBzaXR1YXRpb24sIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGB2bXhfbmVzdGVkX29wcy5zZXRfc3RhdGVgLiBUaGF0IGB2bXhfbmVzdGVkX29wc2Agc3RydWN0dXJlIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIGFjdGlvbiBpcyBoYXBwZW5pbmcsIHNvIEkgbmVlZCB0byBjaGVjayBpdCBvdXQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQgdG8gbWFuYWdlIHRoZSBuZXN0ZWQgVk1YIGVudmlyb25tZW50LiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIGl0cyBkZWNsYXJhdGlvbiwgYW5kIGhvdyB0aGUgYHNldF9zdGF0ZWAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MzozMi43NTg3MjQ4MjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQzNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9uZXN0ZWRfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk3LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjk5ODpcXHQubmVzdGVkX29wcyA9IFxcdTAwMjZ2bXhfbmVzdGVkX29wcyxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzY9c3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0OTc6c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTgtXFx0LmxlYXZlX25lc3RlZCA9IHZteF9sZWF2ZV9uZXN0ZWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTMxMj1zdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX2NwdV9oYXNfbm9faHdfZXJyY29kZV9jYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMyMTpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcztcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6MzIuODM3ODc1MDU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjIwODg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5lc3RlZCBWTVggRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmVzdGVkIFZNWCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBzZWUgdGhhdCBgdm14X25lc3RlZF9vcHNgIGlzIHVzZWQgaW4gYG1haW4uY2AgdG8gaW5pdGlhbGl6ZSBgdnRfeDg2X29wcy5uZXN0ZWRfb3BzYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHRoZSBzeW1ib2wgdGFibGUgYW5kIHdoYXQncyBub3QuXG5cbkxldCdzIHNlZSwgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGJlIGlubGluZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBleHBvcnRlZCBhbmQgd2hldGhlciBzeXprYWxsZXIgY2FuIHJlYWNoIGl0LiBJJ2xsIGNoZWNrIGBuZXN0ZWRfdm14X3J1bmAsIHdoaWNoIGlzIGFsc28gc3RhdGljOyBpdCBpcyB1bmxpa2VseSB0byBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBgaGFuZGxlX3ZtbGF1bmNoYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoYXQsIHRvby4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYD8gQWhhISBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyAqbm9uLXN0YXRpYyogYW5kIGl0IGNhbGxzIHRoYXQgZnVuY3Rpb24uIFRoYXQncyBhIHN0cm9uZyBjYW5kaWRhdGUuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIGBuZXN0ZWRfdm14X2NoZWNrX2FwaWN2X2NvbnRyb2xzYCBpcyBzdGF0aWMsIGBwcmVwYXJlX3ZtY3MwMl9lYXJseWAgaXMgc3RhdGljLCBgbmVzdGVkX2dldF9ldm1jc19wYWdlYCBpcyBzdGF0aWMsIGFuZCBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGlzIHN0YXRpYy4gVGhleSdyZSBhbGwgcHJvYmFibHkgaW50ZXJuYWwgaGVscGVycy5cblxuTm93LCBhYm91dCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLiBJdCdzIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyISBUaGF0IG1lYW5zIGl0IHdvbid0IGJlIGlubGluZWQuIEJ1dCBpdCAqY291bGQqIHN0aWxsIGJlIGEgaGlkZGVuIHN5bWJvbCwgc28gc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gcmVhY2ggaXQuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMuIEJ1dCwgYmFzZWQgb24gdGhlIHByb21wdCwgaXQgc291bmRzIGxpa2UgSSBzaG91bGQgZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyBkZWZpbml0ZWx5IGEgYmV0dGVyIGZvY3VzIHNpbmNlIGl0IGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLlxuXG5JIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCBmb3IgbW9yZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5lc3RlZCBWTVguIEkgbmVlZCB0byBrZWVwIHNlYXJjaGluZyBmb3IgYW55IG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODk3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQzOjQxLjU1OTk2NzY5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5MTY4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBuZXN0ZWRfdm14X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4MT12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg5MDppbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQzOjQxLjYzNzg4OTExMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzgzNDYyMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEludmVzdGlnYXRpb246IFZNWCBDb250ZXh0IFx1MDAyNiBQb3RlbnRpYWwgTmVzdGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHdpdGhpbiB0aGUga2VybmVsJ3MgVk1YIGhhbmRsaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYW55IGNvZGUgcGF0aHMgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGFueXRoaW5nIHRoYXQgcmVzZW1ibGVzIHRoYXQgdHlwZSBvZiBhcmNoaXRlY3R1cmUuIFRoZSBpbW1lZGlhdGUgc2VhcmNoIHN0cmF0ZWd5IGludm9sdmVzIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIG5hbWVzIG9yIGNvZGUgYmxvY2tzIHRoYXQgbWlnaHQgY29udGFpbiBgXnZvaWQgbmVzdGVkX3ZteF9gLCBvciBzb21ldGhpbmcgZXF1YWxseSBkZXNjcmlwdGl2ZS4gSSdtIGRlbGliZXJhdGVseSB1c2luZyBhIHdpbGRjYXJkIChgXmApIGF0IHRoZSBiZWdpbm5pbmcgdG8gZ3JhYiBhbnl0aGluZyB0aGF0ICpwcmVjZWRlcyogdGhlIHBocmFzZSAtIGluIGVmZmVjdCBsb29raW5nIGZvciBwb3RlbnRpYWwgd3JhcHBlcnMgb3Igc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gVGhlIGdvYWwgaXMgdG8gcmFwaWRseSBsb2NhdGUgY29kZSBzZWdtZW50cyBpbnZvbHZlZCB3aXRoIFZNWCBtYW5hZ2VtZW50LCBhbmQgaW4gcGFydGljdWxhciwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5kaWNhdGlvbnMgb2YgYSBcIm5lc3RlZFwiIGV4ZWN1dGlvbiBtb2RlbC4gVGhpcyByYXBpZCBjaGVjayBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIHNpZ25hbCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDE4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6NDkuNDIxMzUzNjUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyNTU5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpfXSsgbmVzdGVkX3ZteF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMzNj1zdGF0aWMgdm9pZCBmcmVlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4NC0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4NTp2b2lkIG5lc3RlZF92bXhfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY2Mj1zdGF0aWMgaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjYzOnZvaWQgbmVzdGVkX3ZteF9zZXRfbXNyXyMjcncjI19pbnRlcmNlcHQoc3RydWN0IHZjcHVfdm14ICp2bXgsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjY0LVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICptc3JfYml0bWFwX2wxLFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjE5Nz1zdGF0aWMgaW50IGhhbmRsZV92bWZ1bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjUxLSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjI1Mjpib29sIG5lc3RlZF92bXhfY2hlY2tfaW9fYml0bWFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBwb3J0LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjI1My1cXHRcXHRcXHRcXHQgaW50IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY1NjY9c3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjcwNS0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY3MDY6Ym9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY3MDcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODgxPXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODkwOmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA5My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwOTQ6dm9pZCBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAodm9pZClcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwOTUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03MzUyPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfc2V0dXBfY3JfZml4ZWQoc3RydWN0IG5lc3RlZF92bXhfbXNycyAqbXNycylcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzM4MS0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjczODI6dm9pZCBuZXN0ZWRfdm14X3NldHVwX2N0bHNfbXNycyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZiwgdTMyIGVwdF9jYXBzKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzM4My17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0MTgtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDE5OnZvaWQgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDIwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6NDkuNTI5NjE0MDYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjUwODMxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGxvb2tpbmcgc29saWQsIHRoYXQgc2VlbXMgdG8gYmUgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEJ1dCBub3cgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gV2hhdCBhYm91dCBgdm14X3NldF9uZXN0ZWRfc3RhdGVgPyBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgaXQncyAqdGhlKiBlbnRyeSBwb2ludCBmb3IgdGhhdCBgS1ZNX1NFVF9ORVNURURfU1RBVEVgIGlvY3RsLiBJdCBmZWVscyBsaWtlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGllY2UgYmV0dGVyIGluIHJlbGF0aW9uIHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZWdyYXRlcy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIGF0IGBrdm1feDg2X25lc3RlZF9vcHNgLCBpdCBzaG91bGQgaGF2ZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIG9uIGhvdyB0aGVzZSBwaWVjZXMgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDM6NTQuMjk0NzAwMTExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyMjU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2xhcGljLmM9MzI5Mz1pbnQga3ZtX2FwaWNfZ2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcylcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTMzMDUtXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MzMwNjppbnQga3ZtX2FwaWNfc2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcylcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0zMzA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5oPTEzNj1pbnQga3ZtX2FwaWNfZ2V0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSAqcyk7XFxuYXJjaC94ODYva3ZtL2xhcGljLmg6MTM3OmludCBrdm1fYXBpY19zZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKTtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuaC0xMzgtaW50IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTIxNjU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBzdm1fbmVzdGVkX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE3Mi1cXHQuZ2V0X3N0YXRlID0gc3ZtX2dldF9uZXN0ZWRfc3RhdGUsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTczOlxcdC5zZXRfc3RhdGUgPSBzdm1fc2V0X25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIxNzQtXFx0Lmh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoID0gc3ZtX2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDk3PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDQtXFx0LmdldF9zdGF0ZSA9IHZteF9nZXRfbmVzdGVkX3N0YXRlLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNTpcXHQuc2V0X3N0YXRlID0gdm14X3NldF9uZXN0ZWRfc3RhdGUsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NTA2LVxcdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTMxMD1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3NldF9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxODpcXHRyID0ga3ZtX2FwaWNfc2V0X3N0YXRlKHZjcHUsIHMpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzE5LVxcdGlmIChyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjEtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1NjI6XFx0XFx0aWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VzZXRfc3RhdGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU4NC1cXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU4NTpcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlc2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgXFx1MDAyNmt2bV9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1ODYtXFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0Mzo1NC40MDI5MzA4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzMwNDEyMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSBpbnRvIFZNIEV4aXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBjYWxsLCBhbmQgaXQgdWx0aW1hdGVseSBsYW5kcyBpbiBga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VzZXRfc3RhdGVgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkga25vdyBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBJIGNhbiB1c2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFzIGEgcHJldHR5IGdvb2QgZm9jdXMgcG9pbnQsIGFsdGhvdWdoIGl0IGlzIGEgaG90LXBhdGggZ2VuZXJpYyBmdW5jdGlvbi5cblxuTm93LCB3aGVyZSBkb2VzIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgbGVhZD8gUmlnaHQsIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgIGlzIGNhbGxlZCBmcm9tIGJvdGggYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBhbmQgYG5lc3RlZF92bXhfcnVuYC4gSW50ZXJlc3RpbmcsIGlzIGBuZXN0ZWRfdm14X3J1bmAgYWxzbyBzdGF0aWM/IFllcCwgaXQgaXMuIEFuZCBob3cgYWJvdXQgYGhhbmRsZV92bWxhdW5jaGA/IEFsc28gc3RhdGljLCBhcyBleHBlY3RlZC5cblxuTXkgbGluZSBvZiB0aGlua2luZyBub3cgaXMgdG8gdHJ5IGFuZCBpZGVudGlmeSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIFZNIGV4aXRzLCBhbmQgaWYgYHZteF9oYW5kbGVfZXhpdGAgaXMgbm9uLXN0YXRpYywgaXQgc2hvdWxkIGJlIHByb21pc2luZy4gQW5kIGluZGVlZCwgYHZteF9oYW5kbGVfZXhpdGAgaXMgbm90IHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MDAuMTMzMzQ0NzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjEwNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9oYW5kbGVfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNTk9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNjQtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTY1OlxcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Ni19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODA9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5My1cXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5OTQ6XFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDA5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NDc0LVxcdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NDc1OlxcdCAqIFNlZSB0aGUgY29tbWVudHMgaW4gdm14X2hhbmRsZV9leGl0LlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ3Ni1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjI1OD1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MjYyLVxcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjI2MzpcXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNjQtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY0OTE9dm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Njk1LSAqL1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjY5NjpzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjY5Ny17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTQtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODU1OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODU2LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTc6XFx0aW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1OC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzE2OD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxODMtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTg0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTg1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI5PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzA6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzE6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzItaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjAwLjIyMjU1OTkxOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUxNjgxNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyBhbmQgYSBQb3RlbnRpYWwgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBhdHRlcm46IGB2bXhfaGFuZGxlX2V4aXRgLCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCwgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYCwgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLCBgbmVzdGVkX3ZteF9jaGVja19pb19iaXRtYXBzYCwgYG5lc3RlZF92bXhfZnJlZV92Y3B1YCwgYG5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcGAsIGBuZXN0ZWRfdm14X3NldHVwX2N0bHNfbXNyc2AsIGFuZCBgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwYCDigJMgdGhleSBhcmUgYWxsIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkgYXJlIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHByb2JhYmx5IHBhcnQgb2YgYW4gQVBJIG9yIGV4cG9zZWQgZm9yIHNvbWUgb3RoZXIgbW9kdWxlIHRvIGxldmVyYWdlLlxuXG5NeSBmb2N1cyBpcyBkcmF3biB0byB0aGlzIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgZnVuY3Rpb24gYmVjYXVzZSBJIHVuZGVyc3RhbmQgdGhhdCBpdCdzIHRoZSBzdXNwZWN0ZWQgY3VscHJpdC4gQW5kIGl0J3MgY2FsbGVkIGJ5IGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgYW5kIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgLiBJIHJlbWVtYmVyIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgcmVjYWxsIHRoZSBmbG93IGZyb20gYSBwYWdlIGZhdWx0LiBJdCBzZWVtcyBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGxlYWRzIHRvIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2AgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNoYWluOiBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCAtXHUwMDNlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIC1cdTAwM2UgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgLVx1MDAzZSBga3ZtX21tdV9nZXRfcGFnZWAgYW5kIHRoZW7igKYgb2gsIHJpZ2h0LCBpdCdzIGFzc2lnbmVkIHRvIGB2bXhfbmVzdGVkX29wcy5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzYC4gRXhjZWxsZW50LCBub3cgSSB1bmRlcnN0YW5kIHRoZSBwYXRoLlxuXG5JIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYGdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHdpZGVzcHJlYWQgdGhpcyBwcm9ibGVtIG1pZ2h0IGJlLiBUaGUgaXNzdWUgY291bGQgYmUgdmVyeSBsb2NhbGl6ZWQgb3IgaW1wYWN0IG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCByZWx5IG9uIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjA2LjQ3NDI0NDQ0NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzODUzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTk1MD1zdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjExMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIxMTI6c3RhdGljIGJvb2wgc3ZtX2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjExMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTIxNjU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBzdm1fbmVzdGVkX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE3MC1cXHQudHJpcGxlX2ZhdWx0ID0gbmVzdGVkX3N2bV90cmlwbGVfZmF1bHQsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTcxOlxcdC5nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzID0gc3ZtX2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTcyLVxcdC5nZXRfc3RhdGUgPSBzdm1fZ2V0X25lc3RlZF9zdGF0ZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQ0Mj1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NDMtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTQ0OnN0YXRpYyBib29sIHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1NDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDk3PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDUtXFx0LnNldF9zdGF0ZSA9IHZteF9zZXRfbmVzdGVkX3N0YXRlLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzUwNjpcXHQuZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyA9IHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwNy1cXHQud3JpdGVfbG9nX2RpcnR5ID0gbmVzdGVkX3ZteF93cml0ZV9wbWxfYnVmZmVyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMTEyPXN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMzQtXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTExMzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHZjcHUpKSkge1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNi1cXHRcXHRcXHRcXHRyID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MDYuNTQ0NjM0NTk0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTY4NTkxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gRml4KipcblxuT2theSwgc28gYGdldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIGdldHMgY2FsbGVkIHdpdGhpbiBgdmNwdV9lbnRlcl9ndWVzdGAgd2hlbiB3ZSBoYXZlIGEgYEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFU2AgcmVxdWVzdC4gVGhlIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZXhwbGljaXRseSByZS1hcm1zIHRoYXQgcmVxdWVzdCB3aXRoaW4gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCBpbiBjYXNlIG9mIGZhaWx1cmUuIEVzc2VudGlhbGx5LCBpdCdzIG1ha2luZyBzdXJlIEtWTSByZXRyaWVzIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHJ1bm5pbmcgTDIgd2l0aCBhIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdm1jczAyYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgd2l0aG91dCB0aGlzLCB3ZSdkIGJhaWwgb3V0LCBsZWF2aW5nIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBhbiBvdXRkYXRlZCBgdm1jczAyYCwgYW5kIGl0cyBhZGRyZXNzZXMgcG9pbnRpbmcgdG8gKmhvc3QqIHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBiZWNhdXNlIGBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpYCBoYXMgdW5tYXBwZWQgYW5kIHVucGlubmVkIHRoZW0uIEtWTSB3b3VsZCByZXR1cm4gdG8gdXNlcnNwYWNlLCBhbmQgaWYgdGhhdCB1c2Vyc3BhY2UgdGhpbmcgcmVzdW1lcyB0aGUgdkNQVSwgVk0tRW50ZXIgd291bGQgc3VjY2VlZCwgYnV0IHdlJ2QgaGF2ZSBoYXJkd2FyZSBhY2Nlc3NpbmcgdGhvc2Ugc3RhbGUgSFBBcyDigJMgYSBkZWZpbml0ZSByZWNpcGUgZm9yIGRpc2FzdGVyLlxuXG5UaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4IHRoYXQgSSB0aGluayBpcyByaXBlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzLCBzcGVjaWZpY2FsbHkgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBpbiB0aGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LlxuXG5MZXQncyBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIHBvdGVudGlhbGx5IHJlbGV2YW50IHRoYXQgYXJlbid0IHN0YXRpYz9cbk9rYXksIEknbGwgYWxzbyBhZGQgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBmdXp6aW5nIGZvY3VzIGxpc3QuXG5gbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJgIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGBcblxuU28gSSdtIGdvaW5nIHRvIGluY2x1ZGUgaW4gdGhlIGZ1enppbmc6XG4tIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgXG4tIGB2bXhfaGFuZGxlX2V4aXRgXG5cbk5vdywgYmVmb3JlIEkgZ2V0IGNhcnJpZWQgYXdheSwgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgYnVpbGRzLiBJIGtub3cgaXQncyBLVk0gYW5kIEtWTV9JTlRFTCwgYnV0IEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHRoZXJlIGlzbid0IGFueXRoaW5nIGVsc2UuIENoZWNraW5nIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2Agbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjE5LjExMzIyOTYyNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4ODE0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0NDoxOS4xODYxMTg3ODNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2MDAxOTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gRnV6emluZyBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmb2N1cyBpcyBLVk0gZnV6emluZywgYW5kIEkga25vdyB0aGF0IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgW1wiS1ZNXCIsIFwiS1ZNX0lOVEVMXCJdYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCBmaWxlLiBJJ20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYyBhbmQgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBPa2F5LCBJIHNlZSBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCwgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLCBhbmQgYG5lc3RlZF92bXhfY2hlY2tfcmVzdG9yZWRfdm1jczEyYC4gQWZ0ZXIgcmV2aWV3LCBJJ3ZlIGRlY2lkZWQgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgYW5kIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAgaGF2ZSB0aGUgbW9zdCBmdXp6aW5nIHBvdGVudGlhbC4gSSB3aWxsIGFsc28gaW5jbHVkZSBgdm14X2hhbmRsZV9leGl0YCBpbiBteSB0ZXN0aW5nIHN0cmF0ZWd5LlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGUgZGV0YWlscyBvZiBgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJgIHRvIGVuc3VyZSBpdCdzIGEgZ29vZCBjYW5kaWRhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTA1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjI3LjQ0NjE0MTM3MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE3MTgyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODgxPXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODkwOmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkxMj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzA3My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwNzQ6XFx0cmV0ID0gbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDc1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yND12b2lkIG5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjI1OmludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjYtdm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDIwPWludCB2bXhfbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQzMS1cXHRcXHQvKiBUcmlwbGUgZmF1bHQgaWYgdGhlIHN0YXRlIGlzIGludmFsaWQuICAqL1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODQzMjpcXHRcXHRpZiAobmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIodmNwdSkgXFx1MDAzYyAwKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQzMy1cXHRcXHRcXHRyZXR1cm4gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MjcuNTM3ODc3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzkzNTE3OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZNWCBNb2R1bGUgU3ltYm9sIFVzYWdlKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIHVzYWdlIG9mIGBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMmAsIGFuZCBjb25maXJtZWQgdGhhdCBpdCdzIGluZGVlZCBjYWxsZWQgd2l0aGluIGB2bXhfbGVhdmVfc21tYCBhbmQgYHZteF9zZXRfbmVzdGVkX3N0YXRlYC4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGZ1bmN0aW9ucyBpbnRlcmFjdC5cblxuR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGtlZXAgYSBsYXNlciBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGZvciBmdXJ0aGVyIGFuYWx5c2lzOlxuXG4qICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWBcbiogICBgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJgXG4qICAgYHZteF9oYW5kbGVfZXhpdGBcblxuVGhhdCBzZWVtcyB0byBiZSBhIHNvbGlkIGxpc3Qgb2Yga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcy4gTGV0J3MgZ2V0IHRoZXNlIHJlc3VsdHMgc2V0IGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIwNiwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MzYuOTMxMzk5MDg4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMTgzNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwibmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSdzIG5lc3RlZCBWTVggaW1wbGVtZW50YXRpb24gd2hlcmUgYSBmYWlsdXJlIHRvIG1hcCBWTUNTMTIgcGFnZXMgd291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ORVNURURfU1RBVEUgb3IgVk0tRW50ZXIpLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwibmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTJcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSdzIG5lc3RlZCBWTVggaW1wbGVtZW50YXRpb24gd2hlcmUgYSBmYWlsdXJlIHRvIG1hcCBWTUNTMTIgcGFnZXMgd291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ORVNURURfU1RBVEUgb3IgVk0tRW50ZXIpLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6MzcuMDU0NTkxODM3WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE2NTM4MTkyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQ0OjM3LjA1NTQwNjQyN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjE2NDU2MzM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdoZXJlIGEgZmFpbHVyZSBpbiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGNvdWxkIGxlYXZlIHRoZSB2Q1BVIGluIGd1ZXN0IG1vZGUgd2l0aCBzdGFsZSBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcyAoSFBBcykgbWFwcGVkIGluIHZtY3MwMi4gSWYgdXNlcnNwYWNlIHJlc3VtZWQgdGhlIHZDUFUsIGhhcmR3YXJlIGNvdWxkIGFjY2VzcyB0aGVzZSBzdGFsZSBIUEFzLCBsZWFkaW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlLWxpa2UgYmVoYXZpb3IuIFRoZSBmaXggcmUtYXJtcyB0aGUgYEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFU2AgcmVxdWVzdCB0byBlbnN1cmUgS1ZNIHJldHJpZXMgdGhlIG1hcHBpbmcuXFxuXFxuVGhpcyBpc3N1ZSBpcyByZWxhdGVkIHRvIHN0YWxlIHBvaW50ZXJzIGFuZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgYWNjZXNzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjg5MzZlZTNkN2EwZmI5ZjgyYTdkZTZkYmYyZWJkMjlkY2Q5YzE2NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IGRkZjZkZjdiZWU5M2IuLjllOWJkNmM1NDFiYWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtMzQ1Myw3ICszNDUzLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBzdGF0ZSB3aGljaCBjYW4gbGVhZCB0byBhIGxvYWQgb2Ygd3JvbmcgUERQVFJzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKENDKCFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guY3IzKSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gZmFpbDtcbiBcdH1cbiBcbiBcbkBAIC0zNDY5LDcgKzM0NjksNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlaW50ZXJuYWwuc3ViZXJyb3IgPVxuIFx0XHRcdFx0S1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTjtcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VpbnRlcm5hbC5uZGF0YSA9IDA7XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTM1MjUsNiArMzUyNSwyMCBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGV4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuK1xuK2ZhaWw6XG4rXHQvKlxuK1x0ICogUmUtYXJtIHRoZSByZXF1ZXN0IHNvIHRoYXQgS1ZNIHJldHJpZXMgdGhlIG1hcHBpbmcgaW5zdGVhZCBvZiBydW5uaW5nXG4rXHQgKiBMMiB3aXRoIGEgc3RhbGUgdm1jczAyLiAgQmFpbGluZyBoZXJlIGxlYXZlcyB0aGUgdkNQVSBpbiBndWVzdCBtb2RlXG4rXHQgKiB3aXRoIHZtY3MwMiBsb2FkZWQgYW5kIGl0cyBBUElDLWFjY2VzcywgdmlydHVhbC1BUElDIGFuZCBwb3N0ZWRcbitcdCAqIGludGVycnVwdCBkZXNjcmlwdG9yIGFkZHJlc3NlcyBzdGlsbCBwb2ludGluZyBhdCB0aGUgaG9zdCBwYWdlcyB0aGF0XG4rXHQgKiB3ZXJlIG1hcHBlZCBmb3IgdGhlICpwcmV2aW91cyogbmVzdGVkIFZNLUVudGVyLCB3aGljaCBoYXZlIHNpbmNlIGJlZW5cbitcdCAqIHVubWFwcGVkIGFuZCB1bnBpbm5lZCBieSBuZXN0ZWRfcHV0X3ZtY3MxMl9wYWdlcygpLiAgS1ZNIHJldHVybnMgdG9cbitcdCAqIHVzZXJzcGFjZSB3aXRob3V0IGxlYXZpbmcgZ3Vlc3QgbW9kZSwgc28gaWYgdXNlcnNwYWNlIHJlc3VtZXMgdGhlXG4rXHQgKiB2Q1BVLCBWTS1FbnRlciBzdWNjZWVkcyBhbmQgaGFyZHdhcmUgYWNjZXNzZXMgdGhvc2Ugc3RhbGUgSFBBcy5cbitcdCAqL1xuK1x0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0NDozNy4wNTU0MDc3MzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNjQ1NDE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBCYXNpY2FsbHksIGluc3RlYWQgb2YganVzdCBiYWlsaW5nIG91dCB3aXRoIGBmYWxzZWAgd2hlbiBpdCBmYWlscywgaXQgbm93IHJlLWFybXMgYSByZXF1ZXN0IHRvIHJldHJ5IHRoZSBtYXBwaW5nLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHRvIHByZXZlbnQgTDIgZnJvbSBydW5uaW5nIHdpdGggYSBzdGFsZSBgdm1jczAyYC4gVGhlIGNvcmUgcHJvYmxlbT8gSGFyZHdhcmUgYWNjZXNzaW5nIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSB0aGF0IHdlcmUgdmFsaWQgKmJlZm9yZSogYSBuZXN0ZWQgVk0tRW50ZXIsIGJ1dCBhcmUgbm93IGdhcmJhZ2UgYmVjYXVzZSB0aGV5J3ZlIGJlZW4gdW5tYXBwZWQuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvIOKAkyB1c2UtYWZ0ZXItZnJlZSwgZWZmZWN0aXZlbHkuIE5vdCBpZGVhbCFcblxuTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMgdG8gY29uc2lkZXIgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gQnV0IGhvbGQgb24uLi4gdGhpcyBpcyBhbGwgYWJvdXQgc3RhbGUgKmFkZHJlc3NlcyosIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gYGt2bV9tYWtlX3JlcXVlc3RgIGp1c3Qgc2V0cyBhIGJpdCBpbiBgdmNwdS1cdTAwM2VyZXF1ZXN0c2AuIEl0J3Mgbm90IGNyZWF0aW5nIG5ldyBkYXRhLCBhbGxvY2F0aW5nIG1lbW9yeSwgb3IgbGVha2luZyBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlIGZpeCBpdHNlbGYgaXMgbWVyZWx5IHJlLWFybWluZyB0aGUgcmVxdWVzdCwgYW5kIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIHN0YWxlIHBvaW50ZXJzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEtBU0FOIGlzIGJ1aWx0IGZvci5cblxuU28sIEtNU0FOIGlzIGEgbm9uLXN0YXJ0ZXIgaGVyZS4gS0FTQU4sIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3b3VsZCBiZSB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGtpbmQgb2YgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIGJ1Zy4gV2hpbGUgS0FTQU4gbWlnaHQgbm90IGNhdGNoIHRoZSBoYXJkd2FyZSdzIGRpcmVjdCBhY2Nlc3MgdG8gc3RhbGUgSFBBcyAoZGVwZW5kaW5nIG9uIHRoZSBpbnN0cnVtZW50YXRpb24pLCBLTVNBTiBkZWZpbml0ZWx5IHdvbid0LCBzaW5jZSBpdCB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCBwbGFpbiBhbmQgc2ltcGxlLCBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDQ6NDkuMjE5OTUyNjgxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2hlcmUgYSBmYWlsdXJlIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgY291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSBtYXBwZWQgaW4gdm1jczAyLiBJZiB1c2Vyc3BhY2UgcmVzdW1lZCB0aGUgdkNQVSwgaGFyZHdhcmUgY291bGQgYWNjZXNzIHRoZXNlIHN0YWxlIEhQQXMsIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUtbGlrZSBiZWhhdmlvci4gVGhlIGZpeCByZS1hcm1zIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0IHRvIGVuc3VyZSBLVk0gcmV0cmllcyB0aGUgbWFwcGluZy5cXG5cXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2hlcmUgYSBmYWlsdXJlIGluIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgY291bGQgbGVhdmUgdGhlIHZDUFUgaW4gZ3Vlc3QgbW9kZSB3aXRoIHN0YWxlIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzIChIUEFzKSBtYXBwZWQgaW4gdm1jczAyLiBJZiB1c2Vyc3BhY2UgcmVzdW1lZCB0aGUgdkNQVSwgaGFyZHdhcmUgY291bGQgYWNjZXNzIHRoZXNlIHN0YWxlIEhQQXMsIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUtbGlrZSBiZWhhdmlvci4gVGhlIGZpeCByZS1hcm1zIHRoZSBgS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTYCByZXF1ZXN0IHRvIGVuc3VyZSBLVk0gcmV0cmllcyB0aGUgbWFwcGluZy5cXG5cXG5UaGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlcnMgYW5kIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBhY2Nlc3MgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[1] Phase: Succeeded StartedAt: 2026-08-13 05:45:00 +0000 UTC FinishedAt: 2026-08-13 05:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 05:45:00 +0000 UTC FinishedAt: 2026-08-13 05:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2] Phase: Succeeded StartedAt: 2026-08-13 05:45:00 +0000 UTC FinishedAt: 2026-08-13 09:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 05:45:00 +0000 UTC FinishedAt: 2026-08-13 09:25:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 05:45:00 +0000 UTC FinishedAt: 2026-08-13 05:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 05:45:00 +0000 UTC FinishedAt: 2026-08-13 05:45:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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-workflow6r7bc/series-workflow6r7bc-convert-artifact-3574895531/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 05:45:10 +0000 UTC FinishedAt: 2026-08-13 06:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 05:45:10 +0000 UTC FinishedAt: 2026-08-13 06:01:19 +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:*e56e8b90-41d5-4ed0-bfa2-2d189a450856,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-workflow6r7bc/series-workflow6r7bc-convert-artifact-3574895531/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": "6368fce4-7942-432f-adb0-b91169167f9e", "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-workflow6r7bc/series-workflow6r7bc-build-action-359146665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 05:45:10 +0000 UTC FinishedAt: 2026-08-13 06:01:09 +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:*e56e8b90-41d5-4ed0-bfa2-2d189a450856,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-workflow6r7bc/series-workflow6r7bc-convert-artifact-3574895531/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": "6368fce4-7942-432f-adb0-b91169167f9e", "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-workflow6r7bc/series-workflow6r7bc-build-action-359146665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 06:01:19 +0000 UTC FinishedAt: 2026-08-13 06:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:01:19 +0000 UTC FinishedAt: 2026-08-13 06:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 06:01:19 +0000 UTC FinishedAt: 2026-08-13 06:01:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:01:19 +0000 UTC FinishedAt: 2026-08-13 06:01:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-workflow6r7bc/series-workflow6r7bc-convert-artifact-1708641922/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 06:01:29 +0000 UTC FinishedAt: 2026-08-13 06:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:01:29 +0000 UTC FinishedAt: 2026-08-13 06:03:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6368fce4-7942-432f-adb0-b91169167f9e,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-workflow6r7bc/series-workflow6r7bc-build-action-359146665/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-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 06:03:35 +0000 UTC FinishedAt: 2026-08-13 06:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:03:35 +0000 UTC FinishedAt: 2026-08-13 06:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 06:03:35 +0000 UTC FinishedAt: 2026-08-13 06:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:03:35 +0000 UTC FinishedAt: 2026-08-13 06:20:17 +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:*e56e8b90-41d5-4ed0-bfa2-2d189a450856,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-workflow6r7bc/series-workflow6r7bc-convert-artifact-1708641922/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": "06519f69-9a22-4dc8-9736-5b0a8840eeb4", "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-workflow6r7bc/series-workflow6r7bc-build-action-2869672150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:03:35 +0000 UTC FinishedAt: 2026-08-13 06:20:06 +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:*e56e8b90-41d5-4ed0-bfa2-2d189a450856,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-workflow6r7bc/series-workflow6r7bc-convert-artifact-1708641922/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": "06519f69-9a22-4dc8-9736-5b0a8840eeb4", "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-workflow6r7bc/series-workflow6r7bc-build-action-2869672150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 06:20:17 +0000 UTC FinishedAt: 2026-08-13 06:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:20:17 +0000 UTC FinishedAt: 2026-08-13 06:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 06:20:17 +0000 UTC FinishedAt: 2026-08-13 06:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:20:17 +0000 UTC FinishedAt: 2026-08-13 06:22:12 +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:*06519f69-9a22-4dc8-9736-5b0a8840eeb4,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-workflow6r7bc/series-workflow6r7bc-build-action-2869672150/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-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 09:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 09:25:57 +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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"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:*6368fce4-7942-432f-adb0-b91169167f9e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06519f69-9a22-4dc8-9736-5b0a8840eeb4,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-workflow6r7bc/series-workflow6r7bc-build-action-359146665/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-workflow6r7bc/series-workflow6r7bc-build-action-2869672150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 06:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 06:22:52 +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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"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-workflow6r7bc/series-workflow6r7bc-convert-artifact-172165047/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 06:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 06:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:22:22 +0000 UTC FinishedAt: 2026-08-13 06:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:23:11 +0000 UTC FinishedAt: 2026-08-13 09:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6r7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["nested_vmx_enter_non_root_mode","nested_vmx_check_restored_vmcs12","vmx_handle_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"952ff59d-4a61-444b-85f2-85b2070993a3","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-08-13 06:23:11 +0000 UTC FinishedAt: 2026-08-13 09:25:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6368fce4-7942-432f-adb0-b91169167f9e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06519f69-9a22-4dc8-9736-5b0a8840eeb4,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-workflow6r7bc/series-workflow6r7bc-build-action-359146665/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-workflow6r7bc/series-workflow6r7bc-build-action-2869672150/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-workflow6r7bc/series-workflow6r7bc-convert-artifact-172165047/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,}