Name: series-workflowfbt6d Phase: Succeeded StartedAt: 2026-08-07 14:10:28 +0000 UTC FinishedAt: 2026-08-07 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[0] Phase: Succeeded StartedAt: 2026-08-07 14:10:28 +0000 UTC FinishedAt: 2026-08-07 14:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 14:10:28 +0000 UTC FinishedAt: 2026-08-07 14:33:12 +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": "c6e127b88c34edb335186d49d5edaed369e97a34", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_SMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "c6e127b88c34edb335186d49d5edaed369e97a34", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_SMM" ], "series_id": "e4d4acba-da47-4013-b475-78c478bd1c25" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_page_fault", "x86_emulate_instruction" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgd2F5IEtWTSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBnZW5lcmF0aW9uIGZvciBhIHZDUFUsIHN3aXRjaGluZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgLiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlIChlLmcuLCBTTU0gdnMgbm9uLVNNTSkgaXMgdXNlZCB3aGVuIGNhY2hpbmcgTU1JTyBpbmZvIG9yIG1hdGNoaW5nIHRoZSBNTUlPIGdlbmVyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBpbnZvbHZlIGluY29ycmVjdCBjYWNoaW5nIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIEtWTSB4ODYgTU1JTyBjYWNoaW5nIHRvIHVzZSB0aGUgdkNQVSYjMzk7cyBjdXJyZW50IG1lbXNsb3RzICh3aGljaCBhY2NvdW50cyBmb3IgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAvIFNNTSBhZGRyZXNzIHNwYWNlcykgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgbWVtc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0gTU1JTyBoYW5kbGluZyBhbmQgcGFnZSBmYXVsdCBlbXVsYXRpb24gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGd1ZXN0IFZNLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2MDRjMzZiMmVlNDUyMTg2ZWFiNGFjNTBkMjJjNmMxNmUwZGNlMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE0OjI5OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdGd2YV90IGd2YSwgZ2ZuX3QgZ2ZuLCB1bnNpZ25lZCBhY2Nlc3MpXG4ge1xuLVx0dTY0IGdlbiA9IGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlZ2VuZXJhdGlvbjtcbiYjNDM7XHR1NjQgZ2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbiBcbiBcdGlmICh1bmxpa2VseShnZW4gXHUwMDI2IEtWTV9NRU1TTE9UX0dFTl9VUERBVEVfSU5fUFJPR1JFU1MpKVxuIFx0XHRyZXR1cm47XG5AQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlZ2VuZXJhdGlvbjtcbiYjNDM7XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVx1MDAzZWdlbmVyYXRpb247XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJiMzOTtzIGN1cnJlbnQgbWVtc2xvdHMgKHdoaWNoIGFjY291bnRzIGZvciBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIC8gU01NIGFkZHJlc3Mgc3BhY2VzKSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgZGVmYXVsdCBtZW1zbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSBNTUlPIGhhbmRsaW5nIGFuZCBwYWdlIGZhdWx0IGVtdWxhdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGEgZ3Vlc3QgVk0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYwNGMzNmIyZWU0NTIxODZlYWI0YWM1MGQyMmM2YzE2ZTBkY2UzNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTQ6Mjk6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJZ3ZhX3QgZ3ZhLCBnZm5fdCBnZm4sIHVuc2lnbmVkIGFjY2VzcykKIHsKLQl1NjQgZ2VuID0ga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb247CiYjNDM7CXU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIAogCWlmICh1bmxpa2VseShnZW4gJmFtcDsgS1ZNX01FTVNMT1RfR0VOX1VQREFURV9JTl9QUk9HUkVTUykpCiAJCXJldHVybjsKQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LSZndDthcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LSZndDtrdm0pLSZndDtnZW5lcmF0aW9uOwomIzQzOwlyZXR1cm4gdmNwdS0mZ3Q7YXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MgoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcGxheWluZyBhcm91bmQgaW4gYGFyY2gveDg2L2t2bS94ODYuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpdCYjMzk7cyBhIHN0cnVjdHVyYWwgY2hhbmdlLCBhbmQgdGhhdCBtZWFucyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gVGhleSYjMzk7cmUgdG91Y2hpbmcgaG93IG1lbW9yeSBzbG90IGdlbmVyYXRpb25zIGFyZSBhY2Nlc3NlZCB3aXRoaW4gdGhlIEtWTSB4ODYgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgYWNjZXNzb3IgaW4gYHZjcHVfY2FjaGVfbW1pb19pbmZvYCBhbmQgYHZjcHVfbWF0Y2hfbW1pb19nZW5gIGZyb20gdGhlIGRpcmVjdCBga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb25gIHRvIHRoZSBmdW5jdGlvbiBjYWxsIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbmAuIEZ1bmN0aW9uIGNhbGxzIGFyZSB0eXBpY2FsbHkgcHJlZmVycmVkIGZvciBlbmNhcHN1bGF0aW9uIG9yIHBvdGVudGlhbGx5IGZvciBmdXR1cmUgZmxleGliaWxpdHkuIEkmIzM5O20gd29uZGVyaW5nIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVlcGx5IGV4YW1pbmUgdGhlIGNvbnRleHRzIHdoZXJlIGB2Y3B1X2NhY2hlX21taW9faW5mb2AgYW5kIGB2Y3B1X21hdGNoX21taW9fZ2VuYCBhcmUgdXNlZC4gSSBoYXZlIHRvIGFzc2VzcyBpZiB0aGlzIG1vZGlmaWNhdGlvbiBpcyBtZXJlbHkgY29zbWV0aWMgYW5kIGltcHJvdmluZyBjb2RlIHJlYWRhYmlsaXR5LCBvciBpZiBpdCBpbmRpY2F0ZXMgYSBtb3JlIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGdlbmVyYXRpb24gbnVtYmVyIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBpcyB1c2VkIGluIHRoZSBNTUlPIHBhdGguIFRoZSBjaGFuZ2Ugc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGNoYW5nZSBpbiBob3cgdGhlIHZpcnR1YWwgQ1BVIGludGVyYWN0cyB3aXRoIGl0cyBtZW1vcnkuIEkgaGF2ZSB0byBlbnN1cmUgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9jYWNoZV9tbWlvX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9MzU2Mj1zdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM1NzItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM1NzM6XHR2Y3B1X2NhY2hlX21taW9faW5mbyh2Y3B1LCBndmEsIGZhdWx0LVx1MDAzZWdmbixcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU3NC1cdFx0XHQgICAgIGFjY2VzcyBcdTAwMjYgc2hhZG93X21taW9fYWNjZXNzX21hc2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDUwMj1zdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI0LVx0XHR0cmFjZV9oYW5kbGVfbW1pb19wYWdlX2ZhdWx0KGFkZHIsIGdmbiwgYWNjZXNzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUyNTpcdFx0dmNwdV9jYWNoZV9tbWlvX2luZm8odmNwdSwgYWRkciwgZ2ZuLCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI2LVx0XHRyZXR1cm4gUkVUX1BGX0VNVUxBVEU7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTMwOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zMTItXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzEzOnN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzE0LVx0XHRcdFx0XHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjcHVfbWF0Y2hfbW1pb19nZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuaD0zMTM9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMwLVxuYXJjaC94ODYva3ZtL3g4Ni5oOjMzMTpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2dlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMyLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzUwPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzUxLXtcbmFyY2gveDg2L2t2bS94ODYuaDozNTI6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2dlbih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLm1taW9fZ3ZhIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1My1cdCAgICAgIHZjcHUtXHUwMDNlYXJjaC5tbWlvX2d2YSA9PSAoZ3ZhIFx1MDAyNiBQQUdFX01BU0spKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zNTk9c3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzYwLXtcbmFyY2gveDg2L2t2bS94ODYuaDozNjE6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2dlbih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2ZuIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5oLTM2Mi1cdCAgICAgIHZjcHUtXHUwMDNlYXJjaC5tbWlvX2dmbiA9PSBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMQoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEtWTSB4ODYgTU1JTyBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgYHZjcHVfY2FjaGVfbW1pb19pbmZvYCBhbmQgYHZjcHVfbWF0Y2hfbW1pb19nZW5gIGZ1bmN0aW9ucy4gU3RyYWlnaHQgYXdheSwgSSBzZWUgdGhleSYjMzk7cmUgZGVmaW5lZCBpbmxpbmUgd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGV5JiMzOTtyZSBwcm9iYWJseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgZGVzaWduZWQgZm9yIGlubGluaW5nIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuCgpOb3csIHdoZXJlIGFyZSB0aGV5ICp1c2VkKj8gSSYjMzk7bSBzZWVpbmcgdGhhdCBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGdldHMgY2FsbGVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIHNwZWNpZmljYWxseSBpbiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGFuZCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAuIEdpdmVuIHRob3NlIGZ1bmN0aW9uIG5hbWVzLCBpdCYjMzk7cyBjbGVhciB0aGF0IGB2Y3B1X2NhY2hlX21taW9faW5mb2AgaXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgTWVtb3J5LU1hcHBlZCBJL08gKE1NSU8pIGZhdWx0cyDigJMgYSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZ3Vlc3QtdG8taG9zdCBNTVUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbiB0aGUgTU1VIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgbGlrZWx5IGJlaW5nIHVzZWQgdG8gY2hlY2sgaWYgdGhlIE1NSU8gYWNjZXNzIGlzIGNhY2hlZCwgYW5kIGlmIG5vdCwgdG8gdXBkYXRlIHRoZSBjYWNoZSB3aXRoIGluZm9ybWF0aW9uLgoKVGhlbiB0aGVyZSYjMzk7cyBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHZjcHVfbWF0Y2hfbW1pb19ndmFgIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dwYWAgYWxzbyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IG1hdGNoIGEgR3Vlc3QgVmlydHVhbCBBZGRyZXNzIChHVkEpIG9yIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgKEdQQSkgdG8gYW4gTU1JTyByZWdpb24uIFNvLCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgaXMgcHJvYmFibHkgYSBjb3JlIG1hdGNoaW5nIGNvbXBvbmVudC4KSSYjMzk7bSBndWVzc2luZyB0aGUgZ2VuZXJhbCBpZGVhIGlzIHRoaXM6IFdoZW4gYSBndWVzdCBhY2Nlc3NlcyBhbiBNTUlPIHJlZ2lvbiwgdGhlcmUgbmVlZHMgdG8gYmUgYSBjaGVjayBmb3Igd2hldGhlciB0aGUgZ2l2ZW4gbWVtb3J5IGFjY2VzcyBpcyBhY3R1YWxseSBhbiBNTUlPIHJlcXVlc3QuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGNsZWFybHkgZXNzZW50aWFsIGluIHRoYXQgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIHRoZXkmIzM5O3JlIHVzZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgTU1JTyBoYW5kbGluZyBsb2dpYywgYnV0IHRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjcHVfbWF0Y2hfbW1pb19ndmEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDQwND1zdGF0aWMgYm9vbCBtbWlvX2luZm9faW5fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDE1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NDE2Olx0cmV0dXJuIHZjcHVfbWF0Y2hfbW1pb19ndmEodmNwdSwgYWRkcik7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0MTctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MDY0PXN0YXRpYyBpbnQgdmNwdV9tbWlvX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA3Ni1cdCAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNzc6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2d2YSh2Y3B1LCBndmEpIFx1MDAyNlx1MDAyNiAoIWlzX3BhZ2luZyh2Y3B1KSB8fFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNzgtXHQgICAgIXBlcm1pc3Npb25fZmF1bHQodmNwdSwgdmNwdS1cdTAwM2VhcmNoLndhbGtfbW11LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zNDI9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2xlYXJfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zNDktXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzUwOnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X21hdGNoX21taW9fZ3BhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0MDQ9c3RhdGljIGJvb2wgbW1pb19pbmZvX2luX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQxMy1cdGlmIChkaXJlY3QpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ0MTQ6XHRcdHJldHVybiB2Y3B1X21hdGNoX21taW9fZ3BhKHZjcHUsIGFkZHIpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDE1LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MDQ5PXN0YXRpYyBpbnQgdmNwdV9pc19tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MDU1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNTY6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2dwYSh2Y3B1LCBncGEpKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODA1Ny1cdFx0dHJhY2VfdmNwdV9tYXRjaF9tbWlvKGd2YSwgZ3BhLCB3cml0ZSwgdHJ1ZSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTM1MD1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2d2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zNTgtXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzU5OnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuYXJjaC94ODYva3ZtL3g4Ni5oLTM2MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NQoJCQkJCQkJb3V0cHV0OiA4OQoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gTU1JTyBDYWNoaW5nIFBhdGNoIGFuZCBJZGVudGlmeWluZyBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBob3cgS1ZNIGhhbmRsZXMgTU1JTyBnZW5lcmF0aW9uIGNhY2hpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHVzaW5nIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAgaW5zdGVhZCBvZiBga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSlgLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbiwgbGlrZWx5IHRpZWQgdG8gc2NlbmFyaW9zIHdoZXJlIHdlIGhhdmUgbXVsdGlwbGUgYWRkcmVzcyBzcGFjZXMsIGxpa2Ugd2l0aCBTTU0gdnMuIHRoZSBub3JtYWwgZXhlY3V0aW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSBtYWtpbmcgdGhpcyBjaGFuZ2U7IGl0JiMzOTtzIGxpa2VseSBhIG1vcmUgcHJlY2lzZSBvciBlZmZpY2llbnQgd2F5IHRvIG1hbmFnZSB0aGUgbWVtb3J5IHNsb3QgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gdkNQVS4KClRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIGB2Y3B1X2NhY2hlX21taW9faW5mb2AgYW5kIGB2Y3B1X21hdGNoX21taW9fZ2VuYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5oYCwgYW5kIHRoZXkgYXJlIGNhbGxlZCBieSBzZXZlcmFsIHJvdXRpbmVzIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYG1taW9faW5mb19pbl9jYWNoZWAsIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAsIGFuZCBgdmNwdV9pc19tbWlvX2dwYWAuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCB0aG9zZSBmdW5jdGlvbnMgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpTcGVjaWZpY2FsbHksIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYHZjcHVfbW1pb19ndmFfdG9fZ3BhYCwgYW5kIGB2Y3B1X2lzX21taW9fZ3BhYCBhcmUgYWxsIHByaW1lIGNhbmRpZGF0ZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBga3ZtX3ZjcHVfbWVtc2xvdHNgIGlzIGRlZmluZWQgY29ycmVjdGx5LCBJIHNob3VsZCBjaGVjayB0aGF0IGluIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLiBUaGUgS1ZNIGNvbmZpZyBvcHRpb24gaXMgc2V0LCB0aGF0JiMzOTtzIGdvb2QuCgpBbHJpZ2h0LCB0aGUgbmV4dCB0aGluZyBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmUgb3Igc3RhdGljLiBSZW1lbWJlciwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgc29saWQgQVBJIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0byBiZSBlZmZlY3RpdmUuIExldCYjMzk7cyBzZWUuLi4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBhbmQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgIGFyZSAqc3RhdGljKiBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgcHJvYmxlbSBzaW5jZSBJIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBUaGF04oCZcyBwcm9iYWJseSBub3Qgd2hhdCBJIHNob3VsZCB0YXJnZXQuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cCwgYW5kIGZpbmQgdGhlICpjYWxsZXJzKiBvZiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAuIEkgbmVlZCB0byB0cmFjayB0aGUgY29udHJvbCBmbG93IGZyb20gdGhlIEFQSSBlbnRyeXBvaW50cywgaW5zdGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX21taW9fcGFnZV9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NDYxPXN0YXRpYyBib29sIGdldF9tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgdTY0ICpzcHRlcClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MDEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MDI6c3RhdGljIGludCBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTAzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MjQ6XHRcdHRyYWNlX2hhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoYWRkciwgZ2ZuLCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI1LVx0XHR2Y3B1X2NhY2hlX21taW9faW5mbyh2Y3B1LCBhZGRyLCBnZm4sIGFjY2Vzcyk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTE2PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NDMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1NDQ6XHRcdHIgPSBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHZjcHUsIGNyMl9vcl9ncGEsIGRpcmVjdCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NDUtXHRcdGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU3Mi1cdC8qXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1NzM6XHQgKiBOb25lIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCksIG9yXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NzQtXHQgKiBrdm1fbW11X3dyaXRlX3Byb3RlY3RfZmF1bHQoKSByZXR1cm4gUkVUX1BGX0NPTlRJTlVFLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX25vc2xvdF9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNTM5PXN0YXRpYyBpbnQga3ZtX2hhbmRsZV9lcnJvcl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU2MS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzU2MjpzdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU2My1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NzAxPXN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzI5LVx0aWYgKHVubGlrZWx5KCFzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDczMDpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzMxLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc1OC1cdFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3NTk6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzYwLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDgwMi1cdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDgwMzpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQzCgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIEVudHJ5cG9pbnQqKgoKQWxyaWdodCwgc28gYGt2bV9tbXVfcGFnZV9mYXVsdGAgaXMgYSBjcml0aWNhbCBlbnRyeXBvaW50IGZ1bmN0aW9uIGFuZCwgaW1wb3J0YW50bHksIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgdG8gYnJvYWRlciB1c2UuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgaW1tZWRpYXRlIGNvbnRleHQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyAqdXNlZCouIFRpbWUgdG8gdHJhY2Ugd2hlcmUgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGltcGxpY2F0aW9ucyB3aGVuIHRoYXQgZmF1bHQgb2NjdXJzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAgYW5kIGB2Y3B1X2lzX21taW9fZ3BhYCwgYXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBwYWdlIGZhdWx0LCBzaG91bGQgYmUgaWxsdW1pbmF0aW5nLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHNob3cgbWUgd2hlcmUgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmF1bHQgaXMgYmVpbmcgdHJpZ2dlcmVkLCBhbGxvd2luZyBtZSB0byBzdGFydCBjb25zdHJ1Y3RpbmcgYSBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgcmlza3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9tbWlvX2d2YV90b19ncGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTgwNDk9c3RhdGljIGludCB2Y3B1X2lzX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjMtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODA2NDpzdGF0aWMgaW50IHZjcHVfbW1pb19ndmFfdG9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA2NS1cdFx0XHRcdGdwYV90ICpncGEsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgxMjA9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDMtXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3g4Ni5jOjgxNDQ6XHRcdHJldCA9IHZjcHVfbW1pb19ndmFfdG9fZ3BhKHZjcHUsIGFkZHIsIFx1MDAyNmdwYSwgZXhjZXB0aW9uLCB3cml0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODE0NS1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9pc19tbWlvX2dwYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9ODA0Nz1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoaGFuZGxlX3VkKTtcbmFyY2gveDg2L2t2bS94ODYuYy04MDQ4LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNDk6c3RhdGljIGludCB2Y3B1X2lzX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA1MC1cdFx0XHQgICAgZ3BhX3QgZ3BhLCBib29sIHdyaXRlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MDY0PXN0YXRpYyBpbnQgdmNwdV9tbWlvX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA5MC1cbmFyY2gveDg2L2t2bS94ODYuYzo4MDkxOlx0cmV0dXJuIHZjcHVfaXNfbW1pb19ncGEodmNwdSwgZ3ZhLCAqZ3BhLCB3cml0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODA5Mi19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgxMjA9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDEtXHRcdGdwYSA9IGN0eHQtXHUwMDNlZ3BhX3ZhbDtcbmFyY2gveDg2L2t2bS94ODYuYzo4MTQyOlx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDMtXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgKioKCk9rYXksIHNvIEkgc2VlIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGhhcyBmaWxlLXNjb3BlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHVzZSBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJiMzOTtzIGNhbGxpbmcgdGhpcyB0aGluZy4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgd2lsbCByZXZlYWwgaXRzIHJvbGUgYW5kIGNvbnRleHQgd2l0aGluIHRoZSBlbXVsYXRvcuKAmXMgYXJjaGl0ZWN0dXJlLiBUaGlzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgbW9kaWZ5aW5nLCBvciBzaW1wbHkgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGZpbmQgdGhvc2UgY2FsbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9ODEwOD1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTE5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxMjA6c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG5hcmNoL3g4Ni9rdm0veDg2LmMtODEyMS1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgxOTU9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MjM2LVx0XHRub3cgPSAtYWRkciBcdTAwMjYgflBBR0VfTUFTSztcbmFyY2gveDg2L2t2bS94ODYuYzo4MjM3Olx0XHRyYyA9IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZShhZGRyLCB2YWwsIG5vdywgZXhjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMzgtXHRcdFx0XHRcdFx0IHZjcHUsIG9wcyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyNDgtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI0OTpcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcbmFyY2gveDg2L2t2bS94ODYuYy04MjUwLVx0XHRcdFx0XHQgdmNwdSwgb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX3JlYWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTgxMDg9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODExOS1cbmFyY2gveDg2L2t2bS94ODYuYzo4MTIwOnN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxMjEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTk0LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxOTU6c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxOTYtXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MjM2LVx0XHRub3cgPSAtYWRkciBcdTAwMjYgflBBR0VfTUFTSztcbmFyY2gveDg2L2t2bS94ODYuYzo4MjM3Olx0XHRyYyA9IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZShhZGRyLCB2YWwsIG5vdywgZXhjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMzgtXHRcdFx0XHRcdFx0IHZjcHUsIG9wcyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyNDgtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI0OTpcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcbmFyY2gveDg2L2t2bS94ODYuYy04MjUwLVx0XHRcdFx0XHQgdmNwdSwgb3BzKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODI3ND1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyODUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI4NjpcdHJldHVybiBlbXVsYXRvcl9yZWFkX3dyaXRlKGN0eHQsIGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbiwgXHUwMDI2b3BzKTtcbmFyY2gveDg2L2t2bS94ODYuYy04Mjg3LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODI4OT1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MzAwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgzMDE6XHRyZXR1cm4gZW11bGF0b3JfcmVhZF93cml0ZShjdHh0LCBhZGRyLCAodm9pZCAqKXZhbCwgYnl0ZXMsIGV4Y2VwdGlvbiwgXHUwMDI2b3BzKTtcbmFyY2gveDg2L2t2bS94ODYuYy04MzAyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBLVk0gTU1JTyBHZW5lcmF0aW9uIENhY2hpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byB0aGUgS1ZNIE1NSU8gZ2VuZXJhdGlvbiBjYWNoaW5nLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBgeDg2X2VtdWxhdGVfb3BzYCBhcyBhIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkgc2VlIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmUgYXJlIGBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkYCBhbmQgYGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkYCwgd2hpY2ggYXJlLCBvZiBjb3Vyc2UsIHVzZWQgd2l0aGluIHRoYXQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlICpkaXJlY3RseSogaW52b2x2ZWQgaW4gdGhlIE1NSU8gcGF0aCwgYW5kIHRodXMsIGhpZ2hseSBsaWtlbHkgdG8gYmUgaW1wYWN0ZWQgYnkgdGhlc2UgY2FjaGluZyBtb2RpZmljYXRpb25zLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgbG9vayBsaWtlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiBoYW5kbGluZyBtZW1vcnkgYWNjZXNzIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gcmVzcGVjdGl2ZWx5LgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Npbmcgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgY291bGQgdHJpZ2dlciBvciBiZSBhZmZlY3RlZCBieSB0aGUgTU1JTyBjYWNoaW5nIHN0cmF0ZWd5LiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGluaXRpYWwgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTgxOTU9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MjY4LVx0ICogYWZ0ZXIgY29tcGxldGluZyBlbXVsYXRpb24gKHNlZSB0aGUgY2hlY2sgb24gdmNwdS1cdTAwM2VtbWlvX25lZWRlZCBpblxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyNjk6XHQgKiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpKS5cbmFyY2gveDg2L2t2bS94ODYuYy04MjcwLVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk0MTk9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MjAtXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQyMTppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MjItXHRcdFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05NjQxPWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSlcbmFyY2gveDg2L2t2bS94ODYuYy05NjQyLXtcbmFyY2gveDg2L2t2bS94ODYuYzo5NjQzOlx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIGVtdWxhdGlvbl90eXBlLCBOVUxMLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy05NjQ0LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTY0Nz1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05NjQ5LXtcbmFyY2gveDg2L2t2bS94ODYuYzo5NjUwOlx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIGluc24sIGluc25fbGVuKTtcbmFyY2gveDg2L2t2bS94ODYuYy05NjUxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1NSU8gQ2FjaGluZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIEtWTSYjMzk7cyBNTUlPIGNhY2hpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuaGAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHR3ZWFraW5nIGhvdyB0aGUgYGdlbmVyYXRpb25gIGNvdW50ZXIgZm9yIE1NSU8gbWVtc2xvdHMgaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBzd2l0Y2hpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb25gIHRvIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbmAuIFRoaXMgaXMgcHJldHR5IGNyaXRpY2FsIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB3aGljaCBtZW1vcnkgc2xvdHMgYXJlIGNvbnNpZGVyZWQgd2hlbiB0aGUgS1ZNIGNoZWNrcyB0byBzZWUgaWYgTU1JTyBhY2Nlc3NlcyBjYW4gYmUgY2FjaGVkLgoKTXkgaW1tZWRpYXRlIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgb3JpZ2luYWwgYXBwcm9hY2gsIHVzaW5nIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAsIHdhcyBsaWtlbHkgcmVmZXJlbmNpbmcgdGhlIGRlZmF1bHQgYWRkcmVzcyBzcGFjZSYjMzk7cyBtZW1zbG90cyAoYWRkcmVzcyBzcGFjZSAwKS4gVGhlIG5ldyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGNhbGwgaXMgbXVjaCBiZXR0ZXIgYmVjYXVzZSBpdCBwcm92aWRlcyB0aGUgbWVtc2xvdHMgc3BlY2lmaWMgdG8gdGhlIHZDUFUmIzM5O3MgKmN1cnJlbnQqIGFkZHJlc3Mgc3BhY2UsIHdoaWNoIGNvdWxkIGJlIFNNTSBvciBub3JtYWwuIFRoaXMgcmVzb2x2ZXMgd2hhdCBJIGltbWVkaWF0ZWx5IGFzc3VtZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgTU1JTyBnZW5lcmF0aW9uIGNoZWNrIHdhcyBjb21wYXJpbmcgYWdhaW5zdCB0aGUgd3JvbmcgbWVtb3J5IHJlZ2lvbiYjMzk7cyBnZW5lcmF0aW9uIGNvdW50LCB3aGljaCB3b3VsZCBiZSByZWFsbHkgbmFzdHkuCgpDb25zaWRlcmluZyBRRU1VJiMzOTtzIGhlYXZ5IHJlbGlhbmNlIG9uIEtWTSwgdGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGltcGFjdHMgcmVhbC13b3JsZCBkZXBsb3ltZW50cy4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiBjb3JlIE1NSU8gaGFuZGxpbmcsIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIGZ1enppbmcgZWZmb3J0cyB0byBpdC4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgZGlnIGludG8gYXJlYXMgd2hlcmUgdGhpcyBmaXggaXMgY3JpdGljYWwuCgpUbyB0aGF0IGVuZCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGt2bV92Y3B1X21lbXNsb3RzYCBzbyBJIGNhbiB1bmRlcnN0YW5kIGl0cyBmdWxsIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzOiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAsIGB2Y3B1X2lzX21taW9fZ3BhYCwgYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAsIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBUaGVzZSBhcmUgYWxsIHBvdGVudGlhbCBob3Qgc3BvdHMgcmVsYXRlZCB0byBNTUlPIGhhbmRsaW5nIHdoZXJlIHRoaXMgY291bGQgaGF2ZSBhIHZpc2libGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9tZW1zbG90cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTA4Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtc2xvdHMgKmt2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEwOTEtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTA5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtc2xvdHMgKmt2bV92Y3B1X21lbXNsb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMDkzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTIxOT1zdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpnZm5fdG9fbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTIyMDpzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyMjEtc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rdm1faG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqa3ZtX21lbXNsb3RzKHN0cnVjdCBrdm0gKmt2bSlcbjEwODg6XHR7XG4xMDg5Olx0XHRyZXR1cm4gX19rdm1fbWVtc2xvdHMoa3ZtLCAwKTtcbjEwOTA6XHR9XG4xMDkxOlx0XG4xMDkyOlx0c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4xMDkzOlx0e1xuMTA5NDpcdFx0aW50IGFzX2lkID0ga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KTtcbjEwOTU6XHRcbjEwOTY6XHRcdHJldHVybiBfX2t2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSwgYXNfaWQpO1xuMTA5NzpcdH1cbjEwOTg6XHRcbjEwOTk6XHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RzX2VtcHR5KHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzKVxuMTEwMDpcdHtcbjExMDE6XHRcdHJldHVybiBSQl9FTVBUWV9ST09UKFx1MDAyNnNsb3RzLVx1MDAzZWdmbl90cmVlKTtcbjExMDI6XHR9XG4xMTAzOlx0XG4xMTA0Olx0Ym9vbCBrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShzdHJ1Y3Qga3ZtICprdm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNTUlPIENhY2hpbmcgRml4IGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBga3ZtX3ZjcHVfbWVtc2xvdHNgIGxldmVyYWdlcyBga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KWAuIEFuZCBvbiB4ODYsIHRoaXMgcmV0dXJucyB0aGUgU01NIGFkZHJlc3Mgc3BhY2UgSUQgaWYgdGhlIHZDUFUgaXMgaW4gU01NIG1vZGUsIG90aGVyd2lzZSBpdCByZXR1cm5zIHplcm8uIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgTU1JTyBjYWNoaW5nIHNwZWNpZmljYWxseSBpbiB0aGUgU01NIHN0YXRlLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIEkgbWVhbiwgYW55IGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIG1vZGUgbGlrZSBTTU0sIHNjcmVhbXMgZm9yIHRob3JvdWdoIHRlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gc29tZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW1tZWRpYXRlbHkganVtcCBvdXQuIFRob3NlIGFyZSBhbGwga2V5IGNvbXBvbmVudHMgaW4gaGFuZGxpbmcgbWVtb3J5IGFjY2VzcyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgoKSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGFuZCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAuLi4gVGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhleSBhcmUgc3Vic3RhbnRpYWwuIEkgcmVhbGx5IG5lZWQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGlubGluZWQgb3Igbm90LiBUaGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nIGRpZmZlciBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBJZiB0aGV5IGFyZSBpbmxpbmVkLCBmdXp6aW5nIGJlY29tZXMgbW9yZSBjb21wbGV4OyBpZiBub3QsIHRoZXkgYmVjb21lIGV4Y2VsbGVudCBlbnRyeSBwb2ludHMgZm9yIGFuYWx5c2lzIGFuZCBkaXJlY3RlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfbW1pb19wYWdlX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0NjE9c3RhdGljIGJvb2wgZ2V0X21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVwKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUwMS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUwMjpzdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MDMte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUyMy1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUyNDpcdFx0dHJhY2VfaGFuZGxlX21taW9fcGFnZV9mYXVsdChhZGRyLCBnZm4sIGFjY2Vzcyk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjUtXHRcdHZjcHVfY2FjaGVfbW1pb19pbmZvKHZjcHUsIGFkZHIsIGdmbiwgYWNjZXNzKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1MTY9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU0My1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU0NDpcdFx0ciA9IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQodmNwdSwgY3IyX29yX2dwYSwgZGlyZWN0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU0NS1cdFx0aWYgKHIgPT0gUkVUX1BGX0VNVUxBVEUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTcyLVx0LypcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU3MzpcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU3NC1cdCAqIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdCgpIHJldHVybiBSRVRfUEZfQ09OVElOVUUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0gRmF1bHQgSGFuZGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZmF1bHQgaGFuZGxlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIGV4ZWN1dGlvbiBjaGFyYWN0ZXJpc3RpY3MuIFRoZSBmdW5jdGlvbiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGFsc28gbm90IGlubGluZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFya3MgaXQgYXMgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGltcG9ydGFudCwgYSBnb29kIHRhcmdldCBmb3IgZGVlcGVyIGluc3BlY3Rpb24uIFNpbWlsYXJseSwgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBpcyBhbHNvIHN0YXRpYyBhbmQgbm90IGlubGluZWQsIHdoaWNoIHJhaXNlcyBhIHJlZCBmbGFnLiBXb3J0aCBpbnZlc3RpZ2F0aW5nIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGVyZS4KCk5vdywgYGt2bV9tbXVfcGFnZV9mYXVsdGAgaXMgZGVsaWJlcmF0ZWx5IG1hcmtlZCBgbm9pbmxpbmVgLCB3aGljaCBtZWFucyB3ZSYjMzk7dmUgZ290IGEgZGVmaW5pdGUgcG9pbnQgb2YgZW50cnkgdG8gZXhhbWluZS4gIEl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGlubGluZWQgaW50byBhbnkgY2FsbGluZyBjb250ZXh0LCBtZWFuaW5nIHdlIGNhbiBhbmFseXplIGl0IGFzIGEgZGlzY3JldGUgdW5pdC4KCkFuZCB0aGVuIHdlIGhhdmUgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYC4gVGhpcyBvbmUmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBLVk0gQVBJLCBtYWtpbmcgaXQgYW5vdGhlciBjcnVjaWFsIHBvaW50IG9mIGZvY3VzLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgbW9yZSBjb21wbGV4IGluc3RydWN0aW9uIGVtdWxhdGlvbiwgYW5kIHRoYXQgZW11bGF0aW9uIGNhbiBiZSBleHBlbnNpdmUsIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdGhhdCBuZWVkcyBzb21lIGNvbnNpZGVyYXRpb24uCgpTbywgdG8gc3VtbWFyaXplIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBJIG5lZWQgdG8gbG9vayBpbnRvIGFyZToKCiogICBga3ZtX21tdV9wYWdlX2ZhdWx0YAoqICAgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYAoqICAgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YAoqICAgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgCgpHaXZlbiB0aGlzLCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgS1ZNYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGRyaXZlcyB0aGVzZSBzeW1ib2xzLCBtYWtpbmcgc3VyZSB0aGF0IGl0JiMzOTtzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBTTU0gQ29udGV4dCoqCgpBbHJpZ2h0LCB0aGlzIHBhdGNoLi4uIGl0JiMzOTtzIGRlZmluaXRlbHkgZ290IFNNTSB3cml0dGVuIGFsbCBvdmVyIGl0LiBTZWVpbmcgdGhlIHVzZSBvZiBga3ZtX3ZjcHVfbWVtc2xvdHNgIGltbWVkaWF0ZWx5IHJpbmdzIGFsYXJtIGJlbGxzLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24mIzM5O3MgZGVwZW5kZW5jZSBvbiBga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KWAgaXMgYSBkZWFkIGdpdmVhd2F5LCBhbmQgdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyB0aGUgU01NIGFkZHJlc3Mgc3BhY2UgSUQuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gd2hhdCBga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZGAgaXMgZG9pbmcuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTTU0gaXMgaW50ZWdyYXRlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gVGhpcyB3aWxsIGRlZmluaXRlbHkgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgY2hhbmdlcyBwcm9wb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzIwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOgoKKipMb2NhdGluZyB0aGUgS1ZNIE1lbW9yeSBTbG90IElEKioKCk9rYXksIGxldCBtZSB0aGluay4gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkYCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBIbW0sIHdoZXJlIHdvdWxkIHRoZXkgdHlwaWNhbGx5IHN0YXNoIHNvbWV0aGluZyBsaWtlIHRoYXQ/IEl0JiMzOTtzIHJlbGF0ZWQgdG8gS1ZNIGFyY2hpdGVjdHVyZSwgc28gSSBzaG91bGQgYmUgbG9va2luZyBpbiB0aGUgYGFyY2gveDg2YCBkaXJlY3RvcnksIHByb2JhYmx5IHVuZGVyIGBpbmNsdWRlL2FzbS9gLiBBbmQgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRvIGJlIGhvc3QtcmVsYXRlZC4gU28sIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9ob3N0LmhgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4gRmluZ2VycyBjcm9zc2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTI0Mzc9ZW51bSB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yNDUyLSMgZGVmaW5lIGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pID8gMSA6IDIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjI0NTM6IyBkZWZpbmUga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KSAoKHZjcHUpLVx1MDAzZWFyY2guaGZsYWdzIFx1MDAyNiBIRl9TTU1fTUFTSyA/IDEgOiAwKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yNDU0LSMgZGVmaW5lIGt2bV9tZW1zbG90c19mb3Jfc3B0ZV9yb2xlKGt2bSwgcm9sZSkgX19rdm1fbWVtc2xvdHMoa3ZtLCAocm9sZSkuc21tKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxOAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAxNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtWTSB4ODYgTU1JTyBIYW5kbGluZyB3aXRoIFNNTSBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoaXMgY29tbWl0IGlzIGNoYW5naW5nIGhvdyB0aGUgbWVtb3J5IHNsb3QgZ2VuZXJhdGlvbiBpcyByZXRyaWV2ZWQgZm9yIE1NSU8gY2FjaGluZyB3aXRoaW4gdGhlIEtWTSB4ODYgY29kZS4gIFByZXZpb3VzbHksIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKS0mZ3Q7Z2VuZXJhdGlvbmAgd2FzIGJlaW5nIHVzZWQsIGVmZmVjdGl2ZWx5IGFsd2F5cyByZXRyaWV2aW5nIGZyb20gYWRkcmVzcyBzcGFjZSAwLiBUaGUgY2hhbmdlIHVzZXMgYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLSZndDtnZW5lcmF0aW9uYCBpbnN0ZWFkLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCAqY29uc2lkZXJzKiB0aGUgdkNQVSYjMzk7cyBTTU0gbW9kZSBieSBjYWxsaW5nIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpYCwgd2hpY2ggcmV0dXJucyAxIGlmIGluIFNNTS4gU28sIGlmIHRoZSB2Q1BVIGlzIGluIFNNTSwgdGhlIHJlbGV2YW50IG1lbXNsb3QgSUQgaXMgMSwgb3RoZXJ3aXNlIGl0IGlzIDAuIFRoaXMgYWZmZWN0cyBNTUlPIGNhY2hpbmcsIGFuZCBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuICBDYW4gd2UgdHJpZ2dlciB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFic29sdXRlbHksIEtWTSAqaXMqIHRoZSBoeXBlcnZpc29yLiAgV2UmIzM5O3JlIGZ1enppbmcgdGhlIGtlcm5lbCwgd2hpY2ggY2FuIGJlIGFjdGluZyBhcyB0aGUgS1ZNIGhvc3QuIFN5emthbGxlciBoYXMgZXhjZWxsZW50IHN1cHBvcnQgZm9yIGZ1enppbmcgS1ZNLCBpbmNsdWRpbmcgY3JlYXRpbmcgVk1zIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0uIFdlIGNhbiBkZWZpbml0ZWx5IGhpdCB0aGlzIGNvZGUgcGF0aC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBvcHRpbWFsIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlIGhhdmUgc2V2ZXJhbCBvcHRpb25zIG1lbnRpb25lZDogYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCwgYGVtdWxhdG9yX3JlYWRfd3JpdGVgLCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLCBhbmQgYGt2bV9lbXVsYXRlX2luc3RydWN0aW9uYCBhbmQgYGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyYC4gIElkZWFsbHksIHdlJiMzOTtkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCYjMzk7cyBzZWUuLi4gSW5pdGlhbGx5LCBJIHdvdWxkIGhhdmUgc2VsZWN0ZWQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBzaW5jZSB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBNTUlPLiBCdXQsIHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBjYWxscyBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGFuZCBga3ZtX21tdV9mYXVsdGluX3BmbmAgY2FsbHMgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpcyBhbHNvIGEgZ29vZCBwb3NzaWJpbGl0eS4gTGV0JiMzOTtzIGRpZyBkZWVwZXI6CgpXZSBoYXZlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWdzIGFyZSBlbmFibGVkLiBTaW5jZSB0aGlzIGludm9sdmVzIFNNTSwgYEtWTV9TTU1gIGlzIG5lY2Vzc2FyeSwgYnV0IGBLVk1gIGlzIGZvdW5kYXRpb25hbCwgb2YgY291cnNlLiAgQSBxdWljayBjaGVjayBvZiBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmZpcm1zIGBLVk1fU01NYCAqZGVwZW5kcyogb24gYEtWTWAsIHNvIHdlJiMzOTtyZSBnb29kLgoKTGV0JiMzOTtzIGV2YWx1YXRlIHRoZSBjYW5kaWRhdGUgZW50cnkgcG9pbnRzLiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgaXMgc3RhdGljLCBidXQgbm90IGlubGluZS4gIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGNhbGxzIHRoaXMuIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgaXMgYWxzbyBzdGF0aWMuIEl0JiMzOTtzIGNhbGxlZCBieSBga3ZtX21tdV9mYXVsdGluX3BmbmAgKHN0YXRpYyksIGFuZCBpcyBjYWxsZWQgYnkgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGlzIG5vdCBzdGF0aWMuICBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rIHByb21pc2luZywgbGV0JiMzOTtzIGNoZWNrIHRoZWlyIGRlZmluaXRpb25zLgoKYGBgYwppbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsCmBgYApgYGBjCmludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsCgkJCSAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbikKYGBgCgpFeGNlbGxlbnQsIHRoZXkmIzM5O3JlIG5vdCBzdGF0aWMsIHNvIHdlIGNhbiBjb25zaWRlciB0aGVtIGFzIGVudHJ5cG9pbnRzLgoKVGhlIG90aGVyIGVudHJ5IHBvaW50IGBrdm1fbW11X2RvX3BhZ2VfZmF1bHRgIGlzIGlubGluZS4KClRoZXJlZm9yZSwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIHRoZSBiZXN0IGNob2ljZXMgZm9yIGZvY3VzIHN5bWJvbHMuCgpMb29raW5nIGF0IHRoZSBkaWZmIGFnYWluLCB0aGUgZml4IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBidWc6IE1NSU8gZ2VuZXJhdGlvbiBjYWNoaW5nIHdhcyB1c2luZyBtZW1zbG90cyBmcm9tIHRoZSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgaW5zdGVhZCBvZiB0aGUgdkNQVSYjMzk7cyBjdXJyZW50IHNwYWNlLCBlc3BlY2lhbGx5IGltcGFjdGluZyBTTU0uICBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UuICBHaXZlbiB0aGF0IHdlIGNhbiBleGVyY2lzZSB0aGlzIGNvZGUgd2l0aCBTeXprYWxsZXIsIHdoaWNoIGhhcyBleGNlbGxlbnQgS1ZNIHN1cHBvcnQsIGFuZCB3ZSBoYXZlIGlkZW50aWZpZWQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpcyEgTm93LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBLVk0geDg2IE1NSU8gY2FjaGluZyB0byB1c2UgdGhlIHZDUFUmIzM5O3MgY3VycmVudCBtZW1zbG90cyAod2hpY2ggYWNjb3VudHMgZm9yIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgLyBTTU0gYWRkcmVzcyBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBkZWZhdWx0IG1lbXNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNIE1NSU8gaGFuZGxpbmcgYW5kIHBhZ2UgZmF1bHQgZW11bGF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBndWVzdCBWTSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJiMzOTtzIGN1cnJlbnQgbWVtc2xvdHMgKHdoaWNoIGFjY291bnRzIGZvciBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIC8gU01NIGFkZHJlc3Mgc3BhY2VzKSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgZGVmYXVsdCBtZW1zbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSBNTUlPIGhhbmRsaW5nIGFuZCBwYWdlIGZhdWx0IGVtdWxhdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGEgZ3Vlc3QgVk0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHdheSBLVk0gcmV0cmlldmVzIHRoZSBtZW1vcnkgc2xvdHMgZ2VuZXJhdGlvbiBmb3IgYSB2Q1BVLCBzd2l0Y2hpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAoZS5nLiwgU01NIHZzIG5vbi1TTU0pIGlzIHVzZWQgd2hlbiBjYWNoaW5nIE1NSU8gaW5mbyBvciBtYXRjaGluZyB0aGUgTU1JTyBnZW5lcmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgaW52b2x2ZSBpbmNvcnJlY3QgY2FjaGluZyBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYwNGMzNmIyZWU0NTIxODZlYWI0YWM1MGQyMmM2YzE2ZTBkY2UzNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTQ6Mjk6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJZ3ZhX3QgZ3ZhLCBnZm5fdCBnZm4sIHVuc2lnbmVkIGFjY2VzcykKIHsKLQl1NjQgZ2VuID0ga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb247CiYjNDM7CXU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIAogCWlmICh1bmxpa2VseShnZW4gJmFtcDsgS1ZNX01FTVNMT1RfR0VOX1VQREFURV9JTl9QUk9HUkVTUykpCiAJCXJldHVybjsKQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LSZndDthcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LSZndDtrdm0pLSZndDtnZW5lcmF0aW9uOwomIzQzOwlyZXR1cm4gdmNwdS0mZ3Q7YXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1lbW9yeSBTbG90IEdlbmVyYXRpb24gRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gbnVtYmVyIHdpdGhpbiBLVk0mIzM5O3MgeDg2IGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCBpbiBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoZSBjb21taXQgbWVzc2FnZSBoaW50cyBhdCBhIHByb2JsZW0gcmVsYXRlZCB0byBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZ2VuZXJhdGlvbiBudW1iZXJzIGJlaW5nIHVzZWQsIHBvc3NpYmx5IHN0ZW1taW5nIGZyb20gU2VjdXJlIE1vZGUgTWFuYWdlbWVudCAoU01NKSBvciBtdWx0aXBsZSBhZGRyZXNzIHNwYWNlcyB3aXRoaW4gdGhlIFZNLgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBga3ZtX3ZjcHVfbWVtc2xvdHNgICpkb2VzKi4gTXkgZ3Vlc3MgaXMgdGhhdCBpdCBwcm9iYWJseSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBzdHJ1Y3R1cmUsIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAsIGJ1dCB3aXRoIHNvbWUgYWRkcmVzcyBzcGFjZSBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIHZDUFUmIzM5O3MgZmxhZ3MgLSBtYXliZSBpdCYjMzk7cyBjaGVja2luZyBgdmNwdS0mZ3Q7YXJjaC5oZmxhZ3NgIGZvciB0aGUgU01NIGJpdCBvciBzb21ldGhpbmcgc2ltaWxhci4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBhbGwgaXQmIzM5O3MgZG9pbmcgaXMgY2hhbmdpbmcgdGhlIHBvaW50ZXIgZGVyZWZlcmVuY2VkIHRvIGdldCB0aGUgbWVtc2xvdHMgZ2VuZXJhdGlvbi4gSSBoYWQgYSBxdWljayBtb21lbnQgb2YgY29uY2VybiBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gVGhlIHBhdGNoIGlzIHNpbXBseSBzZWxlY3RpbmcgYSBkaWZmZXJlbnQgbWVtc2xvdHMgc3RydWN0dXJlIGJhc2VkIG9uIHNvbWUgY29udGV4dCwgdGhlbiBncmFiYmluZyB0aGUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBpdC4KClRoaXMgaXMgYSBsb2dpYyBidWcgZml4LCB0aGVuLiBJdCYjMzk7cyBsaWtlbHkgcmVzb2x2aW5nIGEgZnVuY3Rpb25hbCBpc3N1ZS4gVGhlIGNoYW5nZSBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaW4gc2VsZWN0aW5nIHRoZSAqcmlnaHQqIG1lbXNsb3RzIGdlbmVyYXRpb24sIHdoaWNoIGNvdWxkIGhhdmUgbGVkIHRvIGEgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciwgbW9yZSBsaWtlbHksIGp1c3QgaW5jb3JyZWN0IGNhY2hpbmcgYW5kL29yIGJlaGF2aW9yLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgdGhlIGNvbnRyb2wgZmxvdyBhbHRlcmVkIHRvIGV4cG9zZSBzdWNoIG1lbW9yeSB0byBLTVNBTi4gTWVtb3J5IGNvcnJ1cHRpb24sIGlmIGl0IGV4aXN0ZWQsIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuIEtNU0FOIGlzbiYjMzk7dCB0aGUga2V5IGhlcmUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBzZWVtcyBhcHByb3ByaWF0ZS4KCk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV92Y3B1X21lbXNsb3RzYCBkZWZpbml0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X21lbXNsb3RzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMyNT1zdGF0aWMgYm9vbCBjaGVja19tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc3B0ZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMyOC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzI5Olx0Z2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzMwLVx0aWYgKHVubGlrZWx5KGdlbiBcdTAwMjYgS1ZNX01FTVNMT1RfR0VOX1VQREFURV9JTl9QUk9HUkVTUykpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9zcHRlLmM9OTQ9dTY0IG1ha2VfbW1pb19zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGdmbiwgdW5zaWduZWQgaW50IGFjY2VzcylcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jLTk1LXtcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jOjk2Olx0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVx1MDAzZWdlbmVyYXRpb24gXHUwMDI2IE1NSU9fU1BURV9HRU5fTUFTSztcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jLTk3LVx0dTY0IHNwdGUgPSBnZW5lcmF0aW9uX21taW9fc3B0ZV9tYXNrKGdlbik7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTMxMz1zdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zMTUte1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMxNjpcdHU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cdTAwM2VnZW5lcmF0aW9uO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTMxNy1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuaC0zMzIte1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMzMzpcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gubW1pb19nZW4gPT0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbmFyY2gveDg2L2t2bS94ODYuaC0zMzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkwCgkJCQkJCQlvdXRwdXQ6IDE2NgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgYm9pbHMgZG93biB0byB1c2luZyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGRpcmVjdGx5LCByZXBsYWNpbmcgdGhlIG9sZGVyIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAgYXBwcm9hY2guIFRoYXQmIzM5O3MgdGhlIGRpZmZlcmVuY2UsIHRoZSBzaW5nbGUgY2hhbmdlIHRoYXQmIzM5O3MgYmVpbmcgbWFkZS4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IE15IGluaXRpYWwgYW5hbHlzaXMgcG9pbnRzIHRoYXQgSSBhbSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgc3VnZ2VzdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBoZXJlLiBSaWdodCwgY29uZmlybWVkLiBUaHVzLCBJIHdpbGwgc3RhdGUgbXkgcmVhc29uaW5nIGZvciB0aGlzIGNvbmNsdXNpb24gaW4gdGhlIGNvbW1lbnRzIGZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LiBJbiBsaWdodCBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgIHRvIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UgKGUuZy4sIFNNTSB2cyBub24tU01NKSBpcyB1c2VkIHdoZW4gY2FjaGluZyBNTUlPIGluZm8gb3IgbWF0Y2hpbmcgdGhlIE1NSU8gZ2VuZXJhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGludm9sdmUgaW5jb3JyZWN0IGNhY2hpbmcgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZywgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgIHRvIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UgKGUuZy4sIFNNTSB2cyBub24tU01NKSBpcyB1c2VkIHdoZW4gY2FjaGluZyBNTUlPIGluZm8gb3IgbWF0Y2hpbmcgdGhlIE1NSU8gZ2VuZXJhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGludm9sdmUgaW5jb3JyZWN0IGNhY2hpbmcgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZywgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjI4LjMwMTY3OTE1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjA3MzgwNTQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVxcdTAwM2Vrdm0pYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgLiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlIChlLmcuLCBTTU0gdnMgbm9uLVNNTSkgaXMgdXNlZCB3aGVuIGNhY2hpbmcgTU1JTyBpbmZvIG9yIG1hdGNoaW5nIHRoZSBNTUlPIGdlbmVyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBpbnZvbHZlIGluY29ycmVjdCBjYWNoaW5nIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJ3MgY3VycmVudCBtZW1zbG90cyAod2hpY2ggYWNjb3VudHMgZm9yIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgLyBTTU0gYWRkcmVzcyBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBkZWZhdWx0IG1lbXNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNIE1NSU8gaGFuZGxpbmcgYW5kIHBhZ2UgZmF1bHQgZW11bGF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBndWVzdCBWTSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjI4LjMwMTY4NDE3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1MjYxMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDYwNGMzNmIyZWU0NTIxODZlYWI0YWM1MGQyMmM2YzE2ZTBkY2UzNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE0OjI5OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxcbmluZGV4IDlkZTU3N2VmOWM5NzQuLmE2ZDg2ZDNkY2ZmNjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuQEAgLTMxMyw3ICszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxcbiB7XFxuLVxcdHU2NCBnZW4gPSBrdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlZ2VuZXJhdGlvbjtcXG4rXFx0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGdlbiBcXHUwMDI2IEtWTV9NRU1TTE9UX0dFTl9VUERBVEVfSU5fUFJPR1JFU1MpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VnZW5lcmF0aW9uO1xcbitcXHRyZXR1cm4gdmNwdS1cXHUwMDNlYXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cXHUwMDNlZ2VuZXJhdGlvbjtcXG4gfVxcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6MjguODE3Nzg4MDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzYwMzA0NTY4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fU01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJ3MgY3VycmVudCBtZW1zbG90cyAod2hpY2ggYWNjb3VudHMgZm9yIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgLyBTTU0gYWRkcmVzcyBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBkZWZhdWx0IG1lbXNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNIE1NSU8gaGFuZGxpbmcgYW5kIHBhZ2UgZmF1bHQgZW11bGF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBndWVzdCBWTSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2MDRjMzZiMmVlNDUyMTg2ZWFiNGFjNTBkMjJjNmMxNmUwZGNlMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE0OjI5OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCA5ZGU1NzdlZjljOTc0Li5hNmQ4NmQzZGNmZjYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX25vbmNhbm9uaWNhbF9pbnZscGdfYWRkcmVzcyh1NjQgbGEsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxuIHtcbi1cdHU2NCBnZW4gPSBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pLVx1MDAzZWdlbmVyYXRpb247XG4rXHR1NjQgZ2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbiBcbiBcdGlmICh1bmxpa2VseShnZW4gXHUwMDI2IEtWTV9NRU1TTE9UX0dFTl9VUERBVEVfSU5fUFJPR1JFU1MpKVxuIFx0XHRyZXR1cm47XG5AQCAtMzMwLDcgKzMzMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gubW1pb19nZW4gPT0ga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uO1xuK1x0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cdTAwM2VnZW5lcmF0aW9uO1xuIH1cbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6MjguODE3Nzg5MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQ2NDczODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwbGF5aW5nIGFyb3VuZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGl0J3MgYSBzdHJ1Y3R1cmFsIGNoYW5nZSwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZXkncmUgdG91Y2hpbmcgaG93IG1lbW9yeSBzbG90IGdlbmVyYXRpb25zIGFyZSBhY2Nlc3NlZCB3aXRoaW4gdGhlIEtWTSB4ODYgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBhY2Nlc3NvciBpbiBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgZnJvbSB0aGUgZGlyZWN0IGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pLVx1MDAzZWdlbmVyYXRpb25gIHRvIHRoZSBmdW5jdGlvbiBjYWxsIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cdTAwM2VnZW5lcmF0aW9uYC4gRnVuY3Rpb24gY2FsbHMgYXJlIHR5cGljYWxseSBwcmVmZXJyZWQgZm9yIGVuY2Fwc3VsYXRpb24gb3IgcG90ZW50aWFsbHkgZm9yIGZ1dHVyZSBmbGV4aWJpbGl0eS4gSSdtIHdvbmRlcmluZyB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVlcGx5IGV4YW1pbmUgdGhlIGNvbnRleHRzIHdoZXJlIGB2Y3B1X2NhY2hlX21taW9faW5mb2AgYW5kIGB2Y3B1X21hdGNoX21taW9fZ2VuYCBhcmUgdXNlZC4gSSBoYXZlIHRvIGFzc2VzcyBpZiB0aGlzIG1vZGlmaWNhdGlvbiBpcyBtZXJlbHkgY29zbWV0aWMgYW5kIGltcHJvdmluZyBjb2RlIHJlYWRhYmlsaXR5LCBvciBpZiBpdCBpbmRpY2F0ZXMgYSBtb3JlIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGdlbmVyYXRpb24gbnVtYmVyIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBpcyB1c2VkIGluIHRoZSBNTUlPIHBhdGguIFRoZSBjaGFuZ2Ugc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGNoYW5nZSBpbiBob3cgdGhlIHZpcnR1YWwgQ1BVIGludGVyYWN0cyB3aXRoIGl0cyBtZW1vcnkuIEkgaGF2ZSB0byBlbnN1cmUgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MiwiT3V0cHV0VG9rZW5zIjo3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjQyLjI4MjUzMTIyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzQyNDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y3B1X2NhY2hlX21taW9faW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzU2Mj1zdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU3Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM1NzM6XFx0dmNwdV9jYWNoZV9tbWlvX2luZm8odmNwdSwgZ3ZhLCBmYXVsdC1cXHUwMDNlZ2ZuLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU3NC1cXHRcXHRcXHQgICAgIGFjY2VzcyBcXHUwMDI2IHNoYWRvd19tbWlvX2FjY2Vzc19tYXNrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDUwMj1zdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjQtXFx0XFx0dHJhY2VfaGFuZGxlX21taW9fcGFnZV9mYXVsdChhZGRyLCBnZm4sIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTI1OlxcdFxcdHZjcHVfY2FjaGVfbW1pb19pbmZvKHZjcHUsIGFkZHIsIGdmbiwgYWNjZXNzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjYtXFx0XFx0cmV0dXJuIFJFVF9QRl9FTVVMQVRFO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTMwOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMxMi1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzEzOnN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMxNC1cXHRcXHRcXHRcXHRcXHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDoyOTo0Mi4zNjk5NjA4NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4NTkwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9tYXRjaF9tbWlvX2dlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuaD0zMTM9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaC0zMzAtXFxuYXJjaC94ODYva3ZtL3g4Ni5oOjMzMTpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2dlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzUwPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEpXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1MS17XFxuYXJjaC94ODYva3ZtL3g4Ni5oOjM1MjpcXHRpZiAodmNwdV9tYXRjaF9tbWlvX2dlbih2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ3ZhIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1My1cXHQgICAgICB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ3ZhID09IChndmEgXFx1MDAyNiBQQUdFX01BU0spKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTM1OT1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzYwLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzYxOlxcdGlmICh2Y3B1X21hdGNoX21taW9fZ2VuKHZjcHUpIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWFyY2gubW1pb19nZm4gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzYyLVxcdCAgICAgIHZjcHUtXFx1MDAzZWFyY2gubW1pb19nZm4gPT0gZ3BhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjQyLjQzNDgyNTc5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODExODQ2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBNTUlPIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiB0aGVzZSBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgZnVuY3Rpb25zLiBTdHJhaWdodCBhd2F5LCBJIHNlZSB0aGV5J3JlIGRlZmluZWQgaW5saW5lIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5oYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSdyZSBwcm9iYWJseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgZGVzaWduZWQgZm9yIGlubGluaW5nIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuXG5cbk5vdywgd2hlcmUgYXJlIHRoZXkgKnVzZWQqPyBJJ20gc2VlaW5nIHRoYXQgYHZjcHVfY2FjaGVfbW1pb19pbmZvYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBzcGVjaWZpY2FsbHkgaW4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBhbmQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLiBHaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lcywgaXQncyBjbGVhciB0aGF0IGB2Y3B1X2NhY2hlX21taW9faW5mb2AgaXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgTWVtb3J5LU1hcHBlZCBJL08gKE1NSU8pIGZhdWx0cyDigJMgYSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZ3Vlc3QtdG8taG9zdCBNTVUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhlIGZhY3QgdGhhdCBpdCdzIGluIHRoZSBNTVUgY29kZSBzdWdnZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBsaWtlbHkgYmVpbmcgdXNlZCB0byBjaGVjayBpZiB0aGUgTU1JTyBhY2Nlc3MgaXMgY2FjaGVkLCBhbmQgaWYgbm90LCB0byB1cGRhdGUgdGhlIGNhY2hlIHdpdGggaW5mb3JtYXRpb24uXG5cblRoZW4gdGhlcmUncyBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHZjcHVfbWF0Y2hfbW1pb19ndmFgIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dwYWAgYWxzbyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IG1hdGNoIGEgR3Vlc3QgVmlydHVhbCBBZGRyZXNzIChHVkEpIG9yIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgKEdQQSkgdG8gYW4gTU1JTyByZWdpb24uIFNvLCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgaXMgcHJvYmFibHkgYSBjb3JlIG1hdGNoaW5nIGNvbXBvbmVudC5cbkknbSBndWVzc2luZyB0aGUgZ2VuZXJhbCBpZGVhIGlzIHRoaXM6IFdoZW4gYSBndWVzdCBhY2Nlc3NlcyBhbiBNTUlPIHJlZ2lvbiwgdGhlcmUgbmVlZHMgdG8gYmUgYSBjaGVjayBmb3Igd2hldGhlciB0aGUgZ2l2ZW4gbWVtb3J5IGFjY2VzcyBpcyBhY3R1YWxseSBhbiBNTUlPIHJlcXVlc3QuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGNsZWFybHkgZXNzZW50aWFsIGluIHRoYXQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgdGhleSdyZSB1c2VkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIE1NSU8gaGFuZGxpbmcgbG9naWMsIGJ1dCB0aGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzMSwiT3V0cHV0VG9rZW5zIjo3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6NDguNzE2MDEyNTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTMwMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfbWF0Y2hfbW1pb19ndmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0MDQ9c3RhdGljIGJvb2wgbW1pb19pbmZvX2luX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDE1LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDQxNjpcXHRyZXR1cm4gdmNwdV9tYXRjaF9tbWlvX2d2YSh2Y3B1LCBhZGRyKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0MTctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTgwNjQ9c3RhdGljIGludCB2Y3B1X21taW9fZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNzYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNzc6XFx0aWYgKHZjcHVfbWF0Y2hfbW1pb19ndmEodmNwdSwgZ3ZhKSBcXHUwMDI2XFx1MDAyNiAoIWlzX3BhZ2luZyh2Y3B1KSB8fFxcbmFyY2gveDg2L2t2bS94ODYuYy04MDc4LVxcdCAgICAhcGVybWlzc2lvbl9mYXVsdCh2Y3B1LCB2Y3B1LVxcdTAwM2VhcmNoLndhbGtfbW11LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTM0Mj1zdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jbGVhcl9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzQ5LVxcbmFyY2gveDg2L2t2bS94ODYuaDozNTA6c3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6NDguODAxOTQ2Njc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDUzNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfbWF0Y2hfbW1pb19ncGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0MDQ9c3RhdGljIGJvb2wgbW1pb19pbmZvX2luX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDEzLVxcdGlmIChkaXJlY3QpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NDE0OlxcdFxcdHJldHVybiB2Y3B1X21hdGNoX21taW9fZ3BhKHZjcHUsIGFkZHIpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQxNS1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MDQ5PXN0YXRpYyBpbnQgdmNwdV9pc19tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNTUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNTY6XFx0aWYgKHZjcHVfbWF0Y2hfbW1pb19ncGEodmNwdSwgZ3BhKSkge1xcbmFyY2gveDg2L2t2bS94ODYuYy04MDU3LVxcdFxcdHRyYWNlX3ZjcHVfbWF0Y2hfbW1pbyhndmEsIGdwYSwgd3JpdGUsIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTM1MD1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2d2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1OC1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzU5OnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbmFyY2gveDg2L2t2bS94ODYuaC0zNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDoyOTo0OC45MDA0MDU0ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQ2NDc5MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTU1JTyBDYWNoaW5nIFBhdGNoIGFuZCBJZGVudGlmeWluZyBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBLVk0gaGFuZGxlcyBNTUlPIGdlbmVyYXRpb24gY2FjaGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdXNpbmcgYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCBpbnN0ZWFkIG9mIGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pYC4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24sIGxpa2VseSB0aWVkIHRvIHNjZW5hcmlvcyB3aGVyZSB3ZSBoYXZlIG11bHRpcGxlIGFkZHJlc3Mgc3BhY2VzLCBsaWtlIHdpdGggU01NIHZzLiB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBtYWtpbmcgdGhpcyBjaGFuZ2U7IGl0J3MgbGlrZWx5IGEgbW9yZSBwcmVjaXNlIG9yIGVmZmljaWVudCB3YXkgdG8gbWFuYWdlIHRoZSBtZW1vcnkgc2xvdCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiB2Q1BVLlxuXG5UaGUgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgaW4gYGFyY2gveDg2L2t2bS94ODYuaGAsIGFuZCB0aGV5IGFyZSBjYWxsZWQgYnkgc2V2ZXJhbCByb3V0aW5lcyB3aXRoaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYG1taW9faW5mb19pbl9jYWNoZWAsIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAsIGFuZCBgdmNwdV9pc19tbWlvX2dwYWAuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCB0aG9zZSBmdW5jdGlvbnMgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cblNwZWNpZmljYWxseSwgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCwgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBgdmNwdV9tbWlvX2d2YV90b19ncGFgLCBhbmQgYHZjcHVfaXNfbW1pb19ncGFgIGFyZSBhbGwgcHJpbWUgY2FuZGlkYXRlcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBrdm1fdmNwdV9tZW1zbG90c2AgaXMgZGVmaW5lZCBjb3JyZWN0bHksIEkgc2hvdWxkIGNoZWNrIHRoYXQgaW4gYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAuIFRoZSBLVk0gY29uZmlnIG9wdGlvbiBpcyBzZXQsIHRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCB0aGluZyBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmUgb3Igc3RhdGljLiBSZW1lbWJlciwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgc29saWQgQVBJIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0byBiZSBlZmZlY3RpdmUuIExldCdzIHNlZS4uLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGFuZCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgYXJlICpzdGF0aWMqIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gUmlnaHQsIHRoYXQncyBhIHByb2JsZW0gc2luY2UgSSB3YW50IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gVGhhdOKAmXMgcHJvYmFibHkgbm90IHdoYXQgSSBzaG91bGQgdGFyZ2V0LlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwLCBhbmQgZmluZCB0aGUgKmNhbGxlcnMqIG9mIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBjb250cm9sIGZsb3cgZnJvbSB0aGUgQVBJIGVudHJ5cG9pbnRzLCBpbnN0ZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg1LCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDowNS4zNjUxOTk3NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDI2MDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfbW1pb19wYWdlX2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NDYxPXN0YXRpYyBib29sIGdldF9tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgdTY0ICpzcHRlcClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUwMS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MDI6c3RhdGljIGludCBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUwMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTI0OlxcdFxcdHRyYWNlX2hhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoYWRkciwgZ2ZuLCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUyNS1cXHRcXHR2Y3B1X2NhY2hlX21taW9faW5mbyh2Y3B1LCBhZGRyLCBnZm4sIGFjY2Vzcyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1MTY9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTQzLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU0NDpcXHRcXHRyID0gaGFuZGxlX21taW9fcGFnZV9mYXVsdCh2Y3B1LCBjcjJfb3JfZ3BhLCBkaXJlY3QpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU0NS1cXHRcXHRpZiAociA9PSBSRVRfUEZfRU1VTEFURSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU3Mi1cXHQvKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU3MzpcXHQgKiBOb25lIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCksIG9yXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTc0LVxcdCAqIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdCgpIHJldHVybiBSRVRfUEZfQ09OVElOVUUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjA1LjcwNTQ2NTA4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2NzkyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM1Mzk9c3RhdGljIGludCBrdm1faGFuZGxlX2Vycm9yX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM1NjEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNTYyOnN0YXRpYyBpbnQga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU2My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NzAxPXN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3MjktXFx0aWYgKHVubGlrZWx5KCFzbG90KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3MzA6XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDczMS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc1OC1cXHRcXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3NTk6XFx0XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc2MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDgwMi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFmYXVsdC1cXHUwMDNlc2xvdCB8fCBpc19ub3Nsb3RfcGZuKGZhdWx0LVxcdTAwM2VwZm4pKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ4MDM6XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDgwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6MDUuNzk5MTQ5MzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTU3MTgxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGt2bV9tbXVfcGFnZV9mYXVsdGAgRW50cnlwb2ludCoqXG5cbkFscmlnaHQsIHNvIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGlzIGEgY3JpdGljYWwgZW50cnlwb2ludCBmdW5jdGlvbiBhbmQsIGltcG9ydGFudGx5LCBpdCdzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCB0byBicm9hZGVyIHVzZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byB1bmRlcnN0YW5kIGl0cyBpbW1lZGlhdGUgY29udGV4dCBhbmQgaG93IGl0J3MgYmVpbmcgKnVzZWQqLiBUaW1lIHRvIHRyYWNlIHdoZXJlIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHRoZSBpbXBsaWNhdGlvbnMgd2hlbiB0aGF0IGZhdWx0IG9jY3Vycy4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYHZjcHVfbW1pb19ndmFfdG9fZ3BhYCBhbmQgYHZjcHVfaXNfbW1pb19ncGFgLCBhcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byB0aG9zZSBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHBhZ2UgZmF1bHQsIHNob3VsZCBiZSBpbGx1bWluYXRpbmcuIFRoaXMgd2lsbCBob3BlZnVsbHkgc2hvdyBtZSB3aGVyZSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmYXVsdCBpcyBiZWluZyB0cmlnZ2VyZWQsIGFsbG93aW5nIG1lIHRvIHN0YXJ0IGNvbnN0cnVjdGluZyBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCByaXNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQzLCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjE5Ljk1NjM0MzE3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMDk5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9tbWlvX2d2YV90b19ncGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz04MDQ5PXN0YXRpYyBpbnQgdmNwdV9pc19tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNjQ6c3RhdGljIGludCB2Y3B1X21taW9fZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbmFyY2gveDg2L2t2bS94ODYuYy04MDY1LVxcdFxcdFxcdFxcdGdwYV90ICpncGEsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODEyMD1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTQzLVxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxNDQ6XFx0XFx0cmV0ID0gdmNwdV9tbWlvX2d2YV90b19ncGEodmNwdSwgYWRkciwgXFx1MDAyNmdwYSwgZXhjZXB0aW9uLCB3cml0ZSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDUtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjIwLjAxMDM1NjE1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTk5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9pc19tbWlvX2dwYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTgwNDc9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGhhbmRsZV91ZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNDgtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNDk6c3RhdGljIGludCB2Y3B1X2lzX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNTAtXFx0XFx0XFx0ICAgIGdwYV90IGdwYSwgYm9vbCB3cml0ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MDY0PXN0YXRpYyBpbnQgdmNwdV9tbWlvX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MDkwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MDkxOlxcdHJldHVybiB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGd2YSwgKmdwYSwgd3JpdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04MDkyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MTIwPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDEtXFx0XFx0Z3BhID0gY3R4dC1cXHUwMDNlZ3BhX3ZhbDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODE0MjpcXHRcXHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04MTQzLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjIwLjA1NzE4MjUzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk0MjA4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBoYXMgZmlsZS1zY29wZSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtub3cgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaW50ZXJhY3Rpb25zLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJ3MgY2FsbGluZyB0aGlzIHRoaW5nLiBJZGVudGlmeWluZyB0aGUgY2FsbGVycyB3aWxsIHJldmVhbCBpdHMgcm9sZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGVtdWxhdG9y4oCZcyBhcmNoaXRlY3R1cmUuIFRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBtb2RpZnlpbmcsIG9yIHNpbXBseSB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvci4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgZmluZCB0aG9zZSBjYWxscyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODc4MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDoyMy40NTEzOTM1NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzgzMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTgxMDg9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTE5LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MTIwOnN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbmFyY2gveDg2L2t2bS94ODYuYy04MTIxLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODE5NT1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzNi1cXHRcXHRub3cgPSAtYWRkciBcXHUwMDI2IH5QQUdFX01BU0s7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyMzc6XFx0XFx0cmMgPSBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UoYWRkciwgdmFsLCBub3csIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzOC1cXHRcXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MjQ4LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MjQ5OlxcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODI1MC1cXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6MjMuNDk2MTc5NjQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjk0MzgzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDozMS44MjU2MTk4NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzA0NzA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbXVsYXRvcl9yZWFkX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9ODEwOD1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxMTktXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxMjA6c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxMjEtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBieXRlcyxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTk0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MTk1OnN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODE5Ni1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzNi1cXHRcXHRub3cgPSAtYWRkciBcXHUwMDI2IH5QQUdFX01BU0s7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyMzc6XFx0XFx0cmMgPSBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UoYWRkciwgdmFsLCBub3csIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzOC1cXHRcXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MjQ4LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MjQ5OlxcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODI1MC1cXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04Mjc0PXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04Mjg1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4Mjg2OlxcdHJldHVybiBlbXVsYXRvcl9yZWFkX3dyaXRlKGN0eHQsIGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbiwgXFx1MDAyNm9wcyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyODctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTgyODk9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MzAwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MzAxOlxcdHJldHVybiBlbXVsYXRvcl9yZWFkX3dyaXRlKGN0eHQsIGFkZHIsICh2b2lkICopdmFsLCBieXRlcywgZXhjZXB0aW9uLCBcXHUwMDI2b3BzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODMwMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjMyLjAxODY3MTg4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk3MDQ3NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIEtWTSBNTUlPIEdlbmVyYXRpb24gQ2FjaGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtWTSBNTUlPIGdlbmVyYXRpb24gY2FjaGluZywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYHg4Nl9lbXVsYXRlX29wc2AgYXMgYSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0LiBJIHNlZSB0aGF0IHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlIGFyZSBgZW11bGF0b3JfcmVhZF9lbXVsYXRlZGAgYW5kIGBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZGAsIHdoaWNoIGFyZSwgb2YgY291cnNlLCB1c2VkIHdpdGhpbiB0aGF0LiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgKmRpcmVjdGx5KiBpbnZvbHZlZCBpbiB0aGUgTU1JTyBwYXRoLCBhbmQgdGh1cywgaGlnaGx5IGxpa2VseSB0byBiZSBpbXBhY3RlZCBieSB0aGVzZSBjYWNoaW5nIG1vZGlmaWNhdGlvbnMuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZWlyIHJvbGVzIGluIGhhbmRsaW5nIG1lbW9yeSBhY2Nlc3MgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiByZXNwZWN0aXZlbHkuXG5cbkxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzc2luZyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBjb3VsZCB0cmlnZ2VyIG9yIGJlIGFmZmVjdGVkIGJ5IHRoZSBNTUlPIGNhY2hpbmcgc3RyYXRlZ3kuIFRoaXMgaXMgd2hlcmUgSSdsbCBjb25jZW50cmF0ZSBteSBpbml0aWFsIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTA4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6MzguMjE1NzIzMzA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkwNTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTgxOTU9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyNjgtXFx0ICogYWZ0ZXIgY29tcGxldGluZyBlbXVsYXRpb24gKHNlZSB0aGUgY2hlY2sgb24gdmNwdS1cXHUwMDNlbW1pb19uZWVkZWQgaW5cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI2OTpcXHQgKiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpKS5cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODI3MC1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05NDE5PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTCh4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTQyMC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQyMTppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuYy05NDIyLVxcdFxcdFxcdCAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05NjQxPWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTY0Mi17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk2NDM6XFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIGVtdWxhdGlvbl90eXBlLCBOVUxMLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTY0NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTY0Nz1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk2NDkte1xcbmFyY2gveDg2L2t2bS94ODYuYzo5NjUwOlxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk2NTEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDozOC4yNjE2MzIxNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ4MzU1Mzc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIE1NSU8gQ2FjaGluZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgS1ZNJ3MgTU1JTyBjYWNoaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHR3ZWFraW5nIGhvdyB0aGUgYGdlbmVyYXRpb25gIGNvdW50ZXIgZm9yIE1NSU8gbWVtc2xvdHMgaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBzd2l0Y2hpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbmAuIFRoaXMgaXMgcHJldHR5IGNyaXRpY2FsIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB3aGljaCBtZW1vcnkgc2xvdHMgYXJlIGNvbnNpZGVyZWQgd2hlbiB0aGUgS1ZNIGNoZWNrcyB0byBzZWUgaWYgTU1JTyBhY2Nlc3NlcyBjYW4gYmUgY2FjaGVkLlxuXG5NeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcmlnaW5hbCBhcHByb2FjaCwgdXNpbmcgYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgLCB3YXMgbGlrZWx5IHJlZmVyZW5jaW5nIHRoZSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UncyBtZW1zbG90cyAoYWRkcmVzcyBzcGFjZSAwKS4gVGhlIG5ldyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGNhbGwgaXMgbXVjaCBiZXR0ZXIgYmVjYXVzZSBpdCBwcm92aWRlcyB0aGUgbWVtc2xvdHMgc3BlY2lmaWMgdG8gdGhlIHZDUFUncyAqY3VycmVudCogYWRkcmVzcyBzcGFjZSwgd2hpY2ggY291bGQgYmUgU01NIG9yIG5vcm1hbC4gVGhpcyByZXNvbHZlcyB3aGF0IEkgaW1tZWRpYXRlbHkgYXNzdW1lIGlzIGEgYnVnIHdoZXJlIHRoZSBNTUlPIGdlbmVyYXRpb24gY2hlY2sgd2FzIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSB3cm9uZyBtZW1vcnkgcmVnaW9uJ3MgZ2VuZXJhdGlvbiBjb3VudCwgd2hpY2ggd291bGQgYmUgcmVhbGx5IG5hc3R5LlxuXG5Db25zaWRlcmluZyBRRU1VJ3MgaGVhdnkgcmVsaWFuY2Ugb24gS1ZNLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgaW1wYWN0cyByZWFsLXdvcmxkIGRlcGxveW1lbnRzLiBHaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gY29yZSBNTUlPIGhhbmRsaW5nLCBpdCdzIGFic29sdXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIGZ1enppbmcgZWZmb3J0cyB0byBpdC4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgZGlnIGludG8gYXJlYXMgd2hlcmUgdGhpcyBmaXggaXMgY3JpdGljYWwuXG5cblRvIHRoYXQgZW5kLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga3ZtX3ZjcHVfbWVtc2xvdHNgIHNvIEkgY2FuIHVuZGVyc3RhbmQgaXRzIGZ1bGwgaW1wbGljYXRpb25zLiBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY2hhbmdlIGltcGFjdHM6IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYHZjcHVfbW1pb19ndmFfdG9fZ3BhYCwgYHZjcHVfaXNfbW1pb19ncGFgLCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCwgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFRoZXNlIGFyZSBhbGwgcG90ZW50aWFsIGhvdCBzcG90cyByZWxhdGVkIHRvIE1NSU8gaGFuZGxpbmcgd2hlcmUgdGhpcyBjb3VsZCBoYXZlIGEgdmlzaWJsZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQ4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjUzLjA5NzE3MTkzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5ODc0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZjcHVfbWVtc2xvdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMDg3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqa3ZtX21lbXNsb3RzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMDkxLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMDkyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqa3ZtX3ZjcHVfbWVtc2xvdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMDkzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjE5PXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTIyMDpzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjIxLXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV92Y3B1X2dmbl90b19tZW1zbG90KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6NTMuMTY3MTY0NDU5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzc4NDUxMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTA4MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjAzLjU0NTYxOTIzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtc2xvdHMgKmt2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRyZXR1cm4gX19rdm1fbWVtc2xvdHMoa3ZtLCAwKTtcXG4xMDkwOlxcdH1cXG4xMDkxOlxcdFxcbjEwOTI6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuMTA5MzpcXHR7XFxuMTA5NDpcXHRcXHRpbnQgYXNfaWQgPSBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRcXHRyZXR1cm4gX19rdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtLCBhc19pZCk7XFxuMTA5NzpcXHR9XFxuMTA5ODpcXHRcXG4xMDk5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdHNfZW1wdHkoc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMpXFxuMTEwMDpcXHR7XFxuMTEwMTpcXHRcXHRyZXR1cm4gUkJfRU1QVFlfUk9PVChcXHUwMDI2c2xvdHMtXFx1MDAzZWdmbl90cmVlKTtcXG4xMTAyOlxcdH1cXG4xMTAzOlxcdFxcbjExMDQ6XFx0Ym9vbCBrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShzdHJ1Y3Qga3ZtICprdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMTowMy41NDU3NjE4NDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyNzY4MTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNTUlPIENhY2hpbmcgRml4IGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBrdm1fdmNwdV9tZW1zbG90c2AgbGV2ZXJhZ2VzIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpYC4gQW5kIG9uIHg4NiwgdGhpcyByZXR1cm5zIHRoZSBTTU0gYWRkcmVzcyBzcGFjZSBJRCBpZiB0aGUgdkNQVSBpcyBpbiBTTU0gbW9kZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgemVyby4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBNTUlPIGNhY2hpbmcgc3BlY2lmaWNhbGx5IGluIHRoZSBTTU0gc3RhdGUuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gSSBtZWFuLCBhbnkgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aGluIGEgY3JpdGljYWwgbW9kZSBsaWtlIFNNTSwgc2NyZWFtcyBmb3IgdGhvcm91Z2ggdGVzdGluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gc29tZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW1tZWRpYXRlbHkganVtcCBvdXQuIFRob3NlIGFyZSBhbGwga2V5IGNvbXBvbmVudHMgaW4gaGFuZGxpbmcgbWVtb3J5IGFjY2VzcyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLlxuXG5IbW0sIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgYW5kIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YC4uLiBUaG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgYW5kIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGV5IGFyZSBzdWJzdGFudGlhbC4gSSByZWFsbHkgbmVlZCB0byBzZWUgaWYgdGhleSdyZSBpbmxpbmVkIG9yIG5vdC4gVGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyBkaWZmZXIgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gdGhlIGFuc3dlci4gSWYgdGhleSBhcmUgaW5saW5lZCwgZnV6emluZyBiZWNvbWVzIG1vcmUgY29tcGxleDsgaWYgbm90LCB0aGV5IGJlY29tZSBleGNlbGxlbnQgZW50cnkgcG9pbnRzIGZvciBhbmFseXNpcyBhbmQgZGlyZWN0ZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMTowOC45NzM0NDY3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMTE4NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0NjE9c3RhdGljIGJvb2wgZ2V0X21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVwKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTAxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUwMjpzdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTAzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUyMy1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MjQ6XFx0XFx0dHJhY2VfaGFuZGxlX21taW9fcGFnZV9mYXVsdChhZGRyLCBnZm4sIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI1LVxcdFxcdHZjcHVfY2FjaGVfbW1pb19pbmZvKHZjcHUsIGFkZHIsIGdmbiwgYWNjZXNzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjUxNj1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NDMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTQ0OlxcdFxcdHIgPSBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHZjcHUsIGNyMl9vcl9ncGEsIGRpcmVjdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTQ1LVxcdFxcdGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTcyLVxcdC8qXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTczOlxcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NzQtXFx0ICoga3ZtX21tdV93cml0ZV9wcm90ZWN0X2ZhdWx0KCkgcmV0dXJuIFJFVF9QRl9DT05USU5VRS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6MDkuMjI0NTcxMjkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjg5ODk0NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBLVk0gRmF1bHQgSGFuZGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZmF1bHQgaGFuZGxlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIGV4ZWN1dGlvbiBjaGFyYWN0ZXJpc3RpY3MuIFRoZSBmdW5jdGlvbiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGFsc28gbm90IGlubGluZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFya3MgaXQgYXMgYSBmdW5jdGlvbiB0aGF0J3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBhIGdvb2QgdGFyZ2V0IGZvciBkZWVwZXIgaW5zcGVjdGlvbi4gU2ltaWxhcmx5LCBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGFsc28gc3RhdGljIGFuZCBub3QgaW5saW5lZCwgd2hpY2ggcmFpc2VzIGEgcmVkIGZsYWcuIFdvcnRoIGludmVzdGlnYXRpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIHRoZXJlLlxuXG5Ob3csIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGlzIGRlbGliZXJhdGVseSBtYXJrZWQgYG5vaW5saW5lYCwgd2hpY2ggbWVhbnMgd2UndmUgZ290IGEgZGVmaW5pdGUgcG9pbnQgb2YgZW50cnkgdG8gZXhhbWluZS4gIEl0J3MgdW5saWtlbHkgdG8gYmUgaW5saW5lZCBpbnRvIGFueSBjYWxsaW5nIGNvbnRleHQsIG1lYW5pbmcgd2UgY2FuIGFuYWx5emUgaXQgYXMgYSBkaXNjcmV0ZSB1bml0LlxuXG5BbmQgdGhlbiB3ZSBoYXZlIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFRoaXMgb25lJ3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEtWTSBBUEksIG1ha2luZyBpdCBhbm90aGVyIGNydWNpYWwgcG9pbnQgb2YgZm9jdXMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGhhbmRsaW5nIG1vcmUgY29tcGxleCBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIGFuZCB0aGF0IGVtdWxhdGlvbiBjYW4gYmUgZXhwZW5zaXZlLCBzbyB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdGhhdCBuZWVkcyBzb21lIGNvbnNpZGVyYXRpb24uXG5cblNvLCB0byBzdW1tYXJpemUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBsb29rIGludG8gYXJlOlxuXG4qICAgYGt2bV9tbXVfcGFnZV9mYXVsdGBcbiogICBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gXG4qICAgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YFxuKiAgIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YFxuXG5HaXZlbiB0aGlzLCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgS1ZNYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGRyaXZlcyB0aGVzZSBzeW1ib2xzLCBtYWtpbmcgc3VyZSB0aGF0IGl0J3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6MjIuOTE0NDY5Mzg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY0NjE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjIyLjk2NzE0MzI4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzkyNTI1ODkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU01NIENvbnRleHQqKlxuXG5BbHJpZ2h0LCB0aGlzIHBhdGNoLi4uIGl0J3MgZGVmaW5pdGVseSBnb3QgU01NIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFNlZWluZyB0aGUgdXNlIG9mIGBrdm1fdmNwdV9tZW1zbG90c2AgaW1tZWRpYXRlbHkgcmluZ3MgYWxhcm0gYmVsbHMsIGJlY2F1c2UgdGhhdCBmdW5jdGlvbidzIGRlcGVuZGVuY2Ugb24gYGt2bV9hcmNoX3ZjcHVfbWVtc2xvdHNfaWQodmNwdSlgIGlzIGEgZGVhZCBnaXZlYXdheSwgYW5kIHRoaXMgZnVuY3Rpb24gZ2l2ZXMgdXMgdGhlIFNNTSBhZGRyZXNzIHNwYWNlIElELiBUaGF0J3MgdGhlIGtleS4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gTGV0J3MgZGVsdmUgaW50byB3aGF0IGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkYCBpcyBkb2luZy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFNNTSBpcyBpbnRlZ3JhdGVkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGlzIHdpbGwgZGVmaW5pdGVseSBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHRoZSBjaGFuZ2VzIHByb3Bvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjM2Ljg5MjQwNTE5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1NDg1ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfbWVtc2xvdHNfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6MzcuMDcwOTY0NTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mjc4NTEyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkxvY2F0aW5nIHRoZSBLVk0gTWVtb3J5IFNsb3QgSUQqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsuIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkYCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBIbW0sIHdoZXJlIHdvdWxkIHRoZXkgdHlwaWNhbGx5IHN0YXNoIHNvbWV0aGluZyBsaWtlIHRoYXQ/IEl0J3MgcmVsYXRlZCB0byBLVk0gYXJjaGl0ZWN0dXJlLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGluIHRoZSBgYXJjaC94ODZgIGRpcmVjdG9yeSwgcHJvYmFibHkgdW5kZXIgYGluY2x1ZGUvYXNtL2AuIEFuZCBnaXZlbiB0aGUgbmFtZSwgaXQncyB2ZXJ5IGxpa2VseSB0byBiZSBob3N0LXJlbGF0ZWQuIFNvLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9ob3N0LmhgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4gRmluZ2VycyBjcm9zc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyMCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjUxLjM0OTQ3OTYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyMjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yNDM3PWVudW0ge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yNDUyLSMgZGVmaW5lIGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pID8gMSA6IDIpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyNDUzOiMgZGVmaW5lIGt2bV9hcmNoX3ZjcHVfbWVtc2xvdHNfaWQodmNwdSkgKCh2Y3B1KS1cXHUwMDNlYXJjaC5oZmxhZ3MgXFx1MDAyNiBIRl9TTU1fTUFTSyA/IDEgOiAwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjQ1NC0jIGRlZmluZSBrdm1fbWVtc2xvdHNfZm9yX3NwdGVfcm9sZShrdm0sIHJvbGUpIF9fa3ZtX21lbXNsb3RzKGt2bSwgKHJvbGUpLnNtbSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6NTEuMzk4OTA3MzI4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzYxNzgxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtWTSB4ODYgTU1JTyBIYW5kbGluZyB3aXRoIFNNTSBDb250ZXh0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIGNvbW1pdCBpcyBjaGFuZ2luZyBob3cgdGhlIG1lbW9yeSBzbG90IGdlbmVyYXRpb24gaXMgcmV0cmlldmVkIGZvciBNTUlPIGNhY2hpbmcgd2l0aGluIHRoZSBLVk0geDg2IGNvZGUuICBQcmV2aW91c2x5LCBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uYCB3YXMgYmVpbmcgdXNlZCwgZWZmZWN0aXZlbHkgYWx3YXlzIHJldHJpZXZpbmcgZnJvbSBhZGRyZXNzIHNwYWNlIDAuIFRoZSBjaGFuZ2UgdXNlcyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbmAgaW5zdGVhZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAgKmNvbnNpZGVycyogdGhlIHZDUFUncyBTTU0gbW9kZSBieSBjYWxsaW5nIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpYCwgd2hpY2ggcmV0dXJucyAxIGlmIGluIFNNTS4gU28sIGlmIHRoZSB2Q1BVIGlzIGluIFNNTSwgdGhlIHJlbGV2YW50IG1lbXNsb3QgSUQgaXMgMSwgb3RoZXJ3aXNlIGl0IGlzIDAuIFRoaXMgYWZmZWN0cyBNTUlPIGNhY2hpbmcsIGFuZCBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eS4gIENhbiB3ZSB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseSwgS1ZNICppcyogdGhlIGh5cGVydmlzb3IuICBXZSdyZSBmdXp6aW5nIHRoZSBrZXJuZWwsIHdoaWNoIGNhbiBiZSBhY3RpbmcgYXMgdGhlIEtWTSBob3N0LiBTeXprYWxsZXIgaGFzIGV4Y2VsbGVudCBzdXBwb3J0IGZvciBmdXp6aW5nIEtWTSwgaW5jbHVkaW5nIGNyZWF0aW5nIFZNcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtLiBXZSBjYW4gZGVmaW5pdGVseSBoaXQgdGhpcyBjb2RlIHBhdGguXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gV2UgaGF2ZSBzZXZlcmFsIG9wdGlvbnMgbWVudGlvbmVkOiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgLCBgZW11bGF0b3JfcmVhZF93cml0ZWAsIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAsIGFuZCBga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFuZCBga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXJgLiAgSWRlYWxseSwgd2UnZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBzZWUuLi4gSW5pdGlhbGx5LCBJIHdvdWxkIGhhdmUgc2VsZWN0ZWQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBzaW5jZSB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBNTUlPLiBCdXQsIHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBjYWxscyBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGFuZCBga3ZtX21tdV9mYXVsdGluX3BmbmAgY2FsbHMgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpcyBhbHNvIGEgZ29vZCBwb3NzaWJpbGl0eS4gTGV0J3MgZGlnIGRlZXBlcjpcblxuV2UgaGF2ZSB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlncyBhcmUgZW5hYmxlZC4gU2luY2UgdGhpcyBpbnZvbHZlcyBTTU0sIGBLVk1fU01NYCBpcyBuZWNlc3NhcnksIGJ1dCBgS1ZNYCBpcyBmb3VuZGF0aW9uYWwsIG9mIGNvdXJzZS4gIEEgcXVpY2sgY2hlY2sgb2YgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBjb25maXJtcyBgS1ZNX1NNTWAgKmRlcGVuZHMqIG9uIGBLVk1gLCBzbyB3ZSdyZSBnb29kLlxuXG5MZXQncyBldmFsdWF0ZSB0aGUgY2FuZGlkYXRlIGVudHJ5IHBvaW50cy4gYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgIGlzIHN0YXRpYywgYnV0IG5vdCBpbmxpbmUuICBga3ZtX21tdV9wYWdlX2ZhdWx0YCBjYWxscyB0aGlzLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGFsc28gc3RhdGljLiBJdCdzIGNhbGxlZCBieSBga3ZtX21tdV9mYXVsdGluX3BmbmAgKHN0YXRpYyksIGFuZCBpcyBjYWxsZWQgYnkgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGlzIG5vdCBzdGF0aWMuICBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rIHByb21pc2luZywgbGV0J3MgY2hlY2sgdGhlaXIgZGVmaW5pdGlvbnMuXG5cbmBgYGNcbmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbmBgYFxuYGBgY1xuaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcblx0XHRcdCAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbmBgYFxuXG5FeGNlbGxlbnQsIHRoZXkncmUgbm90IHN0YXRpYywgc28gd2UgY2FuIGNvbnNpZGVyIHRoZW0gYXMgZW50cnlwb2ludHMuXG5cblRoZSBvdGhlciBlbnRyeSBwb2ludCBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCBpcyBpbmxpbmUuXG5cblRoZXJlZm9yZSwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIHRoZSBiZXN0IGNob2ljZXMgZm9yIGZvY3VzIHN5bWJvbHMuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYgYWdhaW4sIHRoZSBmaXggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1ZzogTU1JTyBnZW5lcmF0aW9uIGNhY2hpbmcgd2FzIHVzaW5nIG1lbXNsb3RzIGZyb20gdGhlIGRlZmF1bHQgYWRkcmVzcyBzcGFjZSBpbnN0ZWFkIG9mIHRoZSB2Q1BVJ3MgY3VycmVudCBzcGFjZSwgZXNwZWNpYWxseSBpbXBhY3RpbmcgU01NLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlLiAgR2l2ZW4gdGhhdCB3ZSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlIHdpdGggU3l6a2FsbGVyLCB3aGljaCBoYXMgZXhjZWxsZW50IEtWTSBzdXBwb3J0LCBhbmQgd2UgaGF2ZSBpZGVudGlmaWVkIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBub24tc3RhdGljIGVudHJ5IHBvaW50cywgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpcyEgTm93LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxOCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjI0Ljc2MDY5MTc5N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTUwNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBLVk0geDg2IE1NSU8gY2FjaGluZyB0byB1c2UgdGhlIHZDUFUncyBjdXJyZW50IG1lbXNsb3RzICh3aGljaCBhY2NvdW50cyBmb3IgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAvIFNNTSBhZGRyZXNzIHNwYWNlcykgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgbWVtc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0gTU1JTyBoYW5kbGluZyBhbmQgcGFnZSBmYXVsdCBlbXVsYXRpb24gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGd1ZXN0IFZNLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBLVk0geDg2IE1NSU8gY2FjaGluZyB0byB1c2UgdGhlIHZDUFUncyBjdXJyZW50IG1lbXNsb3RzICh3aGljaCBhY2NvdW50cyBmb3IgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAvIFNNTSBhZGRyZXNzIHNwYWNlcykgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgbWVtc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0gTU1JTyBoYW5kbGluZyBhbmQgcGFnZSBmYXVsdCBlbXVsYXRpb24gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGd1ZXN0IFZNLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzI6MjQuODQ4MjQ5MTM0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyNzIyNjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjI0Ljg0ODkxMzc1NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTUyNjU1NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgd2F5IEtWTSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBnZW5lcmF0aW9uIGZvciBhIHZDUFUsIHN3aXRjaGluZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAoZS5nLiwgU01NIHZzIG5vbi1TTU0pIGlzIHVzZWQgd2hlbiBjYWNoaW5nIE1NSU8gaW5mbyBvciBtYXRjaGluZyB0aGUgTU1JTyBnZW5lcmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgaW52b2x2ZSBpbmNvcnJlY3QgY2FjaGluZyBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjA0YzM2YjJlZTQ1MjE4NmVhYjRhYzUwZDIyYzZjMTZlMGRjZTM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNDoyOToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtMzEzLDcgKzMxMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19ub25jYW5vbmljYWxfaW52bHBnX2FkZHJlc3ModTY0IGxhLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0Z3ZhX3QgZ3ZhLCBnZm5fdCBnZm4sIHVuc2lnbmVkIGFjY2VzcylcbiB7XG4tXHR1NjQgZ2VuID0ga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uO1xuK1x0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVx1MDAzZWdlbmVyYXRpb247XG4gXG4gXHRpZiAodW5saWtlbHkoZ2VuIFx1MDAyNiBLVk1fTUVNU0xPVF9HRU5fVVBEQVRFX0lOX1BST0dSRVNTKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlZ2VuZXJhdGlvbjtcbitcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gubW1pb19nZW4gPT0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjI0Ljg0ODkxNDY3NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTcyNzA3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBNZW1vcnkgU2xvdCBHZW5lcmF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gbnVtYmVyIHdpdGhpbiBLVk0ncyB4ODYgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hhbmdpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCBpbiBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoZSBjb21taXQgbWVzc2FnZSBoaW50cyBhdCBhIHByb2JsZW0gcmVsYXRlZCB0byBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZ2VuZXJhdGlvbiBudW1iZXJzIGJlaW5nIHVzZWQsIHBvc3NpYmx5IHN0ZW1taW5nIGZyb20gU2VjdXJlIE1vZGUgTWFuYWdlbWVudCAoU01NKSBvciBtdWx0aXBsZSBhZGRyZXNzIHNwYWNlcyB3aXRoaW4gdGhlIFZNLlxuXG5NeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBrdm1fdmNwdV9tZW1zbG90c2AgKmRvZXMqLiBNeSBndWVzcyBpcyB0aGF0IGl0IHByb2JhYmx5IHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIHN0cnVjdHVyZSwgYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgLCBidXQgd2l0aCBzb21lIGFkZHJlc3Mgc3BhY2Ugc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSB2Q1BVJ3MgZmxhZ3MgLSBtYXliZSBpdCdzIGNoZWNraW5nIGB2Y3B1LVx1MDAzZWFyY2guaGZsYWdzYCBmb3IgdGhlIFNNTSBiaXQgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbldhaXQsIGxvb2tpbmcgY2xvc2VyLCBhbGwgaXQncyBkb2luZyBpcyBjaGFuZ2luZyB0aGUgcG9pbnRlciBkZXJlZmVyZW5jZWQgdG8gZ2V0IHRoZSBtZW1zbG90cyBnZW5lcmF0aW9uLiBJIGhhZCBhIHF1aWNrIG1vbWVudCBvZiBjb25jZXJuIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UuIFRoZSBwYXRjaCBpcyBzaW1wbHkgc2VsZWN0aW5nIGEgZGlmZmVyZW50IG1lbXNsb3RzIHN0cnVjdHVyZSBiYXNlZCBvbiBzb21lIGNvbnRleHQsIHRoZW4gZ3JhYmJpbmcgdGhlIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gaXQuXG5cblRoaXMgaXMgYSBsb2dpYyBidWcgZml4LCB0aGVuLiBJdCdzIGxpa2VseSByZXNvbHZpbmcgYSBmdW5jdGlvbmFsIGlzc3VlLiBUaGUgY2hhbmdlIHN1Z2dlc3RzIHRoZXJlJ3MgYSBwcm9ibGVtIGluIHNlbGVjdGluZyB0aGUgKnJpZ2h0KiBtZW1zbG90cyBnZW5lcmF0aW9uLCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBhIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IsIG1vcmUgbGlrZWx5LCBqdXN0IGluY29ycmVjdCBjYWNoaW5nIGFuZC9vciBiZWhhdmlvci4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIHRoZSBjb250cm9sIGZsb3cgYWx0ZXJlZCB0byBleHBvc2Ugc3VjaCBtZW1vcnkgdG8gS01TQU4uIE1lbW9yeSBjb3JydXB0aW9uLCBpZiBpdCBleGlzdGVkLCBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLiBLTVNBTiBpc24ndCB0aGUga2V5IGhlcmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIHNlZW1zIGFwcHJvcHJpYXRlLlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBrdm1fdmNwdV9tZW1zbG90c2AgZGVmaW5pdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzI6MzQuODIxNjI1NjY4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA0MjQ1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZjcHVfbWVtc2xvdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMyNT1zdGF0aWMgYm9vbCBjaGVja19tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc3B0ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzI4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzI5OlxcdGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzMwLVxcdGlmICh1bmxpa2VseShnZW4gXFx1MDAyNiBLVk1fTUVNU0xPVF9HRU5fVVBEQVRFX0lOX1BST0dSRVNTKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jPTk0PXU2NCBtYWtlX21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBnZm4sIHVuc2lnbmVkIGludCBhY2Nlc3MpXFxuYXJjaC94ODYva3ZtL21tdS9zcHRlLmMtOTUte1xcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jOjk2OlxcdHU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cXHUwMDNlZ2VuZXJhdGlvbiBcXHUwMDI2IE1NSU9fU1BURV9HRU5fTUFTSztcXG5hcmNoL3g4Ni9rdm0vbW11L3NwdGUuYy05Ny1cXHR1NjQgc3B0ZSA9IGdlbmVyYXRpb25fbW1pb19zcHRlX21hc2soZ2VuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD0zMTM9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaC0zMTUte1xcbmFyY2gveDg2L2t2bS94ODYuaDozMTY6XFx0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbmFyY2gveDg2L2t2bS94ODYuaC0zMTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMyLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzMzOlxcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbmFyY2gveDg2L2t2bS94ODYuaC0zMzQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMjozNS4xMjIwNTY4MDlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1MzM5NTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgYm9pbHMgZG93biB0byB1c2luZyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGRpcmVjdGx5LCByZXBsYWNpbmcgdGhlIG9sZGVyIGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pYCBhcHByb2FjaC4gVGhhdCdzIHRoZSBkaWZmZXJlbmNlLCB0aGUgc2luZ2xlIGNoYW5nZSB0aGF0J3MgYmVpbmcgbWFkZS4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IE15IGluaXRpYWwgYW5hbHlzaXMgcG9pbnRzIHRoYXQgSSBhbSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgc3VnZ2VzdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBoZXJlLiBSaWdodCwgY29uZmlybWVkLiBUaHVzLCBJIHdpbGwgc3RhdGUgbXkgcmVhc29uaW5nIGZvciB0aGlzIGNvbmNsdXNpb24gaW4gdGhlIGNvbW1lbnRzIGZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LiBJbiBsaWdodCBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkwLCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjQwLjM3NTQ1NDYyM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgd2F5IEtWTSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBnZW5lcmF0aW9uIGZvciBhIHZDUFUsIHN3aXRjaGluZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAoZS5nLiwgU01NIHZzIG5vbi1TTU0pIGlzIHVzZWQgd2hlbiBjYWNoaW5nIE1NSU8gaW5mbyBvciBtYXRjaGluZyB0aGUgTU1JTyBnZW5lcmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgaW52b2x2ZSBpbmNvcnJlY3QgY2FjaGluZyBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVxcdTAwM2Vrdm0pYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgLiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlIChlLmcuLCBTTU0gdnMgbm9uLVNNTSkgaXMgdXNlZCB3aGVuIGNhY2hpbmcgTU1JTyBpbmZvIG9yIG1hdGNoaW5nIHRoZSBNTUlPIGdlbmVyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBpbnZvbHZlIGluY29ycmVjdCBjYWNoaW5nIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 14:10:28 +0000 UTC FinishedAt: 2026-08-07 14:32:42 +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": "c6e127b88c34edb335186d49d5edaed369e97a34", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_SMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "c6e127b88c34edb335186d49d5edaed369e97a34", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_SMM" ], "series_id": "e4d4acba-da47-4013-b475-78c478bd1c25" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_page_fault", "x86_emulate_instruction" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgd2F5IEtWTSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBnZW5lcmF0aW9uIGZvciBhIHZDUFUsIHN3aXRjaGluZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgLiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlIChlLmcuLCBTTU0gdnMgbm9uLVNNTSkgaXMgdXNlZCB3aGVuIGNhY2hpbmcgTU1JTyBpbmZvIG9yIG1hdGNoaW5nIHRoZSBNTUlPIGdlbmVyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBpbnZvbHZlIGluY29ycmVjdCBjYWNoaW5nIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIEtWTSB4ODYgTU1JTyBjYWNoaW5nIHRvIHVzZSB0aGUgdkNQVSYjMzk7cyBjdXJyZW50IG1lbXNsb3RzICh3aGljaCBhY2NvdW50cyBmb3IgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAvIFNNTSBhZGRyZXNzIHNwYWNlcykgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgbWVtc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0gTU1JTyBoYW5kbGluZyBhbmQgcGFnZSBmYXVsdCBlbXVsYXRpb24gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGd1ZXN0IFZNLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2MDRjMzZiMmVlNDUyMTg2ZWFiNGFjNTBkMjJjNmMxNmUwZGNlMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE0OjI5OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdGd2YV90IGd2YSwgZ2ZuX3QgZ2ZuLCB1bnNpZ25lZCBhY2Nlc3MpXG4ge1xuLVx0dTY0IGdlbiA9IGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlZ2VuZXJhdGlvbjtcbiYjNDM7XHR1NjQgZ2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbiBcbiBcdGlmICh1bmxpa2VseShnZW4gXHUwMDI2IEtWTV9NRU1TTE9UX0dFTl9VUERBVEVfSU5fUFJPR1JFU1MpKVxuIFx0XHRyZXR1cm47XG5AQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlZ2VuZXJhdGlvbjtcbiYjNDM7XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVx1MDAzZWdlbmVyYXRpb247XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJiMzOTtzIGN1cnJlbnQgbWVtc2xvdHMgKHdoaWNoIGFjY291bnRzIGZvciBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIC8gU01NIGFkZHJlc3Mgc3BhY2VzKSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgZGVmYXVsdCBtZW1zbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSBNTUlPIGhhbmRsaW5nIGFuZCBwYWdlIGZhdWx0IGVtdWxhdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGEgZ3Vlc3QgVk0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYwNGMzNmIyZWU0NTIxODZlYWI0YWM1MGQyMmM2YzE2ZTBkY2UzNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTQ6Mjk6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJZ3ZhX3QgZ3ZhLCBnZm5fdCBnZm4sIHVuc2lnbmVkIGFjY2VzcykKIHsKLQl1NjQgZ2VuID0ga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb247CiYjNDM7CXU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIAogCWlmICh1bmxpa2VseShnZW4gJmFtcDsgS1ZNX01FTVNMT1RfR0VOX1VQREFURV9JTl9QUk9HUkVTUykpCiAJCXJldHVybjsKQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LSZndDthcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LSZndDtrdm0pLSZndDtnZW5lcmF0aW9uOwomIzQzOwlyZXR1cm4gdmNwdS0mZ3Q7YXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MgoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcGxheWluZyBhcm91bmQgaW4gYGFyY2gveDg2L2t2bS94ODYuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpdCYjMzk7cyBhIHN0cnVjdHVyYWwgY2hhbmdlLCBhbmQgdGhhdCBtZWFucyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gVGhleSYjMzk7cmUgdG91Y2hpbmcgaG93IG1lbW9yeSBzbG90IGdlbmVyYXRpb25zIGFyZSBhY2Nlc3NlZCB3aXRoaW4gdGhlIEtWTSB4ODYgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgYWNjZXNzb3IgaW4gYHZjcHVfY2FjaGVfbW1pb19pbmZvYCBhbmQgYHZjcHVfbWF0Y2hfbW1pb19nZW5gIGZyb20gdGhlIGRpcmVjdCBga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb25gIHRvIHRoZSBmdW5jdGlvbiBjYWxsIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbmAuIEZ1bmN0aW9uIGNhbGxzIGFyZSB0eXBpY2FsbHkgcHJlZmVycmVkIGZvciBlbmNhcHN1bGF0aW9uIG9yIHBvdGVudGlhbGx5IGZvciBmdXR1cmUgZmxleGliaWxpdHkuIEkmIzM5O20gd29uZGVyaW5nIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVlcGx5IGV4YW1pbmUgdGhlIGNvbnRleHRzIHdoZXJlIGB2Y3B1X2NhY2hlX21taW9faW5mb2AgYW5kIGB2Y3B1X21hdGNoX21taW9fZ2VuYCBhcmUgdXNlZC4gSSBoYXZlIHRvIGFzc2VzcyBpZiB0aGlzIG1vZGlmaWNhdGlvbiBpcyBtZXJlbHkgY29zbWV0aWMgYW5kIGltcHJvdmluZyBjb2RlIHJlYWRhYmlsaXR5LCBvciBpZiBpdCBpbmRpY2F0ZXMgYSBtb3JlIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGdlbmVyYXRpb24gbnVtYmVyIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBpcyB1c2VkIGluIHRoZSBNTUlPIHBhdGguIFRoZSBjaGFuZ2Ugc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGNoYW5nZSBpbiBob3cgdGhlIHZpcnR1YWwgQ1BVIGludGVyYWN0cyB3aXRoIGl0cyBtZW1vcnkuIEkgaGF2ZSB0byBlbnN1cmUgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9jYWNoZV9tbWlvX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9MzU2Mj1zdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM1NzItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM1NzM6XHR2Y3B1X2NhY2hlX21taW9faW5mbyh2Y3B1LCBndmEsIGZhdWx0LVx1MDAzZWdmbixcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU3NC1cdFx0XHQgICAgIGFjY2VzcyBcdTAwMjYgc2hhZG93X21taW9fYWNjZXNzX21hc2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDUwMj1zdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI0LVx0XHR0cmFjZV9oYW5kbGVfbW1pb19wYWdlX2ZhdWx0KGFkZHIsIGdmbiwgYWNjZXNzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUyNTpcdFx0dmNwdV9jYWNoZV9tbWlvX2luZm8odmNwdSwgYWRkciwgZ2ZuLCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI2LVx0XHRyZXR1cm4gUkVUX1BGX0VNVUxBVEU7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTMwOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zMTItXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzEzOnN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzE0LVx0XHRcdFx0XHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjcHVfbWF0Y2hfbW1pb19nZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuaD0zMTM9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMwLVxuYXJjaC94ODYva3ZtL3g4Ni5oOjMzMTpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2dlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMyLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzUwPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzUxLXtcbmFyY2gveDg2L2t2bS94ODYuaDozNTI6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2dlbih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLm1taW9fZ3ZhIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1My1cdCAgICAgIHZjcHUtXHUwMDNlYXJjaC5tbWlvX2d2YSA9PSAoZ3ZhIFx1MDAyNiBQQUdFX01BU0spKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zNTk9c3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzYwLXtcbmFyY2gveDg2L2t2bS94ODYuaDozNjE6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2dlbih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2ZuIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5oLTM2Mi1cdCAgICAgIHZjcHUtXHUwMDNlYXJjaC5tbWlvX2dmbiA9PSBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMQoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEtWTSB4ODYgTU1JTyBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgYHZjcHVfY2FjaGVfbW1pb19pbmZvYCBhbmQgYHZjcHVfbWF0Y2hfbW1pb19nZW5gIGZ1bmN0aW9ucy4gU3RyYWlnaHQgYXdheSwgSSBzZWUgdGhleSYjMzk7cmUgZGVmaW5lZCBpbmxpbmUgd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGV5JiMzOTtyZSBwcm9iYWJseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgZGVzaWduZWQgZm9yIGlubGluaW5nIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuCgpOb3csIHdoZXJlIGFyZSB0aGV5ICp1c2VkKj8gSSYjMzk7bSBzZWVpbmcgdGhhdCBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGdldHMgY2FsbGVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIHNwZWNpZmljYWxseSBpbiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGFuZCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAuIEdpdmVuIHRob3NlIGZ1bmN0aW9uIG5hbWVzLCBpdCYjMzk7cyBjbGVhciB0aGF0IGB2Y3B1X2NhY2hlX21taW9faW5mb2AgaXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgTWVtb3J5LU1hcHBlZCBJL08gKE1NSU8pIGZhdWx0cyDigJMgYSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZ3Vlc3QtdG8taG9zdCBNTVUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbiB0aGUgTU1VIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgbGlrZWx5IGJlaW5nIHVzZWQgdG8gY2hlY2sgaWYgdGhlIE1NSU8gYWNjZXNzIGlzIGNhY2hlZCwgYW5kIGlmIG5vdCwgdG8gdXBkYXRlIHRoZSBjYWNoZSB3aXRoIGluZm9ybWF0aW9uLgoKVGhlbiB0aGVyZSYjMzk7cyBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHZjcHVfbWF0Y2hfbW1pb19ndmFgIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dwYWAgYWxzbyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IG1hdGNoIGEgR3Vlc3QgVmlydHVhbCBBZGRyZXNzIChHVkEpIG9yIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgKEdQQSkgdG8gYW4gTU1JTyByZWdpb24uIFNvLCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgaXMgcHJvYmFibHkgYSBjb3JlIG1hdGNoaW5nIGNvbXBvbmVudC4KSSYjMzk7bSBndWVzc2luZyB0aGUgZ2VuZXJhbCBpZGVhIGlzIHRoaXM6IFdoZW4gYSBndWVzdCBhY2Nlc3NlcyBhbiBNTUlPIHJlZ2lvbiwgdGhlcmUgbmVlZHMgdG8gYmUgYSBjaGVjayBmb3Igd2hldGhlciB0aGUgZ2l2ZW4gbWVtb3J5IGFjY2VzcyBpcyBhY3R1YWxseSBhbiBNTUlPIHJlcXVlc3QuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGNsZWFybHkgZXNzZW50aWFsIGluIHRoYXQgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIHRoZXkmIzM5O3JlIHVzZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgTU1JTyBoYW5kbGluZyBsb2dpYywgYnV0IHRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjcHVfbWF0Y2hfbW1pb19ndmEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDQwND1zdGF0aWMgYm9vbCBtbWlvX2luZm9faW5fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDE1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NDE2Olx0cmV0dXJuIHZjcHVfbWF0Y2hfbW1pb19ndmEodmNwdSwgYWRkcik7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0MTctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MDY0PXN0YXRpYyBpbnQgdmNwdV9tbWlvX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA3Ni1cdCAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNzc6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2d2YSh2Y3B1LCBndmEpIFx1MDAyNlx1MDAyNiAoIWlzX3BhZ2luZyh2Y3B1KSB8fFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNzgtXHQgICAgIXBlcm1pc3Npb25fZmF1bHQodmNwdSwgdmNwdS1cdTAwM2VhcmNoLndhbGtfbW11LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zNDI9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2xlYXJfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zNDktXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzUwOnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X21hdGNoX21taW9fZ3BhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0MDQ9c3RhdGljIGJvb2wgbW1pb19pbmZvX2luX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQxMy1cdGlmIChkaXJlY3QpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ0MTQ6XHRcdHJldHVybiB2Y3B1X21hdGNoX21taW9fZ3BhKHZjcHUsIGFkZHIpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDE1LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MDQ5PXN0YXRpYyBpbnQgdmNwdV9pc19tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MDU1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNTY6XHRpZiAodmNwdV9tYXRjaF9tbWlvX2dwYSh2Y3B1LCBncGEpKSB7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODA1Ny1cdFx0dHJhY2VfdmNwdV9tYXRjaF9tbWlvKGd2YSwgZ3BhLCB3cml0ZSwgdHJ1ZSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTM1MD1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2d2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zNTgtXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzU5OnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuYXJjaC94ODYva3ZtL3g4Ni5oLTM2MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NQoJCQkJCQkJb3V0cHV0OiA4OQoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gTU1JTyBDYWNoaW5nIFBhdGNoIGFuZCBJZGVudGlmeWluZyBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBob3cgS1ZNIGhhbmRsZXMgTU1JTyBnZW5lcmF0aW9uIGNhY2hpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHVzaW5nIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAgaW5zdGVhZCBvZiBga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSlgLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbiwgbGlrZWx5IHRpZWQgdG8gc2NlbmFyaW9zIHdoZXJlIHdlIGhhdmUgbXVsdGlwbGUgYWRkcmVzcyBzcGFjZXMsIGxpa2Ugd2l0aCBTTU0gdnMuIHRoZSBub3JtYWwgZXhlY3V0aW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSBtYWtpbmcgdGhpcyBjaGFuZ2U7IGl0JiMzOTtzIGxpa2VseSBhIG1vcmUgcHJlY2lzZSBvciBlZmZpY2llbnQgd2F5IHRvIG1hbmFnZSB0aGUgbWVtb3J5IHNsb3QgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gdkNQVS4KClRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIGB2Y3B1X2NhY2hlX21taW9faW5mb2AgYW5kIGB2Y3B1X21hdGNoX21taW9fZ2VuYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5oYCwgYW5kIHRoZXkgYXJlIGNhbGxlZCBieSBzZXZlcmFsIHJvdXRpbmVzIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYG1taW9faW5mb19pbl9jYWNoZWAsIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAsIGFuZCBgdmNwdV9pc19tbWlvX2dwYWAuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCB0aG9zZSBmdW5jdGlvbnMgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpTcGVjaWZpY2FsbHksIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYHZjcHVfbW1pb19ndmFfdG9fZ3BhYCwgYW5kIGB2Y3B1X2lzX21taW9fZ3BhYCBhcmUgYWxsIHByaW1lIGNhbmRpZGF0ZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBga3ZtX3ZjcHVfbWVtc2xvdHNgIGlzIGRlZmluZWQgY29ycmVjdGx5LCBJIHNob3VsZCBjaGVjayB0aGF0IGluIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLiBUaGUgS1ZNIGNvbmZpZyBvcHRpb24gaXMgc2V0LCB0aGF0JiMzOTtzIGdvb2QuCgpBbHJpZ2h0LCB0aGUgbmV4dCB0aGluZyBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmUgb3Igc3RhdGljLiBSZW1lbWJlciwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgc29saWQgQVBJIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0byBiZSBlZmZlY3RpdmUuIExldCYjMzk7cyBzZWUuLi4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBhbmQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgIGFyZSAqc3RhdGljKiBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgcHJvYmxlbSBzaW5jZSBJIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBUaGF04oCZcyBwcm9iYWJseSBub3Qgd2hhdCBJIHNob3VsZCB0YXJnZXQuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cCwgYW5kIGZpbmQgdGhlICpjYWxsZXJzKiBvZiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAuIEkgbmVlZCB0byB0cmFjayB0aGUgY29udHJvbCBmbG93IGZyb20gdGhlIEFQSSBlbnRyeXBvaW50cywgaW5zdGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX21taW9fcGFnZV9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NDYxPXN0YXRpYyBib29sIGdldF9tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgdTY0ICpzcHRlcClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MDEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MDI6c3RhdGljIGludCBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTAzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MjQ6XHRcdHRyYWNlX2hhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoYWRkciwgZ2ZuLCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI1LVx0XHR2Y3B1X2NhY2hlX21taW9faW5mbyh2Y3B1LCBhZGRyLCBnZm4sIGFjY2Vzcyk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTE2PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NDMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1NDQ6XHRcdHIgPSBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHZjcHUsIGNyMl9vcl9ncGEsIGRpcmVjdCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NDUtXHRcdGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU3Mi1cdC8qXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1NzM6XHQgKiBOb25lIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCksIG9yXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NzQtXHQgKiBrdm1fbW11X3dyaXRlX3Byb3RlY3RfZmF1bHQoKSByZXR1cm4gUkVUX1BGX0NPTlRJTlVFLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX25vc2xvdF9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNTM5PXN0YXRpYyBpbnQga3ZtX2hhbmRsZV9lcnJvcl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU2MS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzU2MjpzdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU2My1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NzAxPXN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzI5LVx0aWYgKHVubGlrZWx5KCFzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDczMDpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzMxLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc1OC1cdFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3NTk6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzYwLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDgwMi1cdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDgwMzpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQzCgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIEVudHJ5cG9pbnQqKgoKQWxyaWdodCwgc28gYGt2bV9tbXVfcGFnZV9mYXVsdGAgaXMgYSBjcml0aWNhbCBlbnRyeXBvaW50IGZ1bmN0aW9uIGFuZCwgaW1wb3J0YW50bHksIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgdG8gYnJvYWRlciB1c2UuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgaW1tZWRpYXRlIGNvbnRleHQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyAqdXNlZCouIFRpbWUgdG8gdHJhY2Ugd2hlcmUgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGltcGxpY2F0aW9ucyB3aGVuIHRoYXQgZmF1bHQgb2NjdXJzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAgYW5kIGB2Y3B1X2lzX21taW9fZ3BhYCwgYXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBwYWdlIGZhdWx0LCBzaG91bGQgYmUgaWxsdW1pbmF0aW5nLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHNob3cgbWUgd2hlcmUgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmF1bHQgaXMgYmVpbmcgdHJpZ2dlcmVkLCBhbGxvd2luZyBtZSB0byBzdGFydCBjb25zdHJ1Y3RpbmcgYSBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgcmlza3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9tbWlvX2d2YV90b19ncGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTgwNDk9c3RhdGljIGludCB2Y3B1X2lzX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjMtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODA2NDpzdGF0aWMgaW50IHZjcHVfbW1pb19ndmFfdG9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA2NS1cdFx0XHRcdGdwYV90ICpncGEsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgxMjA9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDMtXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3g4Ni5jOjgxNDQ6XHRcdHJldCA9IHZjcHVfbW1pb19ndmFfdG9fZ3BhKHZjcHUsIGFkZHIsIFx1MDAyNmdwYSwgZXhjZXB0aW9uLCB3cml0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODE0NS1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9pc19tbWlvX2dwYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9ODA0Nz1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoaGFuZGxlX3VkKTtcbmFyY2gveDg2L2t2bS94ODYuYy04MDQ4LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNDk6c3RhdGljIGludCB2Y3B1X2lzX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA1MC1cdFx0XHQgICAgZ3BhX3QgZ3BhLCBib29sIHdyaXRlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MDY0PXN0YXRpYyBpbnQgdmNwdV9tbWlvX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA5MC1cbmFyY2gveDg2L2t2bS94ODYuYzo4MDkxOlx0cmV0dXJuIHZjcHVfaXNfbW1pb19ncGEodmNwdSwgZ3ZhLCAqZ3BhLCB3cml0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODA5Mi19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgxMjA9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDEtXHRcdGdwYSA9IGN0eHQtXHUwMDNlZ3BhX3ZhbDtcbmFyY2gveDg2L2t2bS94ODYuYzo4MTQyOlx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDMtXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgKioKCk9rYXksIHNvIEkgc2VlIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGhhcyBmaWxlLXNjb3BlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHVzZSBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJiMzOTtzIGNhbGxpbmcgdGhpcyB0aGluZy4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgd2lsbCByZXZlYWwgaXRzIHJvbGUgYW5kIGNvbnRleHQgd2l0aGluIHRoZSBlbXVsYXRvcuKAmXMgYXJjaGl0ZWN0dXJlLiBUaGlzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgbW9kaWZ5aW5nLCBvciBzaW1wbHkgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGZpbmQgdGhvc2UgY2FsbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9ODEwOD1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTE5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxMjA6c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG5hcmNoL3g4Ni9rdm0veDg2LmMtODEyMS1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgxOTU9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MjM2LVx0XHRub3cgPSAtYWRkciBcdTAwMjYgflBBR0VfTUFTSztcbmFyY2gveDg2L2t2bS94ODYuYzo4MjM3Olx0XHRyYyA9IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZShhZGRyLCB2YWwsIG5vdywgZXhjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMzgtXHRcdFx0XHRcdFx0IHZjcHUsIG9wcyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyNDgtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI0OTpcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcbmFyY2gveDg2L2t2bS94ODYuYy04MjUwLVx0XHRcdFx0XHQgdmNwdSwgb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX3JlYWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTgxMDg9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODExOS1cbmFyY2gveDg2L2t2bS94ODYuYzo4MTIwOnN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxMjEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTk0LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxOTU6c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxOTYtXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MjM2LVx0XHRub3cgPSAtYWRkciBcdTAwMjYgflBBR0VfTUFTSztcbmFyY2gveDg2L2t2bS94ODYuYzo4MjM3Olx0XHRyYyA9IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZShhZGRyLCB2YWwsIG5vdywgZXhjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMzgtXHRcdFx0XHRcdFx0IHZjcHUsIG9wcyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyNDgtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI0OTpcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcbmFyY2gveDg2L2t2bS94ODYuYy04MjUwLVx0XHRcdFx0XHQgdmNwdSwgb3BzKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODI3ND1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyODUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI4NjpcdHJldHVybiBlbXVsYXRvcl9yZWFkX3dyaXRlKGN0eHQsIGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbiwgXHUwMDI2b3BzKTtcbmFyY2gveDg2L2t2bS94ODYuYy04Mjg3LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODI4OT1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MzAwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjgzMDE6XHRyZXR1cm4gZW11bGF0b3JfcmVhZF93cml0ZShjdHh0LCBhZGRyLCAodm9pZCAqKXZhbCwgYnl0ZXMsIGV4Y2VwdGlvbiwgXHUwMDI2b3BzKTtcbmFyY2gveDg2L2t2bS94ODYuYy04MzAyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBLVk0gTU1JTyBHZW5lcmF0aW9uIENhY2hpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byB0aGUgS1ZNIE1NSU8gZ2VuZXJhdGlvbiBjYWNoaW5nLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBgeDg2X2VtdWxhdGVfb3BzYCBhcyBhIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkgc2VlIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmUgYXJlIGBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkYCBhbmQgYGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkYCwgd2hpY2ggYXJlLCBvZiBjb3Vyc2UsIHVzZWQgd2l0aGluIHRoYXQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlICpkaXJlY3RseSogaW52b2x2ZWQgaW4gdGhlIE1NSU8gcGF0aCwgYW5kIHRodXMsIGhpZ2hseSBsaWtlbHkgdG8gYmUgaW1wYWN0ZWQgYnkgdGhlc2UgY2FjaGluZyBtb2RpZmljYXRpb25zLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgbG9vayBsaWtlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiBoYW5kbGluZyBtZW1vcnkgYWNjZXNzIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gcmVzcGVjdGl2ZWx5LgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Npbmcgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgY291bGQgdHJpZ2dlciBvciBiZSBhZmZlY3RlZCBieSB0aGUgTU1JTyBjYWNoaW5nIHN0cmF0ZWd5LiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGluaXRpYWwgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTgxOTU9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MjY4LVx0ICogYWZ0ZXIgY29tcGxldGluZyBlbXVsYXRpb24gKHNlZSB0aGUgY2hlY2sgb24gdmNwdS1cdTAwM2VtbWlvX25lZWRlZCBpblxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyNjk6XHQgKiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpKS5cbmFyY2gveDg2L2t2bS94ODYuYy04MjcwLVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk0MTk9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MjAtXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQyMTppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MjItXHRcdFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05NjQxPWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSlcbmFyY2gveDg2L2t2bS94ODYuYy05NjQyLXtcbmFyY2gveDg2L2t2bS94ODYuYzo5NjQzOlx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIGVtdWxhdGlvbl90eXBlLCBOVUxMLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy05NjQ0LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTY0Nz1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05NjQ5LXtcbmFyY2gveDg2L2t2bS94ODYuYzo5NjUwOlx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIGluc24sIGluc25fbGVuKTtcbmFyY2gveDg2L2t2bS94ODYuYy05NjUxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1NSU8gQ2FjaGluZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIEtWTSYjMzk7cyBNTUlPIGNhY2hpbmcgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuaGAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHR3ZWFraW5nIGhvdyB0aGUgYGdlbmVyYXRpb25gIGNvdW50ZXIgZm9yIE1NSU8gbWVtc2xvdHMgaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBzd2l0Y2hpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb25gIHRvIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbmAuIFRoaXMgaXMgcHJldHR5IGNyaXRpY2FsIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB3aGljaCBtZW1vcnkgc2xvdHMgYXJlIGNvbnNpZGVyZWQgd2hlbiB0aGUgS1ZNIGNoZWNrcyB0byBzZWUgaWYgTU1JTyBhY2Nlc3NlcyBjYW4gYmUgY2FjaGVkLgoKTXkgaW1tZWRpYXRlIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgb3JpZ2luYWwgYXBwcm9hY2gsIHVzaW5nIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAsIHdhcyBsaWtlbHkgcmVmZXJlbmNpbmcgdGhlIGRlZmF1bHQgYWRkcmVzcyBzcGFjZSYjMzk7cyBtZW1zbG90cyAoYWRkcmVzcyBzcGFjZSAwKS4gVGhlIG5ldyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGNhbGwgaXMgbXVjaCBiZXR0ZXIgYmVjYXVzZSBpdCBwcm92aWRlcyB0aGUgbWVtc2xvdHMgc3BlY2lmaWMgdG8gdGhlIHZDUFUmIzM5O3MgKmN1cnJlbnQqIGFkZHJlc3Mgc3BhY2UsIHdoaWNoIGNvdWxkIGJlIFNNTSBvciBub3JtYWwuIFRoaXMgcmVzb2x2ZXMgd2hhdCBJIGltbWVkaWF0ZWx5IGFzc3VtZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgTU1JTyBnZW5lcmF0aW9uIGNoZWNrIHdhcyBjb21wYXJpbmcgYWdhaW5zdCB0aGUgd3JvbmcgbWVtb3J5IHJlZ2lvbiYjMzk7cyBnZW5lcmF0aW9uIGNvdW50LCB3aGljaCB3b3VsZCBiZSByZWFsbHkgbmFzdHkuCgpDb25zaWRlcmluZyBRRU1VJiMzOTtzIGhlYXZ5IHJlbGlhbmNlIG9uIEtWTSwgdGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGltcGFjdHMgcmVhbC13b3JsZCBkZXBsb3ltZW50cy4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiBjb3JlIE1NSU8gaGFuZGxpbmcsIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIGZ1enppbmcgZWZmb3J0cyB0byBpdC4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgZGlnIGludG8gYXJlYXMgd2hlcmUgdGhpcyBmaXggaXMgY3JpdGljYWwuCgpUbyB0aGF0IGVuZCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGt2bV92Y3B1X21lbXNsb3RzYCBzbyBJIGNhbiB1bmRlcnN0YW5kIGl0cyBmdWxsIGltcGxpY2F0aW9ucy4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzOiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAsIGB2Y3B1X2lzX21taW9fZ3BhYCwgYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAsIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBUaGVzZSBhcmUgYWxsIHBvdGVudGlhbCBob3Qgc3BvdHMgcmVsYXRlZCB0byBNTUlPIGhhbmRsaW5nIHdoZXJlIHRoaXMgY291bGQgaGF2ZSBhIHZpc2libGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9tZW1zbG90cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTA4Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtc2xvdHMgKmt2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEwOTEtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTA5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtc2xvdHMgKmt2bV92Y3B1X21lbXNsb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMDkzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTIxOT1zdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpnZm5fdG9fbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTIyMDpzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyMjEtc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rdm1faG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqa3ZtX21lbXNsb3RzKHN0cnVjdCBrdm0gKmt2bSlcbjEwODg6XHR7XG4xMDg5Olx0XHRyZXR1cm4gX19rdm1fbWVtc2xvdHMoa3ZtLCAwKTtcbjEwOTA6XHR9XG4xMDkxOlx0XG4xMDkyOlx0c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4xMDkzOlx0e1xuMTA5NDpcdFx0aW50IGFzX2lkID0ga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KTtcbjEwOTU6XHRcbjEwOTY6XHRcdHJldHVybiBfX2t2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSwgYXNfaWQpO1xuMTA5NzpcdH1cbjEwOTg6XHRcbjEwOTk6XHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RzX2VtcHR5KHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzKVxuMTEwMDpcdHtcbjExMDE6XHRcdHJldHVybiBSQl9FTVBUWV9ST09UKFx1MDAyNnNsb3RzLVx1MDAzZWdmbl90cmVlKTtcbjExMDI6XHR9XG4xMTAzOlx0XG4xMTA0Olx0Ym9vbCBrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShzdHJ1Y3Qga3ZtICprdm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNTUlPIENhY2hpbmcgRml4IGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBga3ZtX3ZjcHVfbWVtc2xvdHNgIGxldmVyYWdlcyBga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KWAuIEFuZCBvbiB4ODYsIHRoaXMgcmV0dXJucyB0aGUgU01NIGFkZHJlc3Mgc3BhY2UgSUQgaWYgdGhlIHZDUFUgaXMgaW4gU01NIG1vZGUsIG90aGVyd2lzZSBpdCByZXR1cm5zIHplcm8uIFJpZ2h0LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgTU1JTyBjYWNoaW5nIHNwZWNpZmljYWxseSBpbiB0aGUgU01NIHN0YXRlLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIEkgbWVhbiwgYW55IGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIG1vZGUgbGlrZSBTTU0sIHNjcmVhbXMgZm9yIHRob3JvdWdoIHRlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gc29tZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW1tZWRpYXRlbHkganVtcCBvdXQuIFRob3NlIGFyZSBhbGwga2V5IGNvbXBvbmVudHMgaW4gaGFuZGxpbmcgbWVtb3J5IGFjY2VzcyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgoKSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGFuZCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAuLi4gVGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhleSBhcmUgc3Vic3RhbnRpYWwuIEkgcmVhbGx5IG5lZWQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGlubGluZWQgb3Igbm90LiBUaGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nIGRpZmZlciBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBJZiB0aGV5IGFyZSBpbmxpbmVkLCBmdXp6aW5nIGJlY29tZXMgbW9yZSBjb21wbGV4OyBpZiBub3QsIHRoZXkgYmVjb21lIGV4Y2VsbGVudCBlbnRyeSBwb2ludHMgZm9yIGFuYWx5c2lzIGFuZCBkaXJlY3RlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfbW1pb19wYWdlX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0NjE9c3RhdGljIGJvb2wgZ2V0X21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVwKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUwMS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUwMjpzdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MDMte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUyMy1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUyNDpcdFx0dHJhY2VfaGFuZGxlX21taW9fcGFnZV9mYXVsdChhZGRyLCBnZm4sIGFjY2Vzcyk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjUtXHRcdHZjcHVfY2FjaGVfbW1pb19pbmZvKHZjcHUsIGFkZHIsIGdmbiwgYWNjZXNzKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1MTY9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU0My1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU0NDpcdFx0ciA9IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQodmNwdSwgY3IyX29yX2dwYSwgZGlyZWN0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU0NS1cdFx0aWYgKHIgPT0gUkVUX1BGX0VNVUxBVEUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTcyLVx0LypcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU3MzpcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU3NC1cdCAqIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdCgpIHJldHVybiBSRVRfUEZfQ09OVElOVUUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0gRmF1bHQgSGFuZGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZmF1bHQgaGFuZGxlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIGV4ZWN1dGlvbiBjaGFyYWN0ZXJpc3RpY3MuIFRoZSBmdW5jdGlvbiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGFsc28gbm90IGlubGluZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFya3MgaXQgYXMgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGltcG9ydGFudCwgYSBnb29kIHRhcmdldCBmb3IgZGVlcGVyIGluc3BlY3Rpb24uIFNpbWlsYXJseSwgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBpcyBhbHNvIHN0YXRpYyBhbmQgbm90IGlubGluZWQsIHdoaWNoIHJhaXNlcyBhIHJlZCBmbGFnLiBXb3J0aCBpbnZlc3RpZ2F0aW5nIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGVyZS4KCk5vdywgYGt2bV9tbXVfcGFnZV9mYXVsdGAgaXMgZGVsaWJlcmF0ZWx5IG1hcmtlZCBgbm9pbmxpbmVgLCB3aGljaCBtZWFucyB3ZSYjMzk7dmUgZ290IGEgZGVmaW5pdGUgcG9pbnQgb2YgZW50cnkgdG8gZXhhbWluZS4gIEl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGlubGluZWQgaW50byBhbnkgY2FsbGluZyBjb250ZXh0LCBtZWFuaW5nIHdlIGNhbiBhbmFseXplIGl0IGFzIGEgZGlzY3JldGUgdW5pdC4KCkFuZCB0aGVuIHdlIGhhdmUgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYC4gVGhpcyBvbmUmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBLVk0gQVBJLCBtYWtpbmcgaXQgYW5vdGhlciBjcnVjaWFsIHBvaW50IG9mIGZvY3VzLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgbW9yZSBjb21wbGV4IGluc3RydWN0aW9uIGVtdWxhdGlvbiwgYW5kIHRoYXQgZW11bGF0aW9uIGNhbiBiZSBleHBlbnNpdmUsIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdGhhdCBuZWVkcyBzb21lIGNvbnNpZGVyYXRpb24uCgpTbywgdG8gc3VtbWFyaXplIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBJIG5lZWQgdG8gbG9vayBpbnRvIGFyZToKCiogICBga3ZtX21tdV9wYWdlX2ZhdWx0YAoqICAgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYAoqICAgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YAoqICAgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgCgpHaXZlbiB0aGlzLCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgS1ZNYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGRyaXZlcyB0aGVzZSBzeW1ib2xzLCBtYWtpbmcgc3VyZSB0aGF0IGl0JiMzOTtzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBTTU0gQ29udGV4dCoqCgpBbHJpZ2h0LCB0aGlzIHBhdGNoLi4uIGl0JiMzOTtzIGRlZmluaXRlbHkgZ290IFNNTSB3cml0dGVuIGFsbCBvdmVyIGl0LiBTZWVpbmcgdGhlIHVzZSBvZiBga3ZtX3ZjcHVfbWVtc2xvdHNgIGltbWVkaWF0ZWx5IHJpbmdzIGFsYXJtIGJlbGxzLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24mIzM5O3MgZGVwZW5kZW5jZSBvbiBga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KWAgaXMgYSBkZWFkIGdpdmVhd2F5LCBhbmQgdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyB0aGUgU01NIGFkZHJlc3Mgc3BhY2UgSUQuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gd2hhdCBga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZGAgaXMgZG9pbmcuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTTU0gaXMgaW50ZWdyYXRlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gVGhpcyB3aWxsIGRlZmluaXRlbHkgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgY2hhbmdlcyBwcm9wb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzIwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOgoKKipMb2NhdGluZyB0aGUgS1ZNIE1lbW9yeSBTbG90IElEKioKCk9rYXksIGxldCBtZSB0aGluay4gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkYCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBIbW0sIHdoZXJlIHdvdWxkIHRoZXkgdHlwaWNhbGx5IHN0YXNoIHNvbWV0aGluZyBsaWtlIHRoYXQ/IEl0JiMzOTtzIHJlbGF0ZWQgdG8gS1ZNIGFyY2hpdGVjdHVyZSwgc28gSSBzaG91bGQgYmUgbG9va2luZyBpbiB0aGUgYGFyY2gveDg2YCBkaXJlY3RvcnksIHByb2JhYmx5IHVuZGVyIGBpbmNsdWRlL2FzbS9gLiBBbmQgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRvIGJlIGhvc3QtcmVsYXRlZC4gU28sIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9ob3N0LmhgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4gRmluZ2VycyBjcm9zc2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTI0Mzc9ZW51bSB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yNDUyLSMgZGVmaW5lIGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pID8gMSA6IDIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjI0NTM6IyBkZWZpbmUga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZCh2Y3B1KSAoKHZjcHUpLVx1MDAzZWFyY2guaGZsYWdzIFx1MDAyNiBIRl9TTU1fTUFTSyA/IDEgOiAwKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yNDU0LSMgZGVmaW5lIGt2bV9tZW1zbG90c19mb3Jfc3B0ZV9yb2xlKGt2bSwgcm9sZSkgX19rdm1fbWVtc2xvdHMoa3ZtLCAocm9sZSkuc21tKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxOAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAxNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtWTSB4ODYgTU1JTyBIYW5kbGluZyB3aXRoIFNNTSBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoaXMgY29tbWl0IGlzIGNoYW5naW5nIGhvdyB0aGUgbWVtb3J5IHNsb3QgZ2VuZXJhdGlvbiBpcyByZXRyaWV2ZWQgZm9yIE1NSU8gY2FjaGluZyB3aXRoaW4gdGhlIEtWTSB4ODYgY29kZS4gIFByZXZpb3VzbHksIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKS0mZ3Q7Z2VuZXJhdGlvbmAgd2FzIGJlaW5nIHVzZWQsIGVmZmVjdGl2ZWx5IGFsd2F5cyByZXRyaWV2aW5nIGZyb20gYWRkcmVzcyBzcGFjZSAwLiBUaGUgY2hhbmdlIHVzZXMgYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLSZndDtnZW5lcmF0aW9uYCBpbnN0ZWFkLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCAqY29uc2lkZXJzKiB0aGUgdkNQVSYjMzk7cyBTTU0gbW9kZSBieSBjYWxsaW5nIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpYCwgd2hpY2ggcmV0dXJucyAxIGlmIGluIFNNTS4gU28sIGlmIHRoZSB2Q1BVIGlzIGluIFNNTSwgdGhlIHJlbGV2YW50IG1lbXNsb3QgSUQgaXMgMSwgb3RoZXJ3aXNlIGl0IGlzIDAuIFRoaXMgYWZmZWN0cyBNTUlPIGNhY2hpbmcsIGFuZCBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuICBDYW4gd2UgdHJpZ2dlciB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFic29sdXRlbHksIEtWTSAqaXMqIHRoZSBoeXBlcnZpc29yLiAgV2UmIzM5O3JlIGZ1enppbmcgdGhlIGtlcm5lbCwgd2hpY2ggY2FuIGJlIGFjdGluZyBhcyB0aGUgS1ZNIGhvc3QuIFN5emthbGxlciBoYXMgZXhjZWxsZW50IHN1cHBvcnQgZm9yIGZ1enppbmcgS1ZNLCBpbmNsdWRpbmcgY3JlYXRpbmcgVk1zIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0uIFdlIGNhbiBkZWZpbml0ZWx5IGhpdCB0aGlzIGNvZGUgcGF0aC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBvcHRpbWFsIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlIGhhdmUgc2V2ZXJhbCBvcHRpb25zIG1lbnRpb25lZDogYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCwgYGVtdWxhdG9yX3JlYWRfd3JpdGVgLCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLCBhbmQgYGt2bV9lbXVsYXRlX2luc3RydWN0aW9uYCBhbmQgYGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyYC4gIElkZWFsbHksIHdlJiMzOTtkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCYjMzk7cyBzZWUuLi4gSW5pdGlhbGx5LCBJIHdvdWxkIGhhdmUgc2VsZWN0ZWQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBzaW5jZSB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBNTUlPLiBCdXQsIHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBjYWxscyBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGFuZCBga3ZtX21tdV9mYXVsdGluX3BmbmAgY2FsbHMgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpcyBhbHNvIGEgZ29vZCBwb3NzaWJpbGl0eS4gTGV0JiMzOTtzIGRpZyBkZWVwZXI6CgpXZSBoYXZlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWdzIGFyZSBlbmFibGVkLiBTaW5jZSB0aGlzIGludm9sdmVzIFNNTSwgYEtWTV9TTU1gIGlzIG5lY2Vzc2FyeSwgYnV0IGBLVk1gIGlzIGZvdW5kYXRpb25hbCwgb2YgY291cnNlLiAgQSBxdWljayBjaGVjayBvZiBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmZpcm1zIGBLVk1fU01NYCAqZGVwZW5kcyogb24gYEtWTWAsIHNvIHdlJiMzOTtyZSBnb29kLgoKTGV0JiMzOTtzIGV2YWx1YXRlIHRoZSBjYW5kaWRhdGUgZW50cnkgcG9pbnRzLiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgaXMgc3RhdGljLCBidXQgbm90IGlubGluZS4gIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGNhbGxzIHRoaXMuIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgaXMgYWxzbyBzdGF0aWMuIEl0JiMzOTtzIGNhbGxlZCBieSBga3ZtX21tdV9mYXVsdGluX3BmbmAgKHN0YXRpYyksIGFuZCBpcyBjYWxsZWQgYnkgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGlzIG5vdCBzdGF0aWMuICBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rIHByb21pc2luZywgbGV0JiMzOTtzIGNoZWNrIHRoZWlyIGRlZmluaXRpb25zLgoKYGBgYwppbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsCmBgYApgYGBjCmludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsCgkJCSAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbikKYGBgCgpFeGNlbGxlbnQsIHRoZXkmIzM5O3JlIG5vdCBzdGF0aWMsIHNvIHdlIGNhbiBjb25zaWRlciB0aGVtIGFzIGVudHJ5cG9pbnRzLgoKVGhlIG90aGVyIGVudHJ5IHBvaW50IGBrdm1fbW11X2RvX3BhZ2VfZmF1bHRgIGlzIGlubGluZS4KClRoZXJlZm9yZSwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIHRoZSBiZXN0IGNob2ljZXMgZm9yIGZvY3VzIHN5bWJvbHMuCgpMb29raW5nIGF0IHRoZSBkaWZmIGFnYWluLCB0aGUgZml4IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBidWc6IE1NSU8gZ2VuZXJhdGlvbiBjYWNoaW5nIHdhcyB1c2luZyBtZW1zbG90cyBmcm9tIHRoZSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgaW5zdGVhZCBvZiB0aGUgdkNQVSYjMzk7cyBjdXJyZW50IHNwYWNlLCBlc3BlY2lhbGx5IGltcGFjdGluZyBTTU0uICBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UuICBHaXZlbiB0aGF0IHdlIGNhbiBleGVyY2lzZSB0aGlzIGNvZGUgd2l0aCBTeXprYWxsZXIsIHdoaWNoIGhhcyBleGNlbGxlbnQgS1ZNIHN1cHBvcnQsIGFuZCB3ZSBoYXZlIGlkZW50aWZpZWQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpcyEgTm93LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBLVk0geDg2IE1NSU8gY2FjaGluZyB0byB1c2UgdGhlIHZDUFUmIzM5O3MgY3VycmVudCBtZW1zbG90cyAod2hpY2ggYWNjb3VudHMgZm9yIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgLyBTTU0gYWRkcmVzcyBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBkZWZhdWx0IG1lbXNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNIE1NSU8gaGFuZGxpbmcgYW5kIHBhZ2UgZmF1bHQgZW11bGF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBndWVzdCBWTSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJiMzOTtzIGN1cnJlbnQgbWVtc2xvdHMgKHdoaWNoIGFjY291bnRzIGZvciBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIC8gU01NIGFkZHJlc3Mgc3BhY2VzKSBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyB0aGUgZGVmYXVsdCBtZW1zbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSBNTUlPIGhhbmRsaW5nIGFuZCBwYWdlIGZhdWx0IGVtdWxhdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGEgZ3Vlc3QgVk0sIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHdheSBLVk0gcmV0cmlldmVzIHRoZSBtZW1vcnkgc2xvdHMgZ2VuZXJhdGlvbiBmb3IgYSB2Q1BVLCBzd2l0Y2hpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAoZS5nLiwgU01NIHZzIG5vbi1TTU0pIGlzIHVzZWQgd2hlbiBjYWNoaW5nIE1NSU8gaW5mbyBvciBtYXRjaGluZyB0aGUgTU1JTyBnZW5lcmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgaW52b2x2ZSBpbmNvcnJlY3QgY2FjaGluZyBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYwNGMzNmIyZWU0NTIxODZlYWI0YWM1MGQyMmM2YzE2ZTBkY2UzNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTQ6Mjk6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJZ3ZhX3QgZ3ZhLCBnZm5fdCBnZm4sIHVuc2lnbmVkIGFjY2VzcykKIHsKLQl1NjQgZ2VuID0ga3ZtX21lbXNsb3RzKHZjcHUtJmd0O2t2bSktJmd0O2dlbmVyYXRpb247CiYjNDM7CXU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIAogCWlmICh1bmxpa2VseShnZW4gJmFtcDsgS1ZNX01FTVNMT1RfR0VOX1VQREFURV9JTl9QUk9HUkVTUykpCiAJCXJldHVybjsKQEAgLTMzMCw3ICYjNDM7MzMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LSZndDthcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LSZndDtrdm0pLSZndDtnZW5lcmF0aW9uOwomIzQzOwlyZXR1cm4gdmNwdS0mZ3Q7YXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS0mZ3Q7Z2VuZXJhdGlvbjsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1lbW9yeSBTbG90IEdlbmVyYXRpb24gRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gbnVtYmVyIHdpdGhpbiBLVk0mIzM5O3MgeDg2IGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCBpbiBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoZSBjb21taXQgbWVzc2FnZSBoaW50cyBhdCBhIHByb2JsZW0gcmVsYXRlZCB0byBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZ2VuZXJhdGlvbiBudW1iZXJzIGJlaW5nIHVzZWQsIHBvc3NpYmx5IHN0ZW1taW5nIGZyb20gU2VjdXJlIE1vZGUgTWFuYWdlbWVudCAoU01NKSBvciBtdWx0aXBsZSBhZGRyZXNzIHNwYWNlcyB3aXRoaW4gdGhlIFZNLgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBga3ZtX3ZjcHVfbWVtc2xvdHNgICpkb2VzKi4gTXkgZ3Vlc3MgaXMgdGhhdCBpdCBwcm9iYWJseSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBzdHJ1Y3R1cmUsIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAsIGJ1dCB3aXRoIHNvbWUgYWRkcmVzcyBzcGFjZSBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIHZDUFUmIzM5O3MgZmxhZ3MgLSBtYXliZSBpdCYjMzk7cyBjaGVja2luZyBgdmNwdS0mZ3Q7YXJjaC5oZmxhZ3NgIGZvciB0aGUgU01NIGJpdCBvciBzb21ldGhpbmcgc2ltaWxhci4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBhbGwgaXQmIzM5O3MgZG9pbmcgaXMgY2hhbmdpbmcgdGhlIHBvaW50ZXIgZGVyZWZlcmVuY2VkIHRvIGdldCB0aGUgbWVtc2xvdHMgZ2VuZXJhdGlvbi4gSSBoYWQgYSBxdWljayBtb21lbnQgb2YgY29uY2VybiBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gVGhlIHBhdGNoIGlzIHNpbXBseSBzZWxlY3RpbmcgYSBkaWZmZXJlbnQgbWVtc2xvdHMgc3RydWN0dXJlIGJhc2VkIG9uIHNvbWUgY29udGV4dCwgdGhlbiBncmFiYmluZyB0aGUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBpdC4KClRoaXMgaXMgYSBsb2dpYyBidWcgZml4LCB0aGVuLiBJdCYjMzk7cyBsaWtlbHkgcmVzb2x2aW5nIGEgZnVuY3Rpb25hbCBpc3N1ZS4gVGhlIGNoYW5nZSBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaW4gc2VsZWN0aW5nIHRoZSAqcmlnaHQqIG1lbXNsb3RzIGdlbmVyYXRpb24sIHdoaWNoIGNvdWxkIGhhdmUgbGVkIHRvIGEgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciwgbW9yZSBsaWtlbHksIGp1c3QgaW5jb3JyZWN0IGNhY2hpbmcgYW5kL29yIGJlaGF2aW9yLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgdGhlIGNvbnRyb2wgZmxvdyBhbHRlcmVkIHRvIGV4cG9zZSBzdWNoIG1lbW9yeSB0byBLTVNBTi4gTWVtb3J5IGNvcnJ1cHRpb24sIGlmIGl0IGV4aXN0ZWQsIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuIEtNU0FOIGlzbiYjMzk7dCB0aGUga2V5IGhlcmUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBzZWVtcyBhcHByb3ByaWF0ZS4KCk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV92Y3B1X21lbXNsb3RzYCBkZWZpbml0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X21lbXNsb3RzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMyNT1zdGF0aWMgYm9vbCBjaGVja19tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc3B0ZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMyOC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzI5Olx0Z2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzMwLVx0aWYgKHVubGlrZWx5KGdlbiBcdTAwMjYgS1ZNX01FTVNMT1RfR0VOX1VQREFURV9JTl9QUk9HUkVTUykpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9zcHRlLmM9OTQ9dTY0IG1ha2VfbW1pb19zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGdmbiwgdW5zaWduZWQgaW50IGFjY2VzcylcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jLTk1LXtcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jOjk2Olx0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVx1MDAzZWdlbmVyYXRpb24gXHUwMDI2IE1NSU9fU1BURV9HRU5fTUFTSztcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jLTk3LVx0dTY0IHNwdGUgPSBnZW5lcmF0aW9uX21taW9fc3B0ZV9tYXNrKGdlbik7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTMxMz1zdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuaC0zMTUte1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMxNjpcdHU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cdTAwM2VnZW5lcmF0aW9uO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTMxNy1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuaC0zMzIte1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMzMzpcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gubW1pb19nZW4gPT0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbmFyY2gveDg2L2t2bS94ODYuaC0zMzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkwCgkJCQkJCQlvdXRwdXQ6IDE2NgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgYm9pbHMgZG93biB0byB1c2luZyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGRpcmVjdGx5LCByZXBsYWNpbmcgdGhlIG9sZGVyIGBrdm1fbWVtc2xvdHModmNwdS0mZ3Q7a3ZtKWAgYXBwcm9hY2guIFRoYXQmIzM5O3MgdGhlIGRpZmZlcmVuY2UsIHRoZSBzaW5nbGUgY2hhbmdlIHRoYXQmIzM5O3MgYmVpbmcgbWFkZS4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IE15IGluaXRpYWwgYW5hbHlzaXMgcG9pbnRzIHRoYXQgSSBhbSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgc3VnZ2VzdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBoZXJlLiBSaWdodCwgY29uZmlybWVkLiBUaHVzLCBJIHdpbGwgc3RhdGUgbXkgcmVhc29uaW5nIGZvciB0aGlzIGNvbmNsdXNpb24gaW4gdGhlIGNvbW1lbnRzIGZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LiBJbiBsaWdodCBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgIHRvIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UgKGUuZy4sIFNNTSB2cyBub24tU01NKSBpcyB1c2VkIHdoZW4gY2FjaGluZyBNTUlPIGluZm8gb3IgbWF0Y2hpbmcgdGhlIE1NSU8gZ2VuZXJhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGludm9sdmUgaW5jb3JyZWN0IGNhY2hpbmcgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZywgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgIHRvIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAuIFRoaXMgaXMgYSBsb2dpYyBmaXggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UgKGUuZy4sIFNNTSB2cyBub24tU01NKSBpcyB1c2VkIHdoZW4gY2FjaGluZyBNTUlPIGluZm8gb3IgbWF0Y2hpbmcgdGhlIE1NSU8gZ2VuZXJhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGludm9sdmUgaW5jb3JyZWN0IGNhY2hpbmcgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBiZXR0ZXIgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZywgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjI4LjMwMTY3OTE1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjA3MzgwNTQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVxcdTAwM2Vrdm0pYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgLiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlIChlLmcuLCBTTU0gdnMgbm9uLVNNTSkgaXMgdXNlZCB3aGVuIGNhY2hpbmcgTU1JTyBpbmZvIG9yIG1hdGNoaW5nIHRoZSBNTUlPIGdlbmVyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBpbnZvbHZlIGluY29ycmVjdCBjYWNoaW5nIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJ3MgY3VycmVudCBtZW1zbG90cyAod2hpY2ggYWNjb3VudHMgZm9yIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgLyBTTU0gYWRkcmVzcyBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBkZWZhdWx0IG1lbXNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNIE1NSU8gaGFuZGxpbmcgYW5kIHBhZ2UgZmF1bHQgZW11bGF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBndWVzdCBWTSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjI4LjMwMTY4NDE3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1MjYxMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDYwNGMzNmIyZWU0NTIxODZlYWI0YWM1MGQyMmM2YzE2ZTBkY2UzNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE0OjI5OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxcbmluZGV4IDlkZTU3N2VmOWM5NzQuLmE2ZDg2ZDNkY2ZmNjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuQEAgLTMxMyw3ICszMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxcbiB7XFxuLVxcdHU2NCBnZW4gPSBrdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlZ2VuZXJhdGlvbjtcXG4rXFx0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGdlbiBcXHUwMDI2IEtWTV9NRU1TTE9UX0dFTl9VUERBVEVfSU5fUFJPR1JFU1MpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VnZW5lcmF0aW9uO1xcbitcXHRyZXR1cm4gdmNwdS1cXHUwMDNlYXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cXHUwMDNlZ2VuZXJhdGlvbjtcXG4gfVxcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6MjguODE3Nzg4MDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzYwMzA0NTY4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fU01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgS1ZNIHg4NiBNTUlPIGNhY2hpbmcgdG8gdXNlIHRoZSB2Q1BVJ3MgY3VycmVudCBtZW1zbG90cyAod2hpY2ggYWNjb3VudHMgZm9yIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgLyBTTU0gYWRkcmVzcyBzcGFjZXMpIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBkZWZhdWx0IG1lbXNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNIE1NSU8gaGFuZGxpbmcgYW5kIHBhZ2UgZmF1bHQgZW11bGF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBndWVzdCBWTSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2MDRjMzZiMmVlNDUyMTg2ZWFiNGFjNTBkMjJjNmMxNmUwZGNlMzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE0OjI5OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCA5ZGU1NzdlZjljOTc0Li5hNmQ4NmQzZGNmZjYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX25vbmNhbm9uaWNhbF9pbnZscGdfYWRkcmVzcyh1NjQgbGEsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxuIHtcbi1cdHU2NCBnZW4gPSBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pLVx1MDAzZWdlbmVyYXRpb247XG4rXHR1NjQgZ2VuID0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbiBcbiBcdGlmICh1bmxpa2VseShnZW4gXHUwMDI2IEtWTV9NRU1TTE9UX0dFTl9VUERBVEVfSU5fUFJPR1JFU1MpKVxuIFx0XHRyZXR1cm47XG5AQCAtMzMwLDcgKzMzMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gc3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19nZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gubW1pb19nZW4gPT0ga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uO1xuK1x0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5tbWlvX2dlbiA9PSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cdTAwM2VnZW5lcmF0aW9uO1xuIH1cbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6MjguODE3Nzg5MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQ2NDczODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwbGF5aW5nIGFyb3VuZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGl0J3MgYSBzdHJ1Y3R1cmFsIGNoYW5nZSwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZXkncmUgdG91Y2hpbmcgaG93IG1lbW9yeSBzbG90IGdlbmVyYXRpb25zIGFyZSBhY2Nlc3NlZCB3aXRoaW4gdGhlIEtWTSB4ODYgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBhY2Nlc3NvciBpbiBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgZnJvbSB0aGUgZGlyZWN0IGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pLVx1MDAzZWdlbmVyYXRpb25gIHRvIHRoZSBmdW5jdGlvbiBjYWxsIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cdTAwM2VnZW5lcmF0aW9uYC4gRnVuY3Rpb24gY2FsbHMgYXJlIHR5cGljYWxseSBwcmVmZXJyZWQgZm9yIGVuY2Fwc3VsYXRpb24gb3IgcG90ZW50aWFsbHkgZm9yIGZ1dHVyZSBmbGV4aWJpbGl0eS4gSSdtIHdvbmRlcmluZyB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVlcGx5IGV4YW1pbmUgdGhlIGNvbnRleHRzIHdoZXJlIGB2Y3B1X2NhY2hlX21taW9faW5mb2AgYW5kIGB2Y3B1X21hdGNoX21taW9fZ2VuYCBhcmUgdXNlZC4gSSBoYXZlIHRvIGFzc2VzcyBpZiB0aGlzIG1vZGlmaWNhdGlvbiBpcyBtZXJlbHkgY29zbWV0aWMgYW5kIGltcHJvdmluZyBjb2RlIHJlYWRhYmlsaXR5LCBvciBpZiBpdCBpbmRpY2F0ZXMgYSBtb3JlIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGdlbmVyYXRpb24gbnVtYmVyIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBpcyB1c2VkIGluIHRoZSBNTUlPIHBhdGguIFRoZSBjaGFuZ2Ugc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGNoYW5nZSBpbiBob3cgdGhlIHZpcnR1YWwgQ1BVIGludGVyYWN0cyB3aXRoIGl0cyBtZW1vcnkuIEkgaGF2ZSB0byBlbnN1cmUgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MiwiT3V0cHV0VG9rZW5zIjo3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjQyLjI4MjUzMTIyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzQyNDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y3B1X2NhY2hlX21taW9faW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzU2Mj1zdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU3Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM1NzM6XFx0dmNwdV9jYWNoZV9tbWlvX2luZm8odmNwdSwgZ3ZhLCBmYXVsdC1cXHUwMDNlZ2ZuLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU3NC1cXHRcXHRcXHQgICAgIGFjY2VzcyBcXHUwMDI2IHNoYWRvd19tbWlvX2FjY2Vzc19tYXNrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDUwMj1zdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjQtXFx0XFx0dHJhY2VfaGFuZGxlX21taW9fcGFnZV9mYXVsdChhZGRyLCBnZm4sIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTI1OlxcdFxcdHZjcHVfY2FjaGVfbW1pb19pbmZvKHZjcHUsIGFkZHIsIGdmbiwgYWNjZXNzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjYtXFx0XFx0cmV0dXJuIFJFVF9QRl9FTVVMQVRFO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTMwOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKHU2NCBsYSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMxMi1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzEzOnN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X2NhY2hlX21taW9faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMxNC1cXHRcXHRcXHRcXHRcXHRndmFfdCBndmEsIGdmbl90IGdmbiwgdW5zaWduZWQgYWNjZXNzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDoyOTo0Mi4zNjk5NjA4NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4NTkwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9tYXRjaF9tbWlvX2dlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuaD0zMTM9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaC0zMzAtXFxuYXJjaC94ODYva3ZtL3g4Ni5oOjMzMTpzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2dlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzUwPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEpXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1MS17XFxuYXJjaC94ODYva3ZtL3g4Ni5oOjM1MjpcXHRpZiAodmNwdV9tYXRjaF9tbWlvX2dlbih2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ3ZhIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1My1cXHQgICAgICB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ3ZhID09IChndmEgXFx1MDAyNiBQQUdFX01BU0spKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTM1OT1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzYwLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzYxOlxcdGlmICh2Y3B1X21hdGNoX21taW9fZ2VuKHZjcHUpIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWFyY2gubW1pb19nZm4gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzYyLVxcdCAgICAgIHZjcHUtXFx1MDAzZWFyY2gubW1pb19nZm4gPT0gZ3BhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjI5OjQyLjQzNDgyNTc5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODExODQ2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBNTUlPIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiB0aGVzZSBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgZnVuY3Rpb25zLiBTdHJhaWdodCBhd2F5LCBJIHNlZSB0aGV5J3JlIGRlZmluZWQgaW5saW5lIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5oYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSdyZSBwcm9iYWJseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgZGVzaWduZWQgZm9yIGlubGluaW5nIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuXG5cbk5vdywgd2hlcmUgYXJlIHRoZXkgKnVzZWQqPyBJJ20gc2VlaW5nIHRoYXQgYHZjcHVfY2FjaGVfbW1pb19pbmZvYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBzcGVjaWZpY2FsbHkgaW4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBhbmQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLiBHaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lcywgaXQncyBjbGVhciB0aGF0IGB2Y3B1X2NhY2hlX21taW9faW5mb2AgaXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgTWVtb3J5LU1hcHBlZCBJL08gKE1NSU8pIGZhdWx0cyDigJMgYSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZ3Vlc3QtdG8taG9zdCBNTVUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhlIGZhY3QgdGhhdCBpdCdzIGluIHRoZSBNTVUgY29kZSBzdWdnZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBsaWtlbHkgYmVpbmcgdXNlZCB0byBjaGVjayBpZiB0aGUgTU1JTyBhY2Nlc3MgaXMgY2FjaGVkLCBhbmQgaWYgbm90LCB0byB1cGRhdGUgdGhlIGNhY2hlIHdpdGggaW5mb3JtYXRpb24uXG5cblRoZW4gdGhlcmUncyBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHZjcHVfbWF0Y2hfbW1pb19ndmFgIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dwYWAgYWxzbyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IG1hdGNoIGEgR3Vlc3QgVmlydHVhbCBBZGRyZXNzIChHVkEpIG9yIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgKEdQQSkgdG8gYW4gTU1JTyByZWdpb24uIFNvLCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgaXMgcHJvYmFibHkgYSBjb3JlIG1hdGNoaW5nIGNvbXBvbmVudC5cbkknbSBndWVzc2luZyB0aGUgZ2VuZXJhbCBpZGVhIGlzIHRoaXM6IFdoZW4gYSBndWVzdCBhY2Nlc3NlcyBhbiBNTUlPIHJlZ2lvbiwgdGhlcmUgbmVlZHMgdG8gYmUgYSBjaGVjayBmb3Igd2hldGhlciB0aGUgZ2l2ZW4gbWVtb3J5IGFjY2VzcyBpcyBhY3R1YWxseSBhbiBNTUlPIHJlcXVlc3QuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGNsZWFybHkgZXNzZW50aWFsIGluIHRoYXQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgdGhleSdyZSB1c2VkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIE1NSU8gaGFuZGxpbmcgbG9naWMsIGJ1dCB0aGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzMSwiT3V0cHV0VG9rZW5zIjo3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6NDguNzE2MDEyNTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTMwMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfbWF0Y2hfbW1pb19ndmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0MDQ9c3RhdGljIGJvb2wgbW1pb19pbmZvX2luX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDE1LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDQxNjpcXHRyZXR1cm4gdmNwdV9tYXRjaF9tbWlvX2d2YSh2Y3B1LCBhZGRyKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0MTctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTgwNjQ9c3RhdGljIGludCB2Y3B1X21taW9fZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNzYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNzc6XFx0aWYgKHZjcHVfbWF0Y2hfbW1pb19ndmEodmNwdSwgZ3ZhKSBcXHUwMDI2XFx1MDAyNiAoIWlzX3BhZ2luZyh2Y3B1KSB8fFxcbmFyY2gveDg2L2t2bS94ODYuYy04MDc4LVxcdCAgICAhcGVybWlzc2lvbl9mYXVsdCh2Y3B1LCB2Y3B1LVxcdTAwM2VhcmNoLndhbGtfbW11LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTM0Mj1zdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jbGVhcl9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzQ5LVxcbmFyY2gveDg2L2t2bS94ODYuaDozNTA6c3RhdGljIGlubGluZSBib29sIHZjcHVfbWF0Y2hfbW1pb19ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6Mjk6NDguODAxOTQ2Njc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDUzNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfbWF0Y2hfbW1pb19ncGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0MDQ9c3RhdGljIGJvb2wgbW1pb19pbmZvX2luX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NDEzLVxcdGlmIChkaXJlY3QpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NDE0OlxcdFxcdHJldHVybiB2Y3B1X21hdGNoX21taW9fZ3BhKHZjcHUsIGFkZHIpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQxNS1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MDQ5PXN0YXRpYyBpbnQgdmNwdV9pc19tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNTUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNTY6XFx0aWYgKHZjcHVfbWF0Y2hfbW1pb19ncGEodmNwdSwgZ3BhKSkge1xcbmFyY2gveDg2L2t2bS94ODYuYy04MDU3LVxcdFxcdHRyYWNlX3ZjcHVfbWF0Y2hfbW1pbyhndmEsIGdwYSwgd3JpdGUsIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTM1MD1zdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tYXRjaF9tbWlvX2d2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM1OC1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzU5OnN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbmFyY2gveDg2L2t2bS94ODYuaC0zNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDoyOTo0OC45MDA0MDU0ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQ2NDc5MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTU1JTyBDYWNoaW5nIFBhdGNoIGFuZCBJZGVudGlmeWluZyBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBLVk0gaGFuZGxlcyBNTUlPIGdlbmVyYXRpb24gY2FjaGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdXNpbmcgYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCBpbnN0ZWFkIG9mIGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pYC4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24sIGxpa2VseSB0aWVkIHRvIHNjZW5hcmlvcyB3aGVyZSB3ZSBoYXZlIG11bHRpcGxlIGFkZHJlc3Mgc3BhY2VzLCBsaWtlIHdpdGggU01NIHZzLiB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBtYWtpbmcgdGhpcyBjaGFuZ2U7IGl0J3MgbGlrZWx5IGEgbW9yZSBwcmVjaXNlIG9yIGVmZmljaWVudCB3YXkgdG8gbWFuYWdlIHRoZSBtZW1vcnkgc2xvdCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiB2Q1BVLlxuXG5UaGUgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAgaW4gYGFyY2gveDg2L2t2bS94ODYuaGAsIGFuZCB0aGV5IGFyZSBjYWxsZWQgYnkgc2V2ZXJhbCByb3V0aW5lcyB3aXRoaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYG1taW9faW5mb19pbl9jYWNoZWAsIGB2Y3B1X21taW9fZ3ZhX3RvX2dwYWAsIGFuZCBgdmNwdV9pc19tbWlvX2dwYWAuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCB0aG9zZSBmdW5jdGlvbnMgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cblNwZWNpZmljYWxseSwgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCwgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBgdmNwdV9tbWlvX2d2YV90b19ncGFgLCBhbmQgYHZjcHVfaXNfbW1pb19ncGFgIGFyZSBhbGwgcHJpbWUgY2FuZGlkYXRlcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBrdm1fdmNwdV9tZW1zbG90c2AgaXMgZGVmaW5lZCBjb3JyZWN0bHksIEkgc2hvdWxkIGNoZWNrIHRoYXQgaW4gYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAuIFRoZSBLVk0gY29uZmlnIG9wdGlvbiBpcyBzZXQsIHRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCB0aGluZyBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmUgb3Igc3RhdGljLiBSZW1lbWJlciwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgc29saWQgQVBJIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0byBiZSBlZmZlY3RpdmUuIExldCdzIHNlZS4uLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGFuZCBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgYXJlICpzdGF0aWMqIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gUmlnaHQsIHRoYXQncyBhIHByb2JsZW0gc2luY2UgSSB3YW50IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gVGhhdOKAmXMgcHJvYmFibHkgbm90IHdoYXQgSSBzaG91bGQgdGFyZ2V0LlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwLCBhbmQgZmluZCB0aGUgKmNhbGxlcnMqIG9mIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBjb250cm9sIGZsb3cgZnJvbSB0aGUgQVBJIGVudHJ5cG9pbnRzLCBpbnN0ZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg1LCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDowNS4zNjUxOTk3NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDI2MDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfbW1pb19wYWdlX2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NDYxPXN0YXRpYyBib29sIGdldF9tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgdTY0ICpzcHRlcClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUwMS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MDI6c3RhdGljIGludCBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIGJvb2wgZGlyZWN0KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUwMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1MjMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTI0OlxcdFxcdHRyYWNlX2hhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoYWRkciwgZ2ZuLCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUyNS1cXHRcXHR2Y3B1X2NhY2hlX21taW9faW5mbyh2Y3B1LCBhZGRyLCBnZm4sIGFjY2Vzcyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1MTY9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTQzLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU0NDpcXHRcXHRyID0gaGFuZGxlX21taW9fcGFnZV9mYXVsdCh2Y3B1LCBjcjJfb3JfZ3BhLCBkaXJlY3QpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU0NS1cXHRcXHRpZiAociA9PSBSRVRfUEZfRU1VTEFURSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU3Mi1cXHQvKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU3MzpcXHQgKiBOb25lIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCksIG9yXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTc0LVxcdCAqIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdCgpIHJldHVybiBSRVRfUEZfQ09OVElOVUUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjA1LjcwNTQ2NTA4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2NzkyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM1Mzk9c3RhdGljIGludCBrdm1faGFuZGxlX2Vycm9yX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM1NjEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNTYyOnN0YXRpYyBpbnQga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzU2My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NzAxPXN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3MjktXFx0aWYgKHVubGlrZWx5KCFzbG90KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3MzA6XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDczMS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc1OC1cXHRcXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3NTk6XFx0XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc2MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDgwMi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFmYXVsdC1cXHUwMDNlc2xvdCB8fCBpc19ub3Nsb3RfcGZuKGZhdWx0LVxcdTAwM2VwZm4pKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ4MDM6XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDgwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6MDUuNzk5MTQ5MzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTU3MTgxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGt2bV9tbXVfcGFnZV9mYXVsdGAgRW50cnlwb2ludCoqXG5cbkFscmlnaHQsIHNvIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGlzIGEgY3JpdGljYWwgZW50cnlwb2ludCBmdW5jdGlvbiBhbmQsIGltcG9ydGFudGx5LCBpdCdzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCB0byBicm9hZGVyIHVzZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byB1bmRlcnN0YW5kIGl0cyBpbW1lZGlhdGUgY29udGV4dCBhbmQgaG93IGl0J3MgYmVpbmcgKnVzZWQqLiBUaW1lIHRvIHRyYWNlIHdoZXJlIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHRoZSBpbXBsaWNhdGlvbnMgd2hlbiB0aGF0IGZhdWx0IG9jY3Vycy4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYHZjcHVfbW1pb19ndmFfdG9fZ3BhYCBhbmQgYHZjcHVfaXNfbW1pb19ncGFgLCBhcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byB0aG9zZSBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHBhZ2UgZmF1bHQsIHNob3VsZCBiZSBpbGx1bWluYXRpbmcuIFRoaXMgd2lsbCBob3BlZnVsbHkgc2hvdyBtZSB3aGVyZSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmYXVsdCBpcyBiZWluZyB0cmlnZ2VyZWQsIGFsbG93aW5nIG1lIHRvIHN0YXJ0IGNvbnN0cnVjdGluZyBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCByaXNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQzLCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjE5Ljk1NjM0MzE3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMDk5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9tbWlvX2d2YV90b19ncGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz04MDQ5PXN0YXRpYyBpbnQgdmNwdV9pc19tbWlvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNjQ6c3RhdGljIGludCB2Y3B1X21taW9fZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLFxcbmFyY2gveDg2L2t2bS94ODYuYy04MDY1LVxcdFxcdFxcdFxcdGdwYV90ICpncGEsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODEyMD1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTQzLVxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxNDQ6XFx0XFx0cmV0ID0gdmNwdV9tbWlvX2d2YV90b19ncGEodmNwdSwgYWRkciwgXFx1MDAyNmdwYSwgZXhjZXB0aW9uLCB3cml0ZSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDUtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjIwLjAxMDM1NjE1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTk5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9pc19tbWlvX2dwYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTgwNDc9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGhhbmRsZV91ZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNDgtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNDk6c3RhdGljIGludCB2Y3B1X2lzX21taW9fZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNTAtXFx0XFx0XFx0ICAgIGdwYV90IGdwYSwgYm9vbCB3cml0ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MDY0PXN0YXRpYyBpbnQgdmNwdV9tbWlvX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MDkwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MDkxOlxcdHJldHVybiB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGd2YSwgKmdwYSwgd3JpdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04MDkyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04MTIwPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxNDEtXFx0XFx0Z3BhID0gY3R4dC1cXHUwMDNlZ3BhX3ZhbDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODE0MjpcXHRcXHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04MTQzLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjIwLjA1NzE4MjUzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk0MjA4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBoYXMgZmlsZS1zY29wZSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtub3cgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaW50ZXJhY3Rpb25zLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJ3MgY2FsbGluZyB0aGlzIHRoaW5nLiBJZGVudGlmeWluZyB0aGUgY2FsbGVycyB3aWxsIHJldmVhbCBpdHMgcm9sZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGVtdWxhdG9y4oCZcyBhcmNoaXRlY3R1cmUuIFRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBtb2RpZnlpbmcsIG9yIHNpbXBseSB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvci4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgZmluZCB0aG9zZSBjYWxscyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODc4MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDoyMy40NTEzOTM1NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzgzMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTgxMDg9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTE5LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MTIwOnN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbmFyY2gveDg2L2t2bS94ODYuYy04MTIxLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODE5NT1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzNi1cXHRcXHRub3cgPSAtYWRkciBcXHUwMDI2IH5QQUdFX01BU0s7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyMzc6XFx0XFx0cmMgPSBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UoYWRkciwgdmFsLCBub3csIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzOC1cXHRcXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MjQ4LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MjQ5OlxcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODI1MC1cXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6MjMuNDk2MTc5NjQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjk0MzgzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDozMS44MjU2MTk4NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzA0NzA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbXVsYXRvcl9yZWFkX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9ODEwOD1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxMTktXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxMjA6c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxMjEtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBieXRlcyxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTk0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MTk1OnN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODE5Ni1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzNi1cXHRcXHRub3cgPSAtYWRkciBcXHUwMDI2IH5QQUdFX01BU0s7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyMzc6XFx0XFx0cmMgPSBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UoYWRkciwgdmFsLCBub3csIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIzOC1cXHRcXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MjQ4LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MjQ5OlxcdHJjID0gZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODI1MC1cXHRcXHRcXHRcXHRcXHQgdmNwdSwgb3BzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04Mjc0PXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04Mjg1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo4Mjg2OlxcdHJldHVybiBlbXVsYXRvcl9yZWFkX3dyaXRlKGN0eHQsIGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbiwgXFx1MDAyNm9wcyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyODctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTgyODk9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MzAwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4MzAxOlxcdHJldHVybiBlbXVsYXRvcl9yZWFkX3dyaXRlKGN0eHQsIGFkZHIsICh2b2lkICopdmFsLCBieXRlcywgZXhjZXB0aW9uLCBcXHUwMDI2b3BzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODMwMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjMyLjAxODY3MTg4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk3MDQ3NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIEtWTSBNTUlPIEdlbmVyYXRpb24gQ2FjaGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtWTSBNTUlPIGdlbmVyYXRpb24gY2FjaGluZywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYHg4Nl9lbXVsYXRlX29wc2AgYXMgYSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0LiBJIHNlZSB0aGF0IHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlIGFyZSBgZW11bGF0b3JfcmVhZF9lbXVsYXRlZGAgYW5kIGBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZGAsIHdoaWNoIGFyZSwgb2YgY291cnNlLCB1c2VkIHdpdGhpbiB0aGF0LiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgKmRpcmVjdGx5KiBpbnZvbHZlZCBpbiB0aGUgTU1JTyBwYXRoLCBhbmQgdGh1cywgaGlnaGx5IGxpa2VseSB0byBiZSBpbXBhY3RlZCBieSB0aGVzZSBjYWNoaW5nIG1vZGlmaWNhdGlvbnMuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZWlyIHJvbGVzIGluIGhhbmRsaW5nIG1lbW9yeSBhY2Nlc3MgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiByZXNwZWN0aXZlbHkuXG5cbkxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzc2luZyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBjb3VsZCB0cmlnZ2VyIG9yIGJlIGFmZmVjdGVkIGJ5IHRoZSBNTUlPIGNhY2hpbmcgc3RyYXRlZ3kuIFRoaXMgaXMgd2hlcmUgSSdsbCBjb25jZW50cmF0ZSBteSBpbml0aWFsIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTA4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6MzguMjE1NzIzMzA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkwNTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTgxOTU9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyNjgtXFx0ICogYWZ0ZXIgY29tcGxldGluZyBlbXVsYXRpb24gKHNlZSB0aGUgY2hlY2sgb24gdmNwdS1cXHUwMDNlbW1pb19uZWVkZWQgaW5cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODI2OTpcXHQgKiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpKS5cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODI3MC1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05NDE5PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTCh4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTQyMC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQyMTppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuYy05NDIyLVxcdFxcdFxcdCAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05NjQxPWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTY0Mi17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk2NDM6XFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIGVtdWxhdGlvbl90eXBlLCBOVUxMLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTY0NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTY0Nz1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk2NDkte1xcbmFyY2gveDg2L2t2bS94ODYuYzo5NjUwOlxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk2NTEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMDozOC4yNjE2MzIxNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ4MzU1Mzc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIE1NSU8gQ2FjaGluZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgS1ZNJ3MgTU1JTyBjYWNoaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHR3ZWFraW5nIGhvdyB0aGUgYGdlbmVyYXRpb25gIGNvdW50ZXIgZm9yIE1NSU8gbWVtc2xvdHMgaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBzd2l0Y2hpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbmAuIFRoaXMgaXMgcHJldHR5IGNyaXRpY2FsIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyB3aGljaCBtZW1vcnkgc2xvdHMgYXJlIGNvbnNpZGVyZWQgd2hlbiB0aGUgS1ZNIGNoZWNrcyB0byBzZWUgaWYgTU1JTyBhY2Nlc3NlcyBjYW4gYmUgY2FjaGVkLlxuXG5NeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcmlnaW5hbCBhcHByb2FjaCwgdXNpbmcgYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgLCB3YXMgbGlrZWx5IHJlZmVyZW5jaW5nIHRoZSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UncyBtZW1zbG90cyAoYWRkcmVzcyBzcGFjZSAwKS4gVGhlIG5ldyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGNhbGwgaXMgbXVjaCBiZXR0ZXIgYmVjYXVzZSBpdCBwcm92aWRlcyB0aGUgbWVtc2xvdHMgc3BlY2lmaWMgdG8gdGhlIHZDUFUncyAqY3VycmVudCogYWRkcmVzcyBzcGFjZSwgd2hpY2ggY291bGQgYmUgU01NIG9yIG5vcm1hbC4gVGhpcyByZXNvbHZlcyB3aGF0IEkgaW1tZWRpYXRlbHkgYXNzdW1lIGlzIGEgYnVnIHdoZXJlIHRoZSBNTUlPIGdlbmVyYXRpb24gY2hlY2sgd2FzIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSB3cm9uZyBtZW1vcnkgcmVnaW9uJ3MgZ2VuZXJhdGlvbiBjb3VudCwgd2hpY2ggd291bGQgYmUgcmVhbGx5IG5hc3R5LlxuXG5Db25zaWRlcmluZyBRRU1VJ3MgaGVhdnkgcmVsaWFuY2Ugb24gS1ZNLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgaW1wYWN0cyByZWFsLXdvcmxkIGRlcGxveW1lbnRzLiBHaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gY29yZSBNTUlPIGhhbmRsaW5nLCBpdCdzIGFic29sdXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIGZ1enppbmcgZWZmb3J0cyB0byBpdC4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgZGlnIGludG8gYXJlYXMgd2hlcmUgdGhpcyBmaXggaXMgY3JpdGljYWwuXG5cblRvIHRoYXQgZW5kLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga3ZtX3ZjcHVfbWVtc2xvdHNgIHNvIEkgY2FuIHVuZGVyc3RhbmQgaXRzIGZ1bGwgaW1wbGljYXRpb25zLiBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY2hhbmdlIGltcGFjdHM6IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YCwgYHZjcHVfbW1pb19ndmFfdG9fZ3BhYCwgYHZjcHVfaXNfbW1pb19ncGFgLCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCwgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFRoZXNlIGFyZSBhbGwgcG90ZW50aWFsIGhvdCBzcG90cyByZWxhdGVkIHRvIE1NSU8gaGFuZGxpbmcgd2hlcmUgdGhpcyBjb3VsZCBoYXZlIGEgdmlzaWJsZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQ4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMwOjUzLjA5NzE3MTkzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5ODc0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZjcHVfbWVtc2xvdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMDg3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqa3ZtX21lbXNsb3RzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMDkxLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMDkyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqa3ZtX3ZjcHVfbWVtc2xvdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMDkzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjE5PXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTIyMDpzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjIxLXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV92Y3B1X2dmbl90b19tZW1zbG90KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzA6NTMuMTY3MTY0NDU5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzc4NDUxMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTA4MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjAzLjU0NTYxOTIzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtc2xvdHMgKmt2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRyZXR1cm4gX19rdm1fbWVtc2xvdHMoa3ZtLCAwKTtcXG4xMDkwOlxcdH1cXG4xMDkxOlxcdFxcbjEwOTI6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICprdm1fdmNwdV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuMTA5MzpcXHR7XFxuMTA5NDpcXHRcXHRpbnQgYXNfaWQgPSBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRcXHRyZXR1cm4gX19rdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtLCBhc19pZCk7XFxuMTA5NzpcXHR9XFxuMTA5ODpcXHRcXG4xMDk5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdHNfZW1wdHkoc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMpXFxuMTEwMDpcXHR7XFxuMTEwMTpcXHRcXHRyZXR1cm4gUkJfRU1QVFlfUk9PVChcXHUwMDI2c2xvdHMtXFx1MDAzZWdmbl90cmVlKTtcXG4xMTAyOlxcdH1cXG4xMTAzOlxcdFxcbjExMDQ6XFx0Ym9vbCBrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eShzdHJ1Y3Qga3ZtICprdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMTowMy41NDU3NjE4NDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyNzY4MTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNTUlPIENhY2hpbmcgRml4IGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBrdm1fdmNwdV9tZW1zbG90c2AgbGV2ZXJhZ2VzIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpYC4gQW5kIG9uIHg4NiwgdGhpcyByZXR1cm5zIHRoZSBTTU0gYWRkcmVzcyBzcGFjZSBJRCBpZiB0aGUgdkNQVSBpcyBpbiBTTU0gbW9kZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgemVyby4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBNTUlPIGNhY2hpbmcgc3BlY2lmaWNhbGx5IGluIHRoZSBTTU0gc3RhdGUuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gSSBtZWFuLCBhbnkgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aGluIGEgY3JpdGljYWwgbW9kZSBsaWtlIFNNTSwgc2NyZWFtcyBmb3IgdGhvcm91Z2ggdGVzdGluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gc29tZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW1tZWRpYXRlbHkganVtcCBvdXQuIFRob3NlIGFyZSBhbGwga2V5IGNvbXBvbmVudHMgaW4gaGFuZGxpbmcgbWVtb3J5IGFjY2VzcyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLlxuXG5IbW0sIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgYW5kIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YC4uLiBUaG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgYW5kIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGV5IGFyZSBzdWJzdGFudGlhbC4gSSByZWFsbHkgbmVlZCB0byBzZWUgaWYgdGhleSdyZSBpbmxpbmVkIG9yIG5vdC4gVGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyBkaWZmZXIgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gdGhlIGFuc3dlci4gSWYgdGhleSBhcmUgaW5saW5lZCwgZnV6emluZyBiZWNvbWVzIG1vcmUgY29tcGxleDsgaWYgbm90LCB0aGV5IGJlY29tZSBleGNlbGxlbnQgZW50cnkgcG9pbnRzIGZvciBhbmFseXNpcyBhbmQgZGlyZWN0ZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMTowOC45NzM0NDY3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMTE4NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ0NjE9c3RhdGljIGJvb2wgZ2V0X21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVwKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTAxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDUwMjpzdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTAzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDUyMy1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1MjQ6XFx0XFx0dHJhY2VfaGFuZGxlX21taW9fcGFnZV9mYXVsdChhZGRyLCBnZm4sIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTI1LVxcdFxcdHZjcHVfY2FjaGVfbW1pb19pbmZvKHZjcHUsIGFkZHIsIGdmbiwgYWNjZXNzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjUxNj1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NDMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTQ0OlxcdFxcdHIgPSBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KHZjcHUsIGNyMl9vcl9ncGEsIGRpcmVjdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTQ1LVxcdFxcdGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTcyLVxcdC8qXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTczOlxcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NzQtXFx0ICoga3ZtX21tdV93cml0ZV9wcm90ZWN0X2ZhdWx0KCkgcmV0dXJuIFJFVF9QRl9DT05USU5VRS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6MDkuMjI0NTcxMjkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjg5ODk0NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBLVk0gRmF1bHQgSGFuZGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZmF1bHQgaGFuZGxlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIGV4ZWN1dGlvbiBjaGFyYWN0ZXJpc3RpY3MuIFRoZSBmdW5jdGlvbiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGFsc28gbm90IGlubGluZWQuIFRoYXQgaW1tZWRpYXRlbHkgbWFya3MgaXQgYXMgYSBmdW5jdGlvbiB0aGF0J3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBhIGdvb2QgdGFyZ2V0IGZvciBkZWVwZXIgaW5zcGVjdGlvbi4gU2ltaWxhcmx5LCBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGFsc28gc3RhdGljIGFuZCBub3QgaW5saW5lZCwgd2hpY2ggcmFpc2VzIGEgcmVkIGZsYWcuIFdvcnRoIGludmVzdGlnYXRpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIHRoZXJlLlxuXG5Ob3csIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGlzIGRlbGliZXJhdGVseSBtYXJrZWQgYG5vaW5saW5lYCwgd2hpY2ggbWVhbnMgd2UndmUgZ290IGEgZGVmaW5pdGUgcG9pbnQgb2YgZW50cnkgdG8gZXhhbWluZS4gIEl0J3MgdW5saWtlbHkgdG8gYmUgaW5saW5lZCBpbnRvIGFueSBjYWxsaW5nIGNvbnRleHQsIG1lYW5pbmcgd2UgY2FuIGFuYWx5emUgaXQgYXMgYSBkaXNjcmV0ZSB1bml0LlxuXG5BbmQgdGhlbiB3ZSBoYXZlIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFRoaXMgb25lJ3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEtWTSBBUEksIG1ha2luZyBpdCBhbm90aGVyIGNydWNpYWwgcG9pbnQgb2YgZm9jdXMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGhhbmRsaW5nIG1vcmUgY29tcGxleCBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIGFuZCB0aGF0IGVtdWxhdGlvbiBjYW4gYmUgZXhwZW5zaXZlLCBzbyB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdGhhdCBuZWVkcyBzb21lIGNvbnNpZGVyYXRpb24uXG5cblNvLCB0byBzdW1tYXJpemUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBsb29rIGludG8gYXJlOlxuXG4qICAgYGt2bV9tbXVfcGFnZV9mYXVsdGBcbiogICBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gXG4qICAgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YFxuKiAgIGBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0YFxuXG5HaXZlbiB0aGlzLCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgS1ZNYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB0aGF0IGRyaXZlcyB0aGVzZSBzeW1ib2xzLCBtYWtpbmcgc3VyZSB0aGF0IGl0J3MgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6MjIuOTE0NDY5Mzg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY0NjE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjIyLjk2NzE0MzI4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzkyNTI1ODkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU01NIENvbnRleHQqKlxuXG5BbHJpZ2h0LCB0aGlzIHBhdGNoLi4uIGl0J3MgZGVmaW5pdGVseSBnb3QgU01NIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFNlZWluZyB0aGUgdXNlIG9mIGBrdm1fdmNwdV9tZW1zbG90c2AgaW1tZWRpYXRlbHkgcmluZ3MgYWxhcm0gYmVsbHMsIGJlY2F1c2UgdGhhdCBmdW5jdGlvbidzIGRlcGVuZGVuY2Ugb24gYGt2bV9hcmNoX3ZjcHVfbWVtc2xvdHNfaWQodmNwdSlgIGlzIGEgZGVhZCBnaXZlYXdheSwgYW5kIHRoaXMgZnVuY3Rpb24gZ2l2ZXMgdXMgdGhlIFNNTSBhZGRyZXNzIHNwYWNlIElELiBUaGF0J3MgdGhlIGtleS4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gTGV0J3MgZGVsdmUgaW50byB3aGF0IGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkYCBpcyBkb2luZy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFNNTSBpcyBpbnRlZ3JhdGVkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGlzIHdpbGwgZGVmaW5pdGVseSBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHRoZSBjaGFuZ2VzIHByb3Bvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjM2Ljg5MjQwNTE5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1NDg1ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfbWVtc2xvdHNfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6MzcuMDcwOTY0NTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mjc4NTEyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkxvY2F0aW5nIHRoZSBLVk0gTWVtb3J5IFNsb3QgSUQqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsuIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkYCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBIbW0sIHdoZXJlIHdvdWxkIHRoZXkgdHlwaWNhbGx5IHN0YXNoIHNvbWV0aGluZyBsaWtlIHRoYXQ/IEl0J3MgcmVsYXRlZCB0byBLVk0gYXJjaGl0ZWN0dXJlLCBzbyBJIHNob3VsZCBiZSBsb29raW5nIGluIHRoZSBgYXJjaC94ODZgIGRpcmVjdG9yeSwgcHJvYmFibHkgdW5kZXIgYGluY2x1ZGUvYXNtL2AuIEFuZCBnaXZlbiB0aGUgbmFtZSwgaXQncyB2ZXJ5IGxpa2VseSB0byBiZSBob3N0LXJlbGF0ZWQuIFNvLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9ob3N0LmhgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4gRmluZ2VycyBjcm9zc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyMCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMxOjUxLjM0OTQ3OTYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyMjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yNDM3PWVudW0ge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yNDUyLSMgZGVmaW5lIGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pID8gMSA6IDIpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyNDUzOiMgZGVmaW5lIGt2bV9hcmNoX3ZjcHVfbWVtc2xvdHNfaWQodmNwdSkgKCh2Y3B1KS1cXHUwMDNlYXJjaC5oZmxhZ3MgXFx1MDAyNiBIRl9TTU1fTUFTSyA/IDEgOiAwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjQ1NC0jIGRlZmluZSBrdm1fbWVtc2xvdHNfZm9yX3NwdGVfcm9sZShrdm0sIHJvbGUpIF9fa3ZtX21lbXNsb3RzKGt2bSwgKHJvbGUpLnNtbSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzE6NTEuMzk4OTA3MzI4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzYxNzgxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtWTSB4ODYgTU1JTyBIYW5kbGluZyB3aXRoIFNNTSBDb250ZXh0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIGNvbW1pdCBpcyBjaGFuZ2luZyBob3cgdGhlIG1lbW9yeSBzbG90IGdlbmVyYXRpb24gaXMgcmV0cmlldmVkIGZvciBNTUlPIGNhY2hpbmcgd2l0aGluIHRoZSBLVk0geDg2IGNvZGUuICBQcmV2aW91c2x5LCBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uYCB3YXMgYmVpbmcgdXNlZCwgZWZmZWN0aXZlbHkgYWx3YXlzIHJldHJpZXZpbmcgZnJvbSBhZGRyZXNzIHNwYWNlIDAuIFRoZSBjaGFuZ2UgdXNlcyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbmAgaW5zdGVhZC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KWAgKmNvbnNpZGVycyogdGhlIHZDUFUncyBTTU0gbW9kZSBieSBjYWxsaW5nIGBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHZjcHUpYCwgd2hpY2ggcmV0dXJucyAxIGlmIGluIFNNTS4gU28sIGlmIHRoZSB2Q1BVIGlzIGluIFNNTSwgdGhlIHJlbGV2YW50IG1lbXNsb3QgSUQgaXMgMSwgb3RoZXJ3aXNlIGl0IGlzIDAuIFRoaXMgYWZmZWN0cyBNTUlPIGNhY2hpbmcsIGFuZCBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eS4gIENhbiB3ZSB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseSwgS1ZNICppcyogdGhlIGh5cGVydmlzb3IuICBXZSdyZSBmdXp6aW5nIHRoZSBrZXJuZWwsIHdoaWNoIGNhbiBiZSBhY3RpbmcgYXMgdGhlIEtWTSBob3N0LiBTeXprYWxsZXIgaGFzIGV4Y2VsbGVudCBzdXBwb3J0IGZvciBmdXp6aW5nIEtWTSwgaW5jbHVkaW5nIGNyZWF0aW5nIFZNcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtLiBXZSBjYW4gZGVmaW5pdGVseSBoaXQgdGhpcyBjb2RlIHBhdGguXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gV2UgaGF2ZSBzZXZlcmFsIG9wdGlvbnMgbWVudGlvbmVkOiBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAsIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgLCBgZW11bGF0b3JfcmVhZF93cml0ZWAsIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAsIGFuZCBga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFuZCBga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXJgLiAgSWRlYWxseSwgd2UnZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBzZWUuLi4gSW5pdGlhbGx5LCBJIHdvdWxkIGhhdmUgc2VsZWN0ZWQgYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgLCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBzaW5jZSB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBNTUlPLiBCdXQsIHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBjYWxscyBgaGFuZGxlX21taW9fcGFnZV9mYXVsdGAsIGFuZCBga3ZtX21tdV9mYXVsdGluX3BmbmAgY2FsbHMgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpcyBhbHNvIGEgZ29vZCBwb3NzaWJpbGl0eS4gTGV0J3MgZGlnIGRlZXBlcjpcblxuV2UgaGF2ZSB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlncyBhcmUgZW5hYmxlZC4gU2luY2UgdGhpcyBpbnZvbHZlcyBTTU0sIGBLVk1fU01NYCBpcyBuZWNlc3NhcnksIGJ1dCBgS1ZNYCBpcyBmb3VuZGF0aW9uYWwsIG9mIGNvdXJzZS4gIEEgcXVpY2sgY2hlY2sgb2YgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBjb25maXJtcyBgS1ZNX1NNTWAgKmRlcGVuZHMqIG9uIGBLVk1gLCBzbyB3ZSdyZSBnb29kLlxuXG5MZXQncyBldmFsdWF0ZSB0aGUgY2FuZGlkYXRlIGVudHJ5IHBvaW50cy4gYGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHRgIGlzIHN0YXRpYywgYnV0IG5vdCBpbmxpbmUuICBga3ZtX21tdV9wYWdlX2ZhdWx0YCBjYWxscyB0aGlzLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGFsc28gc3RhdGljLiBJdCdzIGNhbGxlZCBieSBga3ZtX21tdV9mYXVsdGluX3BmbmAgKHN0YXRpYyksIGFuZCBpcyBjYWxsZWQgYnkgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGlzIG5vdCBzdGF0aWMuICBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rIHByb21pc2luZywgbGV0J3MgY2hlY2sgdGhlaXIgZGVmaW5pdGlvbnMuXG5cbmBgYGNcbmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbmBgYFxuYGBgY1xuaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcblx0XHRcdCAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbmBgYFxuXG5FeGNlbGxlbnQsIHRoZXkncmUgbm90IHN0YXRpYywgc28gd2UgY2FuIGNvbnNpZGVyIHRoZW0gYXMgZW50cnlwb2ludHMuXG5cblRoZSBvdGhlciBlbnRyeSBwb2ludCBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCBpcyBpbmxpbmUuXG5cblRoZXJlZm9yZSwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIHRoZSBiZXN0IGNob2ljZXMgZm9yIGZvY3VzIHN5bWJvbHMuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYgYWdhaW4sIHRoZSBmaXggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1ZzogTU1JTyBnZW5lcmF0aW9uIGNhY2hpbmcgd2FzIHVzaW5nIG1lbXNsb3RzIGZyb20gdGhlIGRlZmF1bHQgYWRkcmVzcyBzcGFjZSBpbnN0ZWFkIG9mIHRoZSB2Q1BVJ3MgY3VycmVudCBzcGFjZSwgZXNwZWNpYWxseSBpbXBhY3RpbmcgU01NLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlLiAgR2l2ZW4gdGhhdCB3ZSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlIHdpdGggU3l6a2FsbGVyLCB3aGljaCBoYXMgZXhjZWxsZW50IEtWTSBzdXBwb3J0LCBhbmQgd2UgaGF2ZSBpZGVudGlmaWVkIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBub24tc3RhdGljIGVudHJ5IHBvaW50cywgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhpcyEgTm93LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxOCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjI0Ljc2MDY5MTc5N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTUwNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBLVk0geDg2IE1NSU8gY2FjaGluZyB0byB1c2UgdGhlIHZDUFUncyBjdXJyZW50IG1lbXNsb3RzICh3aGljaCBhY2NvdW50cyBmb3IgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAvIFNNTSBhZGRyZXNzIHNwYWNlcykgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgbWVtc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0gTU1JTyBoYW5kbGluZyBhbmQgcGFnZSBmYXVsdCBlbXVsYXRpb24gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGd1ZXN0IFZNLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBLVk0geDg2IE1NSU8gY2FjaGluZyB0byB1c2UgdGhlIHZDUFUncyBjdXJyZW50IG1lbXNsb3RzICh3aGljaCBhY2NvdW50cyBmb3IgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAvIFNNTSBhZGRyZXNzIHNwYWNlcykgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgbWVtc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0gTU1JTyBoYW5kbGluZyBhbmQgcGFnZSBmYXVsdCBlbXVsYXRpb24gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGd1ZXN0IFZNLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzI6MjQuODQ4MjQ5MTM0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyNzIyNjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjI0Ljg0ODkxMzc1NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTUyNjU1NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgd2F5IEtWTSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBnZW5lcmF0aW9uIGZvciBhIHZDUFUsIHN3aXRjaGluZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAoZS5nLiwgU01NIHZzIG5vbi1TTU0pIGlzIHVzZWQgd2hlbiBjYWNoaW5nIE1NSU8gaW5mbyBvciBtYXRjaGluZyB0aGUgTU1JTyBnZW5lcmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgaW52b2x2ZSBpbmNvcnJlY3QgY2FjaGluZyBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjA0YzM2YjJlZTQ1MjE4NmVhYjRhYzUwZDIyYzZjMTZlMGRjZTM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNDoyOToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOWRlNTc3ZWY5Yzk3NC4uYTZkODZkM2RjZmY2MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtMzEzLDcgKzMxMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19ub25jYW5vbmljYWxfaW52bHBnX2FkZHJlc3ModTY0IGxhLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0Z3ZhX3QgZ3ZhLCBnZm5fdCBnZm4sIHVuc2lnbmVkIGFjY2VzcylcbiB7XG4tXHR1NjQgZ2VuID0ga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VnZW5lcmF0aW9uO1xuK1x0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVx1MDAzZWdlbmVyYXRpb247XG4gXG4gXHRpZiAodW5saWtlbHkoZ2VuIFx1MDAyNiBLVk1fTUVNU0xPVF9HRU5fVVBEQVRFX0lOX1BST0dSRVNTKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTMzMCw3ICszMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9jYWNoZV9tbWlvX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlZ2VuZXJhdGlvbjtcbitcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gubW1pb19nZW4gPT0ga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSktXHUwMDNlZ2VuZXJhdGlvbjtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjI0Ljg0ODkxNDY3NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTcyNzA3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBNZW1vcnkgU2xvdCBHZW5lcmF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gbnVtYmVyIHdpdGhpbiBLVk0ncyB4ODYgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hhbmdpbmcgZnJvbSBga3ZtX21lbXNsb3RzKHZjcHUtXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYCBpbiBgdmNwdV9jYWNoZV9tbWlvX2luZm9gIGFuZCBgdmNwdV9tYXRjaF9tbWlvX2dlbmAuIFRoZSBjb21taXQgbWVzc2FnZSBoaW50cyBhdCBhIHByb2JsZW0gcmVsYXRlZCB0byBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZ2VuZXJhdGlvbiBudW1iZXJzIGJlaW5nIHVzZWQsIHBvc3NpYmx5IHN0ZW1taW5nIGZyb20gU2VjdXJlIE1vZGUgTWFuYWdlbWVudCAoU01NKSBvciBtdWx0aXBsZSBhZGRyZXNzIHNwYWNlcyB3aXRoaW4gdGhlIFZNLlxuXG5NeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBrdm1fdmNwdV9tZW1zbG90c2AgKmRvZXMqLiBNeSBndWVzcyBpcyB0aGF0IGl0IHByb2JhYmx5IHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIHN0cnVjdHVyZSwgYGt2bV9tZW1zbG90cyh2Y3B1LVx1MDAzZWt2bSlgLCBidXQgd2l0aCBzb21lIGFkZHJlc3Mgc3BhY2Ugc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSB2Q1BVJ3MgZmxhZ3MgLSBtYXliZSBpdCdzIGNoZWNraW5nIGB2Y3B1LVx1MDAzZWFyY2guaGZsYWdzYCBmb3IgdGhlIFNNTSBiaXQgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbldhaXQsIGxvb2tpbmcgY2xvc2VyLCBhbGwgaXQncyBkb2luZyBpcyBjaGFuZ2luZyB0aGUgcG9pbnRlciBkZXJlZmVyZW5jZWQgdG8gZ2V0IHRoZSBtZW1zbG90cyBnZW5lcmF0aW9uLiBJIGhhZCBhIHF1aWNrIG1vbWVudCBvZiBjb25jZXJuIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UuIFRoZSBwYXRjaCBpcyBzaW1wbHkgc2VsZWN0aW5nIGEgZGlmZmVyZW50IG1lbXNsb3RzIHN0cnVjdHVyZSBiYXNlZCBvbiBzb21lIGNvbnRleHQsIHRoZW4gZ3JhYmJpbmcgdGhlIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gaXQuXG5cblRoaXMgaXMgYSBsb2dpYyBidWcgZml4LCB0aGVuLiBJdCdzIGxpa2VseSByZXNvbHZpbmcgYSBmdW5jdGlvbmFsIGlzc3VlLiBUaGUgY2hhbmdlIHN1Z2dlc3RzIHRoZXJlJ3MgYSBwcm9ibGVtIGluIHNlbGVjdGluZyB0aGUgKnJpZ2h0KiBtZW1zbG90cyBnZW5lcmF0aW9uLCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBhIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IsIG1vcmUgbGlrZWx5LCBqdXN0IGluY29ycmVjdCBjYWNoaW5nIGFuZC9vciBiZWhhdmlvci4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIHRoZSBjb250cm9sIGZsb3cgYWx0ZXJlZCB0byBleHBvc2Ugc3VjaCBtZW1vcnkgdG8gS01TQU4uIE1lbW9yeSBjb3JydXB0aW9uLCBpZiBpdCBleGlzdGVkLCBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLiBLTVNBTiBpc24ndCB0aGUga2V5IGhlcmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIHNlZW1zIGFwcHJvcHJpYXRlLlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBrdm1fdmNwdV9tZW1zbG90c2AgZGVmaW5pdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTQ6MzI6MzQuODIxNjI1NjY4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA0MjQ1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZjcHVfbWVtc2xvdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMyNT1zdGF0aWMgYm9vbCBjaGVja19tbWlvX3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc3B0ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzI4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzI5OlxcdGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzMwLVxcdGlmICh1bmxpa2VseShnZW4gXFx1MDAyNiBLVk1fTUVNU0xPVF9HRU5fVVBEQVRFX0lOX1BST0dSRVNTKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jPTk0PXU2NCBtYWtlX21taW9fc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBnZm4sIHVuc2lnbmVkIGludCBhY2Nlc3MpXFxuYXJjaC94ODYva3ZtL21tdS9zcHRlLmMtOTUte1xcbmFyY2gveDg2L2t2bS9tbXUvc3B0ZS5jOjk2OlxcdHU2NCBnZW4gPSBrdm1fdmNwdV9tZW1zbG90cyh2Y3B1KS1cXHUwMDNlZ2VuZXJhdGlvbiBcXHUwMDI2IE1NSU9fU1BURV9HRU5fTUFTSztcXG5hcmNoL3g4Ni9rdm0vbW11L3NwdGUuYy05Ny1cXHR1NjQgc3B0ZSA9IGdlbmVyYXRpb25fbW1pb19zcHRlX21hc2soZ2VuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD0zMTM9c3RhdGljIGlubGluZSB2b2lkIHZjcHVfY2FjaGVfbW1pb19pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaC0zMTUte1xcbmFyY2gveDg2L2t2bS94ODYuaDozMTY6XFx0dTY0IGdlbiA9IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbmFyY2gveDg2L2t2bS94ODYuaC0zMTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X21hdGNoX21taW9fZ2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMyLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzMzOlxcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLm1taW9fZ2VuID09IGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpLVxcdTAwM2VnZW5lcmF0aW9uO1xcbmFyY2gveDg2L2t2bS94ODYuaC0zMzQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNDozMjozNS4xMjIwNTY4MDlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1MzM5NTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgYm9pbHMgZG93biB0byB1c2luZyBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgIGRpcmVjdGx5LCByZXBsYWNpbmcgdGhlIG9sZGVyIGBrdm1fbWVtc2xvdHModmNwdS1cdTAwM2Vrdm0pYCBhcHByb2FjaC4gVGhhdCdzIHRoZSBkaWZmZXJlbmNlLCB0aGUgc2luZ2xlIGNoYW5nZSB0aGF0J3MgYmVpbmcgbWFkZS4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IE15IGluaXRpYWwgYW5hbHlzaXMgcG9pbnRzIHRoYXQgSSBhbSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgc3VnZ2VzdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBoZXJlLiBSaWdodCwgY29uZmlybWVkLiBUaHVzLCBJIHdpbGwgc3RhdGUgbXkgcmVhc29uaW5nIGZvciB0aGlzIGNvbmNsdXNpb24gaW4gdGhlIGNvbW1lbnRzIGZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LiBJbiBsaWdodCBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkwLCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE0OjMyOjQwLjM3NTQ1NDYyM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgd2F5IEtWTSByZXRyaWV2ZXMgdGhlIG1lbW9yeSBzbG90cyBnZW5lcmF0aW9uIGZvciBhIHZDUFUsIHN3aXRjaGluZyBmcm9tIGBrdm1fbWVtc2xvdHModmNwdS1cXHUwMDNla3ZtKWAgdG8gYGt2bV92Y3B1X21lbXNsb3RzKHZjcHUpYC4gVGhpcyBpcyBhIGxvZ2ljIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAoZS5nLiwgU01NIHZzIG5vbi1TTU0pIGlzIHVzZWQgd2hlbiBjYWNoaW5nIE1NSU8gaW5mbyBvciBtYXRjaGluZyB0aGUgTU1JTyBnZW5lcmF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgaW52b2x2ZSBpbmNvcnJlY3QgY2FjaGluZyBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGJldHRlciBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB3YXkgS1ZNIHJldHJpZXZlcyB0aGUgbWVtb3J5IHNsb3RzIGdlbmVyYXRpb24gZm9yIGEgdkNQVSwgc3dpdGNoaW5nIGZyb20gYGt2bV9tZW1zbG90cyh2Y3B1LVxcdTAwM2Vrdm0pYCB0byBga3ZtX3ZjcHVfbWVtc2xvdHModmNwdSlgLiBUaGlzIGlzIGEgbG9naWMgZml4IHRvIGVuc3VyZSB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlIChlLmcuLCBTTU0gdnMgbm9uLVNNTSkgaXMgdXNlZCB3aGVuIGNhY2hpbmcgTU1JTyBpbmZvIG9yIG1hdGNoaW5nIHRoZSBNTUlPIGdlbmVyYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBpbnZvbHZlIGluY29ycmVjdCBjYWNoaW5nIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYmV0dGVyIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[1] Phase: Succeeded StartedAt: 2026-08-07 14:33:12 +0000 UTC FinishedAt: 2026-08-07 14:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 14:33:12 +0000 UTC FinishedAt: 2026-08-07 14:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2] Phase: Succeeded StartedAt: 2026-08-07 14:33:12 +0000 UTC FinishedAt: 2026-08-07 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 14:33:12 +0000 UTC FinishedAt: 2026-08-07 18:16:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:33:12 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:33:12 +0000 UTC FinishedAt: 2026-08-07 14:33:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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-workflowfbt6d/series-workflowfbt6d-convert-artifact-2026387137/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:33:22 +0000 UTC FinishedAt: 2026-08-07 14:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:33:22 +0000 UTC FinishedAt: 2026-08-07 14:49:43 +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:*0e16d81e-adc5-45e7-acac-81d79af8b9eb,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-workflowfbt6d/series-workflowfbt6d-convert-artifact-2026387137/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": "615dd6c3-5b75-4d83-aaf1-227d6fabd5b6", "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-workflowfbt6d/series-workflowfbt6d-build-action-852843759/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:33:22 +0000 UTC FinishedAt: 2026-08-07 14:49:32 +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:*0e16d81e-adc5-45e7-acac-81d79af8b9eb,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-workflowfbt6d/series-workflowfbt6d-convert-artifact-2026387137/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": "615dd6c3-5b75-4d83-aaf1-227d6fabd5b6", "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-workflowfbt6d/series-workflowfbt6d-build-action-852843759/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:49:43 +0000 UTC FinishedAt: 2026-08-07 14:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:49:43 +0000 UTC FinishedAt: 2026-08-07 14:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:49:43 +0000 UTC FinishedAt: 2026-08-07 14:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:49:43 +0000 UTC FinishedAt: 2026-08-07 14:49:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-workflowfbt6d/series-workflowfbt6d-convert-artifact-1426730900/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:49:54 +0000 UTC FinishedAt: 2026-08-07 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:49:54 +0000 UTC FinishedAt: 2026-08-07 14:51:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*615dd6c3-5b75-4d83-aaf1-227d6fabd5b6,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-workflowfbt6d/series-workflowfbt6d-build-action-852843759/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-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:51:52 +0000 UTC FinishedAt: 2026-08-07 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:51:52 +0000 UTC FinishedAt: 2026-08-07 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:51:52 +0000 UTC FinishedAt: 2026-08-07 15:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:51:52 +0000 UTC FinishedAt: 2026-08-07 15:12:46 +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:*0e16d81e-adc5-45e7-acac-81d79af8b9eb,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-workflowfbt6d/series-workflowfbt6d-convert-artifact-1426730900/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": "e5da604e-9995-44b0-8459-a26ef97472f6", "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-workflowfbt6d/series-workflowfbt6d-build-action-3394410592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 14:51:52 +0000 UTC FinishedAt: 2026-08-07 15:12:36 +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:*0e16d81e-adc5-45e7-acac-81d79af8b9eb,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-workflowfbt6d/series-workflowfbt6d-convert-artifact-1426730900/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": "e5da604e-9995-44b0-8459-a26ef97472f6", "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-workflowfbt6d/series-workflowfbt6d-build-action-3394410592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:12:46 +0000 UTC FinishedAt: 2026-08-07 15:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:12:46 +0000 UTC FinishedAt: 2026-08-07 15:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:12:46 +0000 UTC FinishedAt: 2026-08-07 15:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:12:46 +0000 UTC FinishedAt: 2026-08-07 15:14:38 +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:*e5da604e-9995-44b0-8459-a26ef97472f6,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-workflowfbt6d/series-workflowfbt6d-build-action-3394410592/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-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 18:16:07 +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":["kvm_mmu_page_fault","x86_emulate_instruction"],"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:*615dd6c3-5b75-4d83-aaf1-227d6fabd5b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5da604e-9995-44b0-8459-a26ef97472f6,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-workflowfbt6d/series-workflowfbt6d-build-action-852843759/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-workflowfbt6d/series-workflowfbt6d-build-action-3394410592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 15:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 15:14:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"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-workflowfbt6d/series-workflowfbt6d-convert-artifact-2775733437/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 15:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 15:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:46 +0000 UTC FinishedAt: 2026-08-07 15:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:56 +0000 UTC FinishedAt: 2026-08-07 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbt6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"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":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6e127b88c34edb335186d49d5edaed369e97a34","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_SMM"],"series_id":"e4d4acba-da47-4013-b475-78c478bd1c25","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-07 15:14:56 +0000 UTC FinishedAt: 2026-08-07 18:15:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*615dd6c3-5b75-4d83-aaf1-227d6fabd5b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5da604e-9995-44b0-8459-a26ef97472f6,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-workflowfbt6d/series-workflowfbt6d-build-action-852843759/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-workflowfbt6d/series-workflowfbt6d-build-action-3394410592/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-workflowfbt6d/series-workflowfbt6d-convert-artifact-2775733437/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,}