Name: series-workflowmn42g Phase: Succeeded StartedAt: 2026-07-25 03:24:03 +0000 UTC FinishedAt: 2026-07-25 05:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[0] Phase: Succeeded StartedAt: 2026-07-25 03:24:03 +0000 UTC FinishedAt: 2026-07-25 03:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 03:24:03 +0000 UTC FinishedAt: 2026-07-25 03:47:56 +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": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VFIO", "VFIO_PCI", "VFIO_PCI_ZDEV_KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VFIO", "VFIO_PCI", "VFIO_PCI_ZDEV_KVM" ], "series_id": "104faa58-b642-47ac-a163-11d299d531f2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_s390_pci_zpci_op" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJX1pERVZfS1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3MzOTBfcGNpX3pwY2lfb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmZWEyY2VlNThhNGE5MGViZWNkZTlkM2I5MTcwMTZjZGQyYWYwNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMzo0NToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3BjaS5jIGIvYXJjaC9zMzkwL2t2bS9wY2kuY1xuaW5kZXggNzIwYmI1OGNhYmUyZTkuLjQzOTRjZWZlZjI0MjJlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wY2kuY1xuQEAgLTE5MCw0MCAmIzQzOzE5MCw2MSBAQCBzdGF0aWMgaW50IGt2bV96cGNpX2NsZWFyX2FpcnEoc3RydWN0IHpwY2lfZGV2ICp6ZGV2KVxuIFx0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuLVx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XG4mIzQzO1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0ga3pkZXYtXHUwMDNldXNlcl9hY2NvdW50O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQgPSBremRldi1cdTAwM2VtbV9hY2NvdW50O1xuIFxuLVx0aWYgKHVzZXIpXG4mIzQzO1x0aWYgKHVzZXIpIHtcbiBcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3BhZ2VzLCBcdTAwMjZ1c2VyLVx1MDAzZWxvY2tlZF92bSk7XG4tXHRpZiAoY3VycmVudC1cdTAwM2VtbSlcbi1cdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4mIzQzO1x0XHRmcmVlX3VpZCh1c2VyKTtcbiYjNDM7XHRcdGt6ZGV2LVx1MDAzZXVzZXJfYWNjb3VudCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobW1fYWNjb3VudCkge1xuJiM0MztcdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZtbV9hY2NvdW50LVx1MDAzZXBpbm5lZF92bSk7XG4mIzQzO1x0XHRtbWRyb3AobW1fYWNjb3VudCk7XG4mIzQzO1x0XHRremRldi1cdTAwM2VtbV9hY2NvdW50ID0gTlVMTDtcbiYjNDM7XHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzO1xuJiM0MztcdGludCByYyA9IDA7XG4gXG4gXHRwYWdlX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdGN1cl9wYWdlcyA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2dXNlci1cdTAwM2Vsb2NrZWRfdm0pO1xuIFx0ZG8ge1xuIFx0XHRuZXdfcGFnZXMgPSBjdXJfcGFnZXMgJiM0MzsgbnJfcGFnZXM7XG4tXHRcdGlmIChuZXdfcGFnZXMgXHUwMDNlIHBhZ2VfbGltaXQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRpZiAobmV3X3BhZ2VzIFx1MDAzZSBwYWdlX2xpbWl0KSB7XG4mIzQzO1x0XHRcdHJjID0gIC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuIFx0fSB3aGlsZSAoIWF0b21pY19sb25nX3RyeV9jbXB4Y2hnKFx1MDAyNnVzZXItXHUwMDNlbG9ja2VkX3ZtLCBcdTAwMjZjdXJfcGFnZXMsIG5ld19wYWdlcykpO1xuIFxuLVx0YXRvbWljNjRfYWRkKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4mIzQzO1x0aWYgKGN1cnJlbnQtXHUwMDNlbW0pIHtcbiYjNDM7XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbiYjNDM7XHRcdGF0b21pYzY0X2FkZChucl9wYWdlcywgXHUwMDI2Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VwaW5uZWRfdm0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3pkZXYtXHUwMDNldXNlcl9hY2NvdW50ID0gdXNlcjtcbiYjNDM7XHRremRldi1cdTAwM2VtbV9hY2NvdW50ID0gY3VycmVudC1cdTAwM2VtbTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGZyZWVfdWlkKHVzZXIpO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0XHRcdFx0ICAgYm9vbCBhc3Npc3QpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2VzWzFdLCAqYWlidl9wYWdlLCAqYWlzYl9wYWdlID0gTlVMTDtcbi1cdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4O1xuJiM0MztcdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4LCBzaXplO1xuIFx0c3RydWN0IHpwY2lfZ2FpdGUgKmdhaXRlO1xuIFx0dW5zaWduZWQgbG9uZyBodmEsIGJpdDtcbiBcdHN0cnVjdCBrdm0gKmt2bTtcbkBAIC0yMzcsNiAmIzQzOzI1OCwxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXG4gXHRpZiAoemRldi1cdTAwM2VnaXNhID09IDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIEFJRiBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgKi9cbiYjNDM7XHRpZiAoemRldi1cdTAwM2VremRldi1cdTAwM2VmaWIuZm10MC5haWJ2ICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRrdm0gPSB6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWt2bTtcbiBcdG1zaV92ZWNzID0gbWluX3QodW5zaWduZWQgaW50LCBmaWItXHUwMDNlZm10MC5ub2ksIHpkZXYtXHUwMDNlbWF4X21zaSk7XG4gXG5AQCAtMjQ2LDYgJiM0MzsyNzEsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0XHRyZXR1cm4gZ2lzYztcbiBcbiBcdC8qIFJlcGxhY2UgQUlCViBhZGRyZXNzICovXG4mIzQzO1x0c2l6ZSA9IEJJVFNfVE9fTE9OR1MobXNpX3ZlY3MgJiM0MzsgZmliLVx1MDAzZWZtdDAuYWlidm8pICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MztcdG5wYWdlcyA9IERJVl9ST1VORF9VUCgoZmliLVx1MDAzZWZtdDAuYWlidiBcdTAwMjYgflBBR0VfTUFTSykgJiM0Mzsgc2l6ZSwgUEFHRV9TSVpFKTtcbiYjNDM7XHQvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi9cbiYjNDM7XHRpZiAobnBhZ2VzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0aHZhID0gZ2ZuX3RvX2h2YShrdm0sIGdwYV90b19nZm4oKGdwYV90KWZpYi1cdTAwM2VmbXQwLmFpYnYpKTtcbiBcdG5wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoaHZhLCAxLCBGT0xMX1dSSVRFIHwgRk9MTF9MT05HVEVSTSwgcGFnZXMpO1xuQEAgLTI2MSw2ICYjNDM7Mjk0LDEyIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcbiBcdC8qIFBpbiB0aGUgZ3Vlc3QgQUlTQiBpZiBvbmUgd2FzIHNwZWNpZmllZCAqL1xuIFx0aWYgKGZpYi1cdTAwM2VmbXQwLnN1bSA9PSAxKSB7XG4mIzQzO1x0XHQvKiBBSVNCIG11c3QgYmUgZHdvcmQgYWxpZ25lZCAqL1xuJiM0MztcdFx0aWYgKGZpYi1cdTAwM2VmbXQwLmFpc2IgXHUwMDI2IDB4Nykge1xuJiM0MztcdFx0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5waW4xO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0XHRodmEgPSBnZm5fdG9faHZhKGt2bSwgZ3BhX3RvX2dmbigoZ3BhX3QpZmliLVx1MDAzZWZtdDAuYWlzYikpO1xuIFx0XHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG5AQCAtMjc1LDIwICYjNDM7MzE0LDI4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcdH1cbiBcbiBcdC8qIEFjY291bnQgZm9yIHBpbm5lZCBwYWdlcywgcm9sbCBiYWNrIG9uIGZhaWx1cmUgKi9cbi1cdGlmIChhY2NvdW50X21lbShwY291bnQpKVxuJiM0MztcdHJjID0gYWNjb3VudF9tZW0oemRldi1cdTAwM2VremRldiwgcGNvdW50KTtcbiYjNDM7XHRpZiAocmMpXG4gXHRcdGdvdG8gdW5waW4yO1xuIFxuIFx0LyogQUlTQiBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIGZpbGwgaW4gR0FJVEUgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIFx0Yml0ID0gYWlycV9pdl9hbGxvY19iaXQoYWlmdC1cdTAwM2VzYnYpO1xuLVx0aWYgKGJpdCA9PSAtMVVMKVxuJiM0MztcdGlmIChiaXQgPT0gLTFVTCkge1xuJiM0MztcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXHR6ZGV2LVx1MDAzZWFpc2IgPSBiaXQ7IC8qIHN0b3JlIHRoZSBzdW1tYXJ5IGJpdCBudW1iZXIgKi9cbiBcdHpkZXYtXHUwMDNlYWlidiA9IGFpcnFfaXZfY3JlYXRlKG1zaV92ZWNzLCBBSVJRX0lWX0RBVEEgfFxuIFx0XHRcdFx0ICAgIEFJUlFfSVZfQklUTE9DSyB8XG4gXHRcdFx0XHQgICAgQUlSUV9JVl9HVUVTVFZFQyxcbiBcdFx0XHRcdCAgICBwaHlzX3RvX3ZpcnQoZmliLVx1MDAzZWZtdDAuYWlidikpO1xuIFxuJiM0MztcdGlmICghemRldi1cdTAwM2VhaWJ2KSB7XG4mIzQzO1x0XHRyYyA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGZyZWVfYWlzYjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZhaWZ0LVx1MDAzZWdhaXRfbG9jayk7XG4gXHRnYWl0ZSA9IGFpZnQtXHUwMDNlZ2FpdCAmIzQzOyB6ZGV2LVx1MDAzZWFpc2I7XG4gXG5AQCAtMzExLDIxICYjNDM7MzU4LDM5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcdGFpZnQtXHUwMDNla3pkZXZbemRldi1cdTAwM2VhaXNiXSA9IHpkZXYtXHUwMDNla3pkZXY7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2YWlmdC1cdTAwM2VnYWl0X2xvY2spO1xuIFxuLVx0LyogVXBkYXRlIGd1ZXN0IEZJQiBmb3IgcmUtaXNzdWUgKi9cbi1cdGZpYi1cdTAwM2VmbXQwLmFpc2JvID0gemRldi1cdTAwM2VhaXNiIFx1MDAyNiA2Mztcbi1cdGZpYi1cdTAwM2VmbXQwLmFpc2IgPSB2aXJ0X3RvX3BoeXMoYWlmdC1cdTAwM2VzYnYtXHUwMDNldmVjdG9yKSAmIzQzOyAoemRldi1cdTAwM2VhaXNiIC8gNjQpICogODtcbi1cdGZpYi1cdTAwM2VmbXQwLmlzYyA9IGdpc2M7XG4tXG4gXHQvKiBTYXZlIHNvbWUgZ3Vlc3QgZmliIHZhbHVlcyBpbiB0aGUgaG9zdCBmb3IgbGF0ZXIgdXNlICovXG4tXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IGZpYi1cdTAwM2VmbXQwLmlzYztcbiYjNDM7XHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IGdpc2M7XG4gXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgPSBmaWItXHUwMDNlZm10MC5haWJ2O1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiBcbiBcdC8qIElzc3VlIHRoZSBjbHAgdG8gc2V0dXAgdGhlIGlycSBub3cgKi9cbiBcdHJjID0ga3ZtX3pwY2lfc2V0X2FpcnEoemRldik7XG4tXHRyZXR1cm4gcmM7XG4mIzQzO1x0aWYgKCFyYykge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0YXJ0IGNsZWFudXAgKi9cbiYjNDM7XHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IDA7XG4mIzQzO1x0emRldi1cdTAwM2VremRldi1cdTAwM2VmaWIuZm10MC5haWJ2ID0gMDtcbiBcbiYjNDM7XHRzcGluX2xvY2tfaXJxKFx1MDAyNmFpZnQtXHUwMDNlZ2FpdF9sb2NrKTtcbiYjNDM7XHRnYWl0ZS1cdTAwM2Vjb3VudC0tO1xuJiM0MztcdGdhaXRlLVx1MDAzZWFpc2IgPSAwO1xuJiM0MztcdGdhaXRlLVx1MDAzZWdpc2MgPSAwO1xuJiM0MztcdGdhaXRlLVx1MDAzZWFpc2JvID0gMDtcbiYjNDM7XHRnYWl0ZS1cdTAwM2VnaXNhID0gMDtcbiYjNDM7XHRhaWZ0LVx1MDAzZWt6ZGV2W3pkZXYtXHUwMDNlYWlzYl0gPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZhaWZ0LVx1MDAzZWdhaXRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFpcnFfaXZfcmVsZWFzZSh6ZGV2LVx1MDAzZWFpYnYpO1xuJiM0MztcdHpkZXYtXHUwMDNlYWlidiA9IE5VTEw7XG4mIzQzO1xuJiM0MztmcmVlX2Fpc2I6XG4mIzQzO1x0YWlycV9pdl9mcmVlX2JpdChhaWZ0LVx1MDAzZXNidiwgemRldi1cdTAwM2VhaXNiKTtcbiYjNDM7XHR6ZGV2LVx1MDAzZWFpc2IgPSAwO1xuIHVubG9jazpcbiYjNDM7XHRpZiAocGNvdW50IFx1MDAzZSAwKVxuJiM0MztcdFx0dW5hY2NvdW50X21lbSh6ZGV2LVx1MDAzZWt6ZGV2LCBwY291bnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiB1bnBpbjI6XG4gXHRpZiAoZmliLVx1MDAzZWZtdDAuc3VtID09IDEpXG5AQCAtMzk2LDcgJiM0Mzs0NjEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXG4gXHRcdHBjb3VudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXHRpZiAocGNvdW50IFx1MDAzZSAwKVxuLVx0XHR1bmFjY291bnRfbWVtKHBjb3VudCk7XG4mIzQzO1x0XHR1bmFjY291bnRfbWVtKGt6ZGV2LCBwY291bnQpO1xuIG91dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZhaWZ0LVx1MDAzZWFpZnRfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuaCBiL2FyY2gvczM5MC9rdm0vcGNpLmhcbmluZGV4IGZmMDk3MmRkNWU3MWRjLi5mZGY4YzdiZjRlZDA4MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcGNpLmhcbkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBzdHJ1Y3Qga3ZtX3pkZXYge1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0c3RydWN0IHpwY2lfZmliIGZpYjtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4mIzQzO1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyX2FjY291bnQ7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW1fYWNjb3VudDtcbiB9O1xuIFxuIHN0cnVjdCB6cGNpX2dhaXRlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7VkZJT19QQ0lfWkRFVl9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fczM5MF9wY2lfenBjaV9vcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gczM5MHggS1ZNIFBDSSBwYXNzdGhyb3VnaCAoelBDSSkgZHVyaW5nIEFJRiAoQWRhcHRlciBJbnRlcnJ1cHRpb24gRmFjaWxpdHkpIGVuYWJsZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBtZW1vcnkgcGlubmluZyBhbmQgaW50ZXJydXB0IHZlY3RvciBhbGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk1fUzM5MF9aUENJX09QIGlvY3RsLCBoYW5kbGVkIGJ5IGt2bV9zMzkwX3BjaV96cGNpX29wLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWZlYTJjZWU1OGE0YTkwZWJlY2RlOWQzYjkxNzAxNmNkZDJhZjA2ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDAzOjQ1OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuYyBiL2FyY2gvczM5MC9rdm0vcGNpLmMKaW5kZXggNzIwYmI1OGNhYmUyZTkuLjQzOTRjZWZlZjI0MjJlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcGNpLmMKQEAgLTE5MCw0MCAmIzQzOzE5MCw2MSBAQCBzdGF0aWMgaW50IGt2bV96cGNpX2NsZWFyX2FpcnEoc3RydWN0IHpwY2lfZGV2ICp6ZGV2KQogCXJldHVybiBjYyA/IC1FSU8gOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5hY2NvdW50X21lbSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7CiYjNDM7CXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGt6ZGV2LSZndDt1c2VyX2FjY291bnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQgPSBremRldi0mZ3Q7bW1fYWNjb3VudDsKIAotCWlmICh1c2VyKQomIzQzOwlpZiAodXNlcikgewogCQlhdG9taWNfbG9uZ19zdWIobnJfcGFnZXMsICZhbXA7dXNlci0mZ3Q7bG9ja2VkX3ZtKTsKLQlpZiAoY3VycmVudC0mZ3Q7bW0pCi0JCWF0b21pYzY0X3N1Yihucl9wYWdlcywgJmFtcDtjdXJyZW50LSZndDttbS0mZ3Q7cGlubmVkX3ZtKTsKJiM0MzsJCWZyZWVfdWlkKHVzZXIpOwomIzQzOwkJa3pkZXYtJmd0O3VzZXJfYWNjb3VudCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1tX2FjY291bnQpIHsKJiM0MzsJCWF0b21pYzY0X3N1Yihucl9wYWdlcywgJmFtcDttbV9hY2NvdW50LSZndDtwaW5uZWRfdm0pOwomIzQzOwkJbW1kcm9wKG1tX2FjY291bnQpOwomIzQzOwkJa3pkZXYtJmd0O21tX2FjY291bnQgPSBOVUxMOwomIzQzOwl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYWNjb3VudF9tZW0oc3RydWN0IGt2bV96ZGV2ICpremRldiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBnZXRfdWlkKGN1cnJlbnRfdXNlcigpKTsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzOwomIzQzOwlpbnQgcmMgPSAwOwogCiAJcGFnZV9saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSykgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWN1cl9wYWdlcyA9IGF0b21pY19sb25nX3JlYWQoJmFtcDt1c2VyLSZndDtsb2NrZWRfdm0pOwogCWRvIHsKIAkJbmV3X3BhZ2VzID0gY3VyX3BhZ2VzICYjNDM7IG5yX3BhZ2VzOwotCQlpZiAobmV3X3BhZ2VzICZndDsgcGFnZV9saW1pdCkKLQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJaWYgKG5ld19wYWdlcyAmZ3Q7IHBhZ2VfbGltaXQpIHsKJiM0MzsJCQlyYyA9ICAtRU5PTUVNOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQogCX0gd2hpbGUgKCFhdG9taWNfbG9uZ190cnlfY21weGNoZygmYW1wO3VzZXItJmd0O2xvY2tlZF92bSwgJmFtcDtjdXJfcGFnZXMsIG5ld19wYWdlcykpOwogCi0JYXRvbWljNjRfYWRkKG5yX3BhZ2VzLCAmYW1wO2N1cnJlbnQtJmd0O21tLSZndDtwaW5uZWRfdm0pOwomIzQzOwlpZiAoY3VycmVudC0mZ3Q7bW0pIHsKJiM0MzsJCW1tZ3JhYihjdXJyZW50LSZndDttbSk7CiYjNDM7CQlhdG9taWM2NF9hZGQobnJfcGFnZXMsICZhbXA7Y3VycmVudC0mZ3Q7bW0tJmd0O3Bpbm5lZF92bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3pkZXYtJmd0O3VzZXJfYWNjb3VudCA9IHVzZXI7CiYjNDM7CWt6ZGV2LSZndDttbV9hY2NvdW50ID0gY3VycmVudC0mZ3Q7bW07CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWZyZWVfdWlkKHVzZXIpOwomIzQzOwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYiwKIAkJCQkgICBib29sIGFzc2lzdCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbMV0sICphaWJ2X3BhZ2UsICphaXNiX3BhZ2UgPSBOVUxMOwotCXVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4OwomIzQzOwl1bnNpZ25lZCBpbnQgbXNpX3ZlY3MsIGlkeCwgc2l6ZTsKIAlzdHJ1Y3QgenBjaV9nYWl0ZSAqZ2FpdGU7CiAJdW5zaWduZWQgbG9uZyBodmEsIGJpdDsKIAlzdHJ1Y3Qga3ZtICprdm07CkBAIC0yMzcsNiAmIzQzOzI1OCwxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsCiAJaWYgKHpkZXYtJmd0O2dpc2EgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogQUlGIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIGRldmljZSAqLwomIzQzOwlpZiAoemRldi0mZ3Q7a3pkZXYtJmd0O2ZpYi5mbXQwLmFpYnYgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWt2bSA9IHpkZXYtJmd0O2t6ZGV2LSZndDtrdm07CiAJbXNpX3ZlY3MgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZpYi0mZ3Q7Zm10MC5ub2ksIHpkZXYtJmd0O21heF9tc2kpOwogCkBAIC0yNDYsNiAmIzQzOzI3MSwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsCiAJCXJldHVybiBnaXNjOwogCiAJLyogUmVwbGFjZSBBSUJWIGFkZHJlc3MgKi8KJiM0MzsJc2l6ZSA9IEJJVFNfVE9fTE9OR1MobXNpX3ZlY3MgJiM0MzsgZmliLSZndDtmbXQwLmFpYnZvKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKJiM0MzsJbnBhZ2VzID0gRElWX1JPVU5EX1VQKChmaWItJmd0O2ZtdDAuYWlidiAmYW1wOyB+UEFHRV9NQVNLKSAmIzQzOyBzaXplLCBQQUdFX1NJWkUpOwomIzQzOwkvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi8KJiM0MzsJaWYgKG5wYWdlcyAmZ3Q7IDEpIHsKJiM0MzsJCXJjID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtrdm0tJmd0O3NyY3UpOwogCWh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItJmd0O2ZtdDAuYWlidikpOwogCW5wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoaHZhLCAxLCBGT0xMX1dSSVRFIHwgRk9MTF9MT05HVEVSTSwgcGFnZXMpOwpAQCAtMjYxLDYgJiM0MzsyOTQsMTIgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLAogCiAJLyogUGluIHRoZSBndWVzdCBBSVNCIGlmIG9uZSB3YXMgc3BlY2lmaWVkICovCiAJaWYgKGZpYi0mZ3Q7Zm10MC5zdW0gPT0gMSkgewomIzQzOwkJLyogQUlTQiBtdXN0IGJlIGR3b3JkIGFsaWduZWQgKi8KJiM0MzsJCWlmIChmaWItJmd0O2ZtdDAuYWlzYiAmYW1wOyAweDcpIHsKJiM0MzsJCQlyYyA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byB1bnBpbjE7CiYjNDM7CQl9CiYjNDM7CiAJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKIAkJaHZhID0gZ2ZuX3RvX2h2YShrdm0sIGdwYV90b19nZm4oKGdwYV90KWZpYi0mZ3Q7Zm10MC5haXNiKSk7CiAJCW5wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoaHZhLCAxLCBGT0xMX1dSSVRFIHwgRk9MTF9MT05HVEVSTSwKQEAgLTI3NSwyMCAmIzQzOzMxNCwyOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsCiAJfQogCiAJLyogQWNjb3VudCBmb3IgcGlubmVkIHBhZ2VzLCByb2xsIGJhY2sgb24gZmFpbHVyZSAqLwotCWlmIChhY2NvdW50X21lbShwY291bnQpKQomIzQzOwlyYyA9IGFjY291bnRfbWVtKHpkZXYtJmd0O2t6ZGV2LCBwY291bnQpOwomIzQzOwlpZiAocmMpCiAJCWdvdG8gdW5waW4yOwogCiAJLyogQUlTQiBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIGZpbGwgaW4gR0FJVEUgKi8KIAltdXRleF9sb2NrKCZhbXA7YWlmdC0mZ3Q7YWlmdF9sb2NrKTsKIAliaXQgPSBhaXJxX2l2X2FsbG9jX2JpdChhaWZ0LSZndDtzYnYpOwotCWlmIChiaXQgPT0gLTFVTCkKJiM0MzsJaWYgKGJpdCA9PSAtMVVMKSB7CiYjNDM7CQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiAJemRldi0mZ3Q7YWlzYiA9IGJpdDsgLyogc3RvcmUgdGhlIHN1bW1hcnkgYml0IG51bWJlciAqLwogCXpkZXYtJmd0O2FpYnYgPSBhaXJxX2l2X2NyZWF0ZShtc2lfdmVjcywgQUlSUV9JVl9EQVRBIHwKIAkJCQkgICAgQUlSUV9JVl9CSVRMT0NLIHwKIAkJCQkgICAgQUlSUV9JVl9HVUVTVFZFQywKIAkJCQkgICAgcGh5c190b192aXJ0KGZpYi0mZ3Q7Zm10MC5haWJ2KSk7CiAKJiM0MzsJaWYgKCF6ZGV2LSZndDthaWJ2KSB7CiYjNDM7CQlyYyA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGZyZWVfYWlzYjsKJiM0MzsJfQomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDthaWZ0LSZndDtnYWl0X2xvY2spOwogCWdhaXRlID0gYWlmdC0mZ3Q7Z2FpdCAmIzQzOyB6ZGV2LSZndDthaXNiOwogCkBAIC0zMTEsMjEgJiM0MzszNTgsMzkgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLAogCWFpZnQtJmd0O2t6ZGV2W3pkZXYtJmd0O2Fpc2JdID0gemRldi0mZ3Q7a3pkZXY7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7YWlmdC0mZ3Q7Z2FpdF9sb2NrKTsKIAotCS8qIFVwZGF0ZSBndWVzdCBGSUIgZm9yIHJlLWlzc3VlICovCi0JZmliLSZndDtmbXQwLmFpc2JvID0gemRldi0mZ3Q7YWlzYiAmYW1wOyA2MzsKLQlmaWItJmd0O2ZtdDAuYWlzYiA9IHZpcnRfdG9fcGh5cyhhaWZ0LSZndDtzYnYtJmd0O3ZlY3RvcikgJiM0MzsgKHpkZXYtJmd0O2Fpc2IgLyA2NCkgKiA4OwotCWZpYi0mZ3Q7Zm10MC5pc2MgPSBnaXNjOwotCiAJLyogU2F2ZSBzb21lIGd1ZXN0IGZpYiB2YWx1ZXMgaW4gdGhlIGhvc3QgZm9yIGxhdGVyIHVzZSAqLwotCXpkZXYtJmd0O2t6ZGV2LSZndDtmaWIuZm10MC5pc2MgPSBmaWItJmd0O2ZtdDAuaXNjOwomIzQzOwl6ZGV2LSZndDtremRldi0mZ3Q7ZmliLmZtdDAuaXNjID0gZ2lzYzsKIAl6ZGV2LSZndDtremRldi0mZ3Q7ZmliLmZtdDAuYWlidiA9IGZpYi0mZ3Q7Zm10MC5haWJ2OwotCW11dGV4X3VubG9jaygmYW1wO2FpZnQtJmd0O2FpZnRfbG9jayk7CiAKIAkvKiBJc3N1ZSB0aGUgY2xwIHRvIHNldHVwIHRoZSBpcnEgbm93ICovCiAJcmMgPSBrdm1fenBjaV9zZXRfYWlycSh6ZGV2KTsKLQlyZXR1cm4gcmM7CiYjNDM7CWlmICghcmMpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2FpZnQtJmd0O2FpZnRfbG9jayk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RhcnQgY2xlYW51cCAqLwomIzQzOwl6ZGV2LSZndDtremRldi0mZ3Q7ZmliLmZtdDAuaXNjID0gMDsKJiM0MzsJemRldi0mZ3Q7a3pkZXYtJmd0O2ZpYi5mbXQwLmFpYnYgPSAwOwogCiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDthaWZ0LSZndDtnYWl0X2xvY2spOwomIzQzOwlnYWl0ZS0mZ3Q7Y291bnQtLTsKJiM0MzsJZ2FpdGUtJmd0O2Fpc2IgPSAwOwomIzQzOwlnYWl0ZS0mZ3Q7Z2lzYyA9IDA7CiYjNDM7CWdhaXRlLSZndDthaXNibyA9IDA7CiYjNDM7CWdhaXRlLSZndDtnaXNhID0gMDsKJiM0MzsJYWlmdC0mZ3Q7a3pkZXZbemRldi0mZ3Q7YWlzYl0gPSBOVUxMOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDthaWZ0LSZndDtnYWl0X2xvY2spOwomIzQzOwomIzQzOwlhaXJxX2l2X3JlbGVhc2UoemRldi0mZ3Q7YWlidik7CiYjNDM7CXpkZXYtJmd0O2FpYnYgPSBOVUxMOwomIzQzOwomIzQzO2ZyZWVfYWlzYjoKJiM0MzsJYWlycV9pdl9mcmVlX2JpdChhaWZ0LSZndDtzYnYsIHpkZXYtJmd0O2Fpc2IpOwomIzQzOwl6ZGV2LSZndDthaXNiID0gMDsKIHVubG9jazoKJiM0MzsJaWYgKHBjb3VudCAmZ3Q7IDApCiYjNDM7CQl1bmFjY291bnRfbWVtKHpkZXYtJmd0O2t6ZGV2LCBwY291bnQpOwogCW11dGV4X3VubG9jaygmYW1wO2FpZnQtJmd0O2FpZnRfbG9jayk7CiB1bnBpbjI6CiAJaWYgKGZpYi0mZ3Q7Zm10MC5zdW0gPT0gMSkKQEAgLTM5Niw3ICYjNDM7NDYxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBib29sIGZvcmNlKQogCQlwY291bnQmIzQzOyYjNDM7OwogCX0KIAlpZiAocGNvdW50ICZndDsgMCkKLQkJdW5hY2NvdW50X21lbShwY291bnQpOwomIzQzOwkJdW5hY2NvdW50X21lbShremRldiwgcGNvdW50KTsKIG91dDoKIAltdXRleF91bmxvY2soJmFtcDthaWZ0LSZndDthaWZ0X2xvY2spOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3BjaS5oIGIvYXJjaC9zMzkwL2t2bS9wY2kuaAppbmRleCBmZjA5NzJkZDVlNzFkYy4uZmRmOGM3YmY0ZWQwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wY2kuaApAQCAtMjIsNiAmIzQzOzIyLDggQEAgc3RydWN0IGt2bV96ZGV2IHsKIAlzdHJ1Y3Qga3ZtICprdm07CiAJc3RydWN0IHpwY2lfZmliIGZpYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwomIzQzOwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXJfYWNjb3VudDsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW1fYWNjb3VudDsKIH07CiAKIHN0cnVjdCB6cGNpX2dhaXRlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gczM5MCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCBhbmQgYGFyY2gvczM5MC9rdm0vcGNpLmhgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhhdCBgdW5hY2NvdW50X21lbWAgYW5kIGBhY2NvdW50X21lbWAgYXJlIG5vdyB0YWtpbmcgYSBgc3RydWN0IGt2bV96ZGV2ICpremRldmAgYW5kIHVzaW5nIHRoYXQgdG8gbWFuYWdlIGB1c2VyX2FjY291bnRgIGFuZCBgbW1fYWNjb3VudGAgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGdsb2JhbCB2YXJpYWJsZXMgbGlrZSBgY3VycmVudF91c2VyKClgIGFuZCBgY3VycmVudC0mZ3Q7bW1gLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGVwIHRvd2FyZHMgaW1wcm92ZWQgaXNvbGF0aW9uLiBQbHVzLCBJIHNlZSBzb21lIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBpbiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCB3aGljaCBpcyBhbHdheXMgYSBwbHVzLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuICpyZWFjaGFibGUqIGFuZCBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBSaWdodCwgc28gS1ZNIG9uIHMzOTB4IGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHBhcnQgb2YgczM5MHggdmlydHVhbGl6YXRpb24sIHNvIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRvIGJlIHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVSBzZXR1cHMuIE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBldmVuIHN1cHBvcnRzIGZ1enppbmcgczM5MHggS1ZNLiBUaGFua2Z1bGx5LCB0aGUgYW5zd2VyIGlzIHllcywgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweCwgYW5kIGl0IGRvZXMgZnV6eiBLVk0uCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGVuY291cmFnaW5nLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCBga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlYCwgcGx1cyB0aGUgYWZvcmVtZW50aW9uZWQgYGFjY291bnRfbWVtYCBhbmQgYHVuYWNjb3VudF9tZW1gLiBPa2F5LCBub3cgSSB3YW50IHRvIGZpbmQgd2hlcmUgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCBpcyBkZWZpbmVkIGluIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9wY2lfYWlmX2VuYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jPTIxMT1zdGF0aWMgaW5saW5lIGludCBhY2NvdW50X21lbShzdHJ1Y3Qga3ZtX3pkZXYgKmt6ZGV2LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtMjQyLVxuYXJjaC9zMzkwL2t2bS9wY2kuYzoyNDM6c3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuYXJjaC9zMzkwL2t2bS9wY2kuYy0yNDQtXHRcdFx0XHQgICBib29sIGFzc2lzdClcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY2MT1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oc3RydWN0IHpwY2lfZGV2ICp6ZGV2LFxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtNjgwLVx0aG9zdGZsYWcgPSAhKGFyZ3MtXHUwMDNldS5yZWdfYWVuLmZsYWdzIFx1MDAyNiBLVk1fUzM5MF9aUENJT1BfUkVHQUVOX0hPU1QpO1xuYXJjaC9zMzkwL2t2bS9wY2kuYzo2ODE6XHRyZXR1cm4ga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoemRldiwgXHUwMDI2ZmliLCBob3N0ZmxhZyk7XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgQWN0aXZhdGlvbiBvZiB0aGUgQUlGIEVuYWJsZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgaW4gdGhlIEtWTS9zMzkwIFBDSSBjb2RlLiBUaGUgZmlyc3QgY2x1ZSBJIGhhdmUgaXMgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbmAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGFwcHJvYWNoOiBmaW5kIHRoZSBjYWxsZXIsIHRoZW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCk15IG5leHQgc3RlcCBpcyBjbGVhciDigJMgSSBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgd2hlcmUgKml0KiBnZXRzIGNhbGxlZCBmcm9tLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGV2ZW50cyBvciBjb25kaXRpb25zIHRoYXQgZXZlbnR1YWxseSBsZWFkIHRvIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBBSUYgZW5hYmxlIGZ1bmN0aW9uLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgQUlGIGVuYWJsZSBtZWNoYW5pc20gYW5kIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBaUENJIHJlZ2lzdHJhdGlvbiBhbmQgZXZlbnQgbm90aWZpY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jPTY0ND1zdGF0aWMgc3RydWN0IHpwY2lfZGV2ICpnZXRfemRldl9mcm9tX2t2bV9ieV9maChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBmaClcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY2MC1cbmFyY2gvczM5MC9rdm0vcGNpLmM6NjYxOnN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY2Mi1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz02ODQ9aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MTMtXHRcdH1cbmFyY2gvczM5MC9rdm0vcGNpLmM6NzE0Olx0XHRyID0ga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2Flbih6ZGV2LCBhcmdzKTtcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzE1LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBrdm1fczM5MF9wY2lfenBjaV9vcGAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQmIzM5O3MgaGl0dGluZyBtZSBpcyB0aGF0IGZ1bmN0aW9uIG5hbWU6IGBrdm1fczM5MF9wY2lfenBjaV9vcGAuIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgS1ZNLCBzbyB0aGlzIGlzIHZpcnR1YWxpemF0aW9uIG9uIGFuIHMzOTAgYXJjaGl0ZWN0dXJlLiAmIzM0O1BDSSwmIzM0OyAmIzM0O3pwY2kmIzM0OyBpbXBsaWVzIGludGVyYWN0aW9uIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0sIGxpa2VseSBhIFpQQ0kgZGV2aWNlLCB3aGljaCBpcyBob3cgd2UgaGFuZGxlIFBDSSBkZXZpY2VzIGluIHRoZSBzMzkwIHdvcmxkLiAmIzM0O09wJiMzNDsgc3VnZ2VzdHMgc29tZSBraW5kIG9mIG9wZXJhdGlvbiBvciBmdW5jdGlvbi4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGF0IGNhbGwgc2l0ZSBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIElzIGl0IHRyaWdnZXJlZCBieSBhIEtWTSBoeXBlcmNhbGw/IElzIGl0IHdpdGhpbiB0aGUgZ3Vlc3Qtc2lkZSBlbXVsYXRpb24gb2YgdGhlIGRldmljZSwgb3IgaXMgaXQgb24gdGhlIGhvc3Qgc2lkZSwgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzPyBUaGUgY29udGV4dCBpcyBjcml0aWNhbC4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZmluZCBpdHMgY2FsbGVycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uIGFuZCBkZXRlcm1pbmUgd2hpY2ggZXZlbnQgaW5pdGlhdGVzIGl0LiBJcyBpdCBpbnRlcnJ1cHQgcmVsYXRlZD8gSXMgaXQgdHJpZ2dlcmVkIGJ5IE1NSU8/IElzIGl0IGEgcmVzdWx0IG9mIHNvbWUgS1ZNIG9wZXJhdGlvbiByZWxhdGVkIHRvIFpQQ0kgY29uZmlndXJhdGlvbj8gVGhpcyBpcyBnb2luZyB0byBiZSBhIGZ1biBsaXR0bGUgam91cm5leS4gSSBiZXQgdGhlcmUgaXMgc29tZSBpbXBvcnRhbnQgY29udHJvbCBvdmVyIFpQQ0kgZGV2aWNlIHdpdGhpbiB0aGUgS1ZNL3MzOTAgc2V0dXAgdGhhdCBuZWVkcyBteSBmdWxsIGFuZCBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3BjaV96cGNpX29wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5Mi1cdFx0fVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwOTM6XHRcdHIgPSBrdm1fczM5MF9wY2lfenBjaV9vcChrdm0sIFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwOTQtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5oPTYxPXZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjItXG5hcmNoL3MzOTAva3ZtL3BjaS5oOjYzOmludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNX1MzOTBfWlBDSV9PUCoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBwcm9taXNpbmcgbGVhZCBoZXJlLiBUaGlzIGBLVk1fUzM5MF9aUENJX09QYCBpb2N0bCwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgc2NyZWFtcyAmIzM0O2NvcmUgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25hbGl0eSYjMzQ7IHRvIG1lLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZyBhdHRlbnRpb24uIFRoZXNlIGxvdy1sZXZlbCBpbnRlcmZhY2VzIGFyZSBvZnRlbiB3aGVyZSB5b3UgZmluZCB0aGUgbW9zdCBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVncyBpbiB0aGUgaHlwZXJ2aXNvci4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGVuIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4gTGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBidWlsZCBmbGFncy4gS25vd2luZyB0aGUgYnVpbGQgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gY29uc3RydWN0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1pbmltaXppbmcgbm9pc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGU9MTI9a3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTMtXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjE0Omt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHBjaS5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlZGSU8tUENJIFpERVYgS1ZNIEludmVzdGlnYXRpb24qKgoKUmlnaHQsICp0aGF0JiMzOTtzKiB3aGF0IEkgbmVlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBpcyB0aGUgY3J1Y2lhbCBlbGVtZW50IGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgZXhhY3RseSB3aGF0IHRoYXQgZmxhZyBlbmFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIFZGSU8gYW5kIEtWTSBsYW5kc2NhcGUuIElzIGl0IGNvcnJlY3RseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBzZXR1cD8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBwYXRjaGVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhhdCBvcHRpb24gY29udHJvbHMgYW5kIGlmIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyB0aGluZyB0byByZXNvbHZlIHRoZSBpc3N1ZSBhdCBoYW5kLiBMZXTigJlzIGdldCB0byB0aGUgcm9vdCBvZiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRlbHZpbmcgaW50byB0aGUgVkZJTyBLY29uZmlnIGZvciBVbmRlcnN0YW5kaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSA0NywgYXMgdGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBjb250cm9sbGVkIGhlcmUgZm9yIHRoZSBWRklPLVBDSSBkcml2ZXIuIElzIGl0IHRoZSBmZWF0dXJlIGZsYWdzLCBwbGF0Zm9ybSBzdXBwb3J0IG9yIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gcmVtZW1iZXI/IExldCYjMzk7cyByZWZyZXNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdCAgYXNzaWdubWVudCB0byB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBpbmNsdWRlcyBleHBvc2luZyBhbiBJR0RcbiAgNDE6XHRcdCAgc3BlY2lmaWMgZmlybXdhcmUgdGFibGUgYW5kIHJlYWQtb25seSBjb3BpZXMgb2YgdGhlIGhvc3QgYnJpZGdlXG4gIDQyOlx0XHQgIGFuZCBMUEMgYnJpZGdlIGNvbmZpZyBzcGFjZS5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgVG8gZW5hYmxlIEludGVsIElHRCBhc3NpZ25tZW50IHRocm91Z2ggdmZpby1wY2ksIHNheSBZLlxuICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4gIDQ4Olx0XHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBTMzkwIFx1MDAyNlx1MDAyNiBLVk1cbiAgNTA6XHRcdGRlZmF1bHQgeVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBTdXBwb3J0IHMzOTB4LXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGVuaGFuY2VtZW50c1xuICA1MzpcdFx0ICB0byBLVk0gcGFzc3Rocm91Z2ggY2FwYWJpbGl0aWVzLCBzdWNoIGFzIGludGVycHJldGl2ZSBleGVjdXRpb24gb2ZcbiAgNTQ6XHRcdCAgelBDSSBpbnN0cnVjdGlvbnMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGVuYWJsZSBzMzkweCBLVk0gdmZpby1wY2kgZXh0ZW5zaW9ucywgc2F5IFkuXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuICA1OTpcdFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIHRoaXMgYm9pbHMgZG93biB0byBob3cgdGhpbmdzIGFyZSBjb25maWd1cmVkIGZvciBgUzM5MGAgYW5kIGBLVk1gLiBSaWdodCwgc28gd2UgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk1gLCBgQ09ORklHX0tWTWAsIGFuZCBgQ09ORklHX1MzOTBgIOKAkyB0aGF0JiMzOTtzIHRoZSBhcmNoaXRlY3R1cmUuIEFoLCBidXQgd2FpdCwgYENPTkZJR19WRklPX1BDSV9aREVWX0tWTWAgKmRlZmF1bHRzKiB0byAmIzM5O3kmIzM5OyBpZiBib3RoIGBTMzkwYCBhbmQgYEtWTWAgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGNydWNpYWwgY29uZmlndXJhdGlvbnM/IEhtbW0sIGRvZXMgaXQgbmVlZCBgQ09ORklHX1ZGSU9fUENJYCBhcyB3ZWxsPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIEFuZCwgaGFuZyBvbiwgdGhpcyBgVkZJT19QQ0lfWkRFVl9LVk1gIHNldHRpbmcgaXMgZGVmaW5lZCwgaW5zaWRlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBzaXRzIHdpdGhpbiBhbiBgaWYgVkZJT19QQ0lgIGJsb2NrLCBvciBpZiBpdCYjMzk7cyBpbmRlcGVuZGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gUENJXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFZGSU9fUENJX0NPUkVcbiAgIDY6XHRcdHRyaXN0YXRlXG4gICA3Olx0XHRzZWxlY3QgVkZJT19WSVJRRkRcbiAgIDg6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgVkZJT19QQ0lfSU5UWFxuICAxMTpcdFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuICAxMjpcdFx0ZGVwZW5kcyBvbiBWRklPX1BDSV9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFZGSU9fUENJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcJiMzNDtcbiAgMTY6XHRcdHNlbGVjdCBWRklPX1BDSV9DT1JFXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIHRoZSBnZW5lcmljIFBDSSBWRklPIGJ1cyBkcml2ZXIgd2hpY2ggY2FuIGNvbm5lY3QgYW55XG4gIDE5Olx0XHQgIFBDSSBkZXZpY2UgdG8gdGhlIFZGSU8gZnJhbWV3b3JrLlxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMjI6XHRcbiAgMjM6XHRpZiBWRklPX1BDSVxuICAyNDpcdGNvbmZpZyBWRklPX1BDSV9WR0FcbiAgMjU6XHRcdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBYODYgXHUwMDI2XHUwMDI2IFZHQV9BUkJcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXG4gIDI5Olx0XHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcbiAgMzA6XHRcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxuICAzMTpcdFxuICAzMjpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVkZJT19QQ0lfSUdEXG4gIDM1Olx0XHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBYODZcbiAgMzc6XHRcdGRlZmF1bHQgeVxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBTdXBwb3J0IGZvciBJbnRlbCBJR0Qgc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBlbmFibGUgZGlyZWN0XG4gIDQwOlx0XHQgIGFzc2lnbm1lbnQgdG8gdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgaW5jbHVkZXMgZXhwb3NpbmcgYW4gSUdEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgaWYgVkZJT19QQ0lgIGNsb3NlcyBhdCBsaW5lIDQ1LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYFZGSU9fUENJX1pERVZfS1ZNYC4gSXQgbG9va3MgbGlrZSBpdCAqaXNuJiMzOTt0KiBuZXN0ZWQgd2l0aGluIHRoYXQgY29uZGl0aW9uYWwgYmxvY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gYFZGSU9fUENJYCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGBTMzkwICZhbXA7JmFtcDsgS1ZNYCwgd2hpY2ggaXMgZmluZSwgYnV0IEkgc3VzcGVjdCB0aGVyZSBjb3VsZCBiZSBtb3JlIHRvIGl0LiBEb2VzIGl0IGRlcGVuZCBvbiB0aGUgYnJvYWRlciBgVkZJT2AgY29uZmlndXJhdGlvbiBvcHRpb24/IFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvdmZpby9gLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VyIGZvciB0aGUgZGVwZW5kZW5jeSBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgVkZJT1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1wmIzM0O1xuICAgNDpcdFx0c2VsZWN0IElPTU1VX0FQSVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIHx8ICFJT01NVUZEXG4gICA2Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuICAgNzpcdFx0c2VsZWN0IFZGSU9fR1JPVVAgaWYgU1BBUFJfVENFX0lPTU1VIHx8IElPTU1VRkQ9blxuICAgODpcdFx0c2VsZWN0IFZGSU9fREVWSUNFX0NERVYgaWYgIVZGSU9fR1JPVVBcbiAgIDk6XHRcdHNlbGVjdCBWRklPX0NPTlRBSU5FUiBpZiBJT01NVUZEPW5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVkZJTyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2VjdXJlIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVycy5cbiAgMTI6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMTU6XHRcbiAgMTY6XHRpZiBWRklPXG4gIDE3Olx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIFx1MDAyNlx1MDAyNiAhU1BBUFJfVENFX0lPTU1VXG4gIDIwOlx0XHRkZWZhdWx0ICFWRklPX0dST1VQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjIxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqVkZJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGlzIG9ubHkgaW5jbHVkZWQgd2hlbiBgVkZJT2AgaXRzZWxmIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBzb3VyY2luZyBoaWVyYXJjaHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGVyZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBpcyBpbmNsdWRlZC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIGBkcml2ZXJzL3ZmaW8vTWFrZWZpbGVgIG9yIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGluY2x1c2lvbiBydWxlcy4gS25vd2luZyB0aGUgYnVpbGQgc3lzdGVtLCBpdCYjMzk7cyBoaWdobHkgcHJvYmFibGUgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIFZGSU8gZGlyZWN0b3J5IGhhcyB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQsIGJ1dCB0aGUgTWFrZWZpbGUgd291bGQgYmUgdGhlIHBsYWNlIHRvIGdvIGlmIEkgbmVlZGVkIHRvIGtub3cgd2hhdCBjb21wb25lbnRzIGFyZSBnZXR0aW5nIGxpbmtlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1wmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZz04Mz1jb25maWcgVkZJT19ERUJVR0ZTXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctOTItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo5Mzpzb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05NC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgVkZJTyBDb25kaXRpb25hbCoqCgpSaWdodCwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHBpZWNlIG9mIGNvZGUgaXMgbmVzdGxlZCB3aXRoaW4gYW4gYGlmIFZGSU9gIGJsb2NrLi4uIGJ1dCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGV2aWwmIzM5O3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggdGhlc2UgdGhpbmdzLCBhbmQgYSBtaXNwbGFjZWQgY29uZGl0aW9uIGNhbiB3cmVhayBoYXZvYy4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlICpleGFjdCogbG9jYXRpb24gd2hlcmUgdGhhdCBgaWYgVkZJT2Agc3RhdGVtZW50IHRlcm1pbmF0ZXMuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBsb2dpYyBkZXBlbmRpbmcgb24gdGhhdCBjb25kaXRpb24gaXMgcHJvcGVybHkgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGF0IFZGSU8gYmxvY2suIE9rYXksIGxldCBtZSBmb2xsb3cgdGhlIGJyYWNrZXRzIGFuZCBzZWUgd2hlcmUgdGhlICYjMzQ7ZW5kIGlmJiMzNDsgc3RhdGVtZW50IGlzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIG90aGVyd2lzZSwgdGhlcmUgY291bGQgYmUgYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgcmVzdWx0cyBkb3duc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmRpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnPTU3PWNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTYwLVx0ZGVmYXVsdCBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2MTplbmRpZlxuZHJpdmVycy92ZmlvL0tjb25maWctNjItXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9OTc9c291cmNlIFwmIzM0O2RyaXZlcnMvdmZpby9jZHgvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy92ZmlvL0tjb25maWc6OTg6ZW5kaWZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS9WRklPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQsIGBlbmRpZmAgaXMgYXQgbGluZSA5OCwgY29uZmlybWluZyBpdCYjMzk7cyB3aXRoaW4gdGhlIGBpZiBWRklPYCBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhlcmUuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC9zMzkwL2t2bS9wY2kuY2AuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgZmlsZSBldmVuIGdldCBidWlsdCB3aGVuIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgZW5hYmxlZD8gVGltZSB0byBjaGVjayB0aGUgYE1ha2VmaWxlYC4gQWgsIHllcywgYGt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHBjaS5vYCBjbGVhcmx5IHNob3dzIHRoYXQgaXQgaXMuIFNvLCBgVkZJT19QQ0lfWkRFVl9LVk1gLCBgS1ZNYCwgYW5kIGBWRklPYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCk5vdyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcHJpbWFyeSBzdXNwZWN0cyBhcmU6IGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAsIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLCBhbmQgYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gQW5kIGl0IGFwcGVhcnMgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBjYWxscyBga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbmAgd2hpY2ggaW4gdHVybiBjYWxscyBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLiBJcyBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIHN0YXRpYz8gWWVzLCBpdCBpcy4gQnV0LCB3YWl0LCBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzICpub3QqIHN0YXRpYyEgQWxyaWdodCwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGVudHJ5IHBvaW50IHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpbiBgYXJjaC9zMzkwL2t2bS9wY2kuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3BjaV96cGNpX29wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5Mi1cdFx0fVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwOTM6XHRcdHIgPSBrdm1fczM5MF9wY2lfenBjaV9vcChrdm0sIFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwOTQtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5oPTYxPXZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjItXG5hcmNoL3MzOTAva3ZtL3BjaS5oOjYzOmludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjI2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFpQQ0kgT3BlcmF0aW9ucyBpbiBLVk0vczM5MHgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gU2VlbXMgbGlrZSB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhIGdvb2QgY2VudHJhbCBwb2ludCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIFpQQ0kgKHovQXJjaGl0ZWN0dXJlIFBDSSkgb3BlcmF0aW9uIHdpdGhpbiBLVk0vczM5MHguIEl0IG1ha2VzIHNlbnNlIGFzIGEgZm9jdXMgc3ltYm9sLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBuYW1pbmcgY29udmVudGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgZm9yIHRoZXNlIFBDSSBkZXZpY2VzIG9uIHMzOTB4LgoKTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24gY29tZXMgdG8gbWluZCAtIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBLbm93aW5nIGlmIGl0JiMzOTtzIHN0YXRpYyBvciBub3QgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIElmIGl0IGlzIHN0YXRpYywgdGhlbiBpdCYjMzk7cyBsb2NhbCB0byBhIG1vZHVsZSBvciBmaWxlIGFuZCBJIHdpbGwgbmVlZCB0byBsb29rIGFyb3VuZCBpdCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgY2FzZSBtb3JlIGZ1bGx5LiBUaGlzIHdob2xlIHNldCBvZiBpbnRlcmFjdGlvbnMgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIGhvdyBaUENJIGlzIGhhbmRsZWQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHR3byBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3BjaV9haWZfZGlzYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jPTI0Mz1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy00MDQtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjQwNTpzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTQwNi17XG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz01NzY9c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYwMi1cdGlmICh6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgIT0gMClcbmFyY2gvczM5MC9rdm0vcGNpLmM6NjAzOlx0XHRrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoemRldiwgdHJ1ZSk7XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYwNC1cbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY4ND1pbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTcxNi1cdGNhc2UgS1ZNX1MzOTBfWlBDSU9QX0RFUkVHX0FFTjpcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzE3Olx0XHRyID0ga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlKHpkZXYsIGZhbHNlKTtcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzE4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUENJIERlcmVnaXN0cmF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgcGFydGljdWxhciBwYXJ0IGlzIHN0YXRpYy4gSXQmIzM5O3MgaW52b2tlZCBieSBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLCBzcGVjaWZpY2FsbHkgd2hlbiBoYW5kbGluZyB0aGUgYEtWTV9TMzkwX1pQQ0lPUF9ERVJFR19BRU5gIGNhc2UsIGFuZCBhbHNvIGRpcmVjdGx5IGJ5IGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gLiBIbW0sIHF1aWNrIGNoZWNrLi4uIHllcCwgYGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bWAgaXMgYWxzbyBzdGF0aWMuCgpSaWdodCwgc28gdGhhdCBtZWFucyBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBib3RoIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhpcyBaUENJIGZ1bmN0aW9uYWxpdHkuIE5vdywgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBXaGVyZSAqZWxzZSogaXMgYGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bWAgYmVpbmcgY2FsbGVkIGZyb20/IEdvdCB0byB0cmFjZSB0aGF0IGJhY2sgZm9yIGEgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wY2kuYz01MDE9c3RhdGljIGludCBrdm1fczM5MF9wY2lfcmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtNTc1LVxuYXJjaC9zMzkwL2t2bS9wY2kuYzo1NzY6c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcbmFyY2gvczM5MC9rdm0vcGNpLmMtNTc3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MzEtXHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jOjczMjpcdHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIgPSBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFbnRyeSBQb2ludCBvZiB0aGUgTW9kaWZpZWQgS1ZNIENvZGUqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIGZlZWxzIGxpa2UgYSBnb29kIGhvb2sgdG8gc3RhcnQgZGlnZ2luZyBpbnRvLiBUaGUgY29kZSBjaGFuZ2VzIHNlZW0gY2VudGVyZWQgYXJvdW5kIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGBhY2NvdW50X21lbWAgYW5kIGB1bmFjY291bnRfbWVtYCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gaXQgYXJlIHN0YXRpYyBpbmxpbmUuIFRoYXQmIzM5O3MgYSBjb21tb24gb3B0aW1pemF0aW9uLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIHN1cmUsIHdoaWNoIHRoZXkgYXJlLiBUaGlzIGZ1bmN0aW9uLCBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLCBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogaG93IGlzIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgYWN0dWFsbHkgKnJlYWNoZWQqIHdpdGhpbiBRRU1VPyBMZXQmIzM5O3MgdHJhY2UgaXQgZG93bi4gQWgsIHllcywgaXTigJlzIGFuIGlvY3RsLCBzcGVjaWZpY2FsbHkgYEtWTV9TMzkwX1pQQ0lfT1BgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBTeXprYWxsZXIgaXMga25vd24gdG8gZnV6eiBLVk0gaW9jdGxzLiBUaGlzIGlzIGxpa2VseSBob3cgdGhleSB3aWxsIGV4cG9zZSB0aGVzZSBjaGFuZ2VzLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGJlIGVuYWJsZWQ/IE9rYXksIGNsZWFybHksIHdlIG5lZWQgYENPTkZJR19WRklPX1BDSV9aREVWX0tWTWAgYW5kIGBDT05GSUdfS1ZNYC4gQnV0IHdoYXQgYWJvdXQgYENPTkZJR19WRklPX1BDSWA/IEhtbW0sIGlmIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCwgaXQgd291bGQgbWFrZSBzZW5zZSBpZiBpdCBkZXBlbmRzIG9uIGBWRklPX1BDSWAuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIHRvIGJlIHN1cmUuIEl0JiMzOTtzIGJlc3QgdG8gYmUgcHJlY2lzZSwgb3IgSSYjMzk7bSBib3VuZCB0byBtaXNzIHNvbWV0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4gIDQ4Olx0XHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBTMzkwIFx1MDAyNlx1MDAyNiBLVk1cbiAgNTA6XHRcdGRlZmF1bHQgeVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBTdXBwb3J0IHMzOTB4LXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGVuaGFuY2VtZW50c1xuICA1MzpcdFx0ICB0byBLVk0gcGFzc3Rocm91Z2ggY2FwYWJpbGl0aWVzLCBzdWNoIGFzIGludGVycHJldGl2ZSBleGVjdXRpb24gb2ZcbiAgNTQ6XHRcdCAgelBDSSBpbnN0cnVjdGlvbnMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGVuYWJsZSBzMzkweCBLVk0gdmZpby1wY2kgZXh0ZW5zaW9ucywgc2F5IFkuXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuICA1OTpcdFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuICA2MDpcdFxuICA2MTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZ1wmIzM0O1xuICA2MjpcdFxuICA2MzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL2lzbS9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYnJlYWtpbmcgZG93biB0aGUgZGVwZW5kZW5jeSBpc3N1ZS4KCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFZGSU8gYW5kIGl0cyBJbXBsaWNhdGlvbnMqKgoKSG1tLCB0aGlzIGRlcGVuZGVuY3kgaXNuJiMzOTt0IGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBpbml0aWFsbHkgdGhvdWdodC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBgVkZJT19QQ0lgLCBidXQgaXQgc2VlbXMgdGhlIHJlYWwga2V5IGlzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgUzM5MGAgYW5kIGBLVk1gLiBUaG9zZSBhcmUgdGhlIGNvcmUgcmVxdWlyZW1lbnRzLiBIb3dldmVyLCB0aGUgYEtjb25maWdgIHN0cnVjdHVyZSBpcyB0aGUgY3VscHJpdCBoZXJlLiBXZSBzZWUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIG5lc3RlZCB3aXRoaW4gYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AsIHdoaWNoIGlzLCBpbiB0dXJuLCBzb3VyY2VkIGluc2lkZSBgZHJpdmVycy92ZmlvL0tjb25maWdgLCB1bmRlciB0aGUgYGlmIFZGSU9gIGNvbmRpdGlvbi4gRXNzZW50aWFsbHksIGV2ZW4gdGhvdWdoIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSBpc24mIzM5O3Qgb24gYFZGSU9fUENJYCwgdGhlIHdheSB0aGUga2VybmVsIGNvbmZpZyBpcyBzdHJ1Y3R1cmVkIG1lYW5zIHRoYXQgYFZGSU9gIGl0c2VsZiAqaXMqIHJlcXVpcmVkIGJlY2F1c2Ugb2YgdGhpcyBuZXN0aW5nLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgZXZlbiBpZiBpdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIGVuYWJsaW5nIGZhY3Rvci4gU28sIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgVkZJT2AgaXMgdHJ1bHkgbmVjZXNzYXJ5IGhlcmUsIGV2ZW4gd2l0aCB0aGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGluIHBsYWNlLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgVkZJT1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1wmIzM0O1xuICAgNDpcdFx0c2VsZWN0IElPTU1VX0FQSVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIHx8ICFJT01NVUZEXG4gICA2Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuICAgNzpcdFx0c2VsZWN0IFZGSU9fR1JPVVAgaWYgU1BBUFJfVENFX0lPTU1VIHx8IElPTU1VRkQ9blxuICAgODpcdFx0c2VsZWN0IFZGSU9fREVWSUNFX0NERVYgaWYgIVZGSU9fR1JPVVBcbiAgIDk6XHRcdHNlbGVjdCBWRklPX0NPTlRBSU5FUiBpZiBJT01NVUZEPW5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVkZJTyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2VjdXJlIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVycy5cbiAgMTI6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMTU6XHRcbiAgMTY6XHRpZiBWRklPXG4gIDE3Olx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIFx1MDAyNlx1MDAyNiAhU1BBUFJfVENFX0lPTU1VXG4gIDIwOlx0XHRkZWZhdWx0ICFWRklPX0dST1VQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzc1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6cGNpX2t2bV9ob29rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTc2OT12b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTc3MC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjc3MTpzdHJ1Y3QgenBjaV9rdm1faG9vayB7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzItXHRpbnQgKCprdm1fcmVnaXN0ZXIpKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzUtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo3NzY6ZXh0ZXJuIHN0cnVjdCB6cGNpX2t2bV9ob29rIHpwY2lfa3ZtX2hvb2s7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzctXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz03Mjk9aW50IF9faW5pdCBrdm1fczM5MF9wY2lfaW5pdCh2b2lkKVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MzAte1xuYXJjaC9zMzkwL2t2bS9wY2kuYzo3MzE6XHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jOjczMjpcdHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIgPSBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMy1cbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTc0Nz12b2lkIGt2bV9zMzkwX3BjaV9leGl0KHZvaWQpXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTc0OC17XG5hcmNoL3MzOTAva3ZtL3BjaS5jOjc0OTpcdHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyID0gTlVMTDtcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzUwOlx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlciA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTc1MS1cbi0tXG5hcmNoL3MzOTAvcGNpL3BjaV9rdm1faG9vay5jLTExLVxuYXJjaC9zMzkwL3BjaS9wY2lfa3ZtX2hvb2suYzoxMjpzdHJ1Y3QgenBjaV9rdm1faG9vayB6cGNpX2t2bV9ob29rO1xuYXJjaC9zMzkwL3BjaS9wY2lfa3ZtX2hvb2suYzoxMzpFWFBPUlRfU1lNQk9MX0dQTCh6cGNpX2t2bV9ob29rKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYz0xNDQ9aW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE1My1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE1NDpcdGlmICh6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlcilcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE1NTpcdFx0cmV0dXJuIHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKHpkZXYsIHZkZXYtXHUwMDNldmRldi5rdm0pO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMtMTU2LVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jPTE2MD12b2lkIHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYy0xNjYtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYzoxNjc6XHRpZiAoenBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlcilcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE2ODpcdFx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3Rlcih6ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE2OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzY5CgkJCQkJCQlvdXRwdXQ6IDcxCgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkZJTy1QQ0kgYW5kIEtWTS9zMzkwIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8tUENJIGRyaXZlciBhbmQgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbS4gSXQgbG9va3MgbGlrZSBgdmZpb19wY2lfemRldl9vcGVuX2RldmljZWAgdHJpZ2dlcnMgdGhlIGBrdm1fcmVnaXN0ZXJgIHByb2Nlc3MsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gLiBDb252ZXJzZWx5LCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIGhhbmRsZXMgdGhlIGNsZWFudXAgYnkgY2FsbGluZyBga3ZtX3VucmVnaXN0ZXJgLCBsZWFkaW5nIHRvIGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gLiBJIHNlZSB0aGF0IGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gIHRoZW4gY2FsbHMgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAuIFNvLCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIG9mZmVycyBhbm90aGVyIHJvdXRlIHRvIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLgoKSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIHNlZW1zIGxpa2UgdGhlIGJlc3QgY2FuZGlkYXRlIGJlY2F1c2UgaXQgY292ZXJzIHRoZSBpb2N0bCBwYXRoLiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIHRoZSByaWdodCBwbGFjZSB0byBmb2N1cy4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgdG8gY29uc2lkZXI/IExldCYjMzk7cyBydWxlIHRoZW0gb3V0LiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIGFuZCBga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlYCBhcmUgc3RhdGljLCBzbyB0aGF0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGV4YW1pbmF0aW9uLiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFNpbWlsYXJseSwgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gIGFuZCBga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtYCBhcmUgc3RhdGljLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGxvY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gYHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2VgIGFuZCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIHJlc2lkZSBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNgLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGluIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCwgd2hpY2ggc3RyZW5ndGhlbnMgdGhlIGFyZ3VtZW50IHRoYXQgZm9jdXNpbmcgb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IHNlZW1zIGxvZ2ljYWwuCgpOb3csIGxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gb2YgYGFyY2gvczM5MC9rdm0vcGNpLmNgIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBpbW1lZGlhdGVseSBvYnZpb3VzIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIG5vdGUuIFRoaXMgc2hvdWxkIGhlbHAgbWUgY29uZmlybSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3J1Y2lhbCBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcGNpLmM9MjE9c3RhdGljIGlubGluZSBpbnQgX19zZXRfaXJxX25vaWliKHUxNiBjdGwsIHU4IGlzYylcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTI3LVxuYXJjaC9zMzkwL2t2bS9wY2kuYzoyODp2b2lkIGt2bV9zMzkwX3BjaV9hZW5fZXhpdCh2b2lkKVxuYXJjaC9zMzkwL2t2bS9wY2kuYy0yOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz0xMDE9c3RhdGljIGludCB6cGNpX3Jlc2V0X2FpcGIodTggbmlzYylcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTExOS1cbmFyY2gvczM5MC9rdm0vcGNpLmM6MTIwOmludCBrdm1fczM5MF9wY2lfYWVuX2luaXQodTggbmlzYylcbmFyY2gvczM5MC9rdm0vcGNpLmMtMTIxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTU3Nj1zdGF0aWMgdm9pZCBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm0odm9pZCAqb3BhcXVlKVxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtNjI2LVxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2Mjc6dm9pZCBrdm1fczM5MF9wY2lfaW5pdF9saXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjI4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYzMi1cbmFyY2gvczM5MC9rdm0vcGNpLmM6NjMzOnZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02MzQte1xuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03NDYtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjc0Nzp2b2lkIGt2bV9zMzkwX3BjaV9leGl0KHZvaWQpXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTc0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgWlBDSSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoaXMsIHJpZ2h0PyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIHRob3VnaCDigJMgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBaCwgeWVzLCBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBsb29rcyBsaWtlIGEga2V5IG9uZSB0b28uIE5hdHVyYWxseSwgYENPTkZJR19LVk1gIGl0c2VsZiBpcyBhIHByZXJlcXVpc2l0ZS4gQW5kIG9mIGNvdXJzZSBgQ09ORklHX1ZGSU9gIGFuZCBgQ09ORklHX1ZGSU9fUENJYC4gSGFuZyBvbuKApiBpc24mIzM5O3QgYHZmaW9fcGNpX3pkZXYuY2AgbG9jYXRlZCBpbiBgZHJpdmVycy92ZmlvL3BjaS9gPyBSaWdodCwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX3pkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGU9Mz12ZmlvLXBjaS1jb3JlLXkgOj0gdmZpb19wY2lfY29yZS5vIHZmaW9fcGNpX2ludHJzLm8gdmZpb19wY2lfcmR3ci5vIHZmaW9fcGNpX2NvbmZpZy5vXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjQ6dmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHZmaW9fcGNpX3pkZXYub1xuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZS01LXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSAmIzQzOz0gdmZpb19wY2lfZG1hYnVmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBWRklPOgoKKipWRklPIE1vZHVsZSBSZWxhdGlvbnNoaXBzOiBBIFF1aWNrIE1lbnRhbCBEcmlsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB2ZmlvX3BjaV96ZGV2Lm9gLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgVkZJTy1QQ0kgaW5mcmFzdHJ1Y3R1cmUsIGlzbiYjMzk7dCBpdD8gU2VlbXMgcmlnaHQuIEl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgdGhpbmc7IGl0JiMzOTtzIGludHJpY2F0ZWx5IGxpbmtlZC4gU28sIGB2ZmlvX3BjaV96ZGV2Lm9gLi4uIHRoYXQmIzM5O3MgKnBhcnQqIG9mIHRoZSBsYXJnZXIgYHZmaW8tcGNpLWNvcmVgIG1vZHVsZSwgZ290IGl0LgoKTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogd2hlbiBkb2VzIHRoaXMgYHZmaW8tcGNpLWNvcmVgIG1vZHVsZSBhY3R1YWxseSBnZXQgY29tcGlsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgYnVpbGQgcHJvY2VzcyBvciB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0byBwaW4gZG93biB3aGVuIHRoZSBjb3JlIFZGSU8tUENJIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlLiBXaGVyZSBpcyBpdCByZWZlcmVuY2VkIGluIHRoZSBLY29uZmlnPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgaXRzIGNvbXBpbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvLXBjaS1jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlLTItXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjM6dmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZTo0OnZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICYjNDM7PSB2ZmlvX3BjaV96ZGV2Lm9cbmRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGU6NTp2ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX0RNQUJVRikgJiM0Mzs9IHZmaW9fcGNpX2RtYWJ1Zi5vXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZGSU9fUENJX0NPUkUpICYjNDM7PSB2ZmlvLXBjaS1jb3JlLm9cbmRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBWRklPLVBDSS4gU2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19WRklPX1BDSV9DT1JFYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3Igc29tZXRoaW5nIEkmIzM5O20gd29ya2luZyBvbi4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIHRoZSBjb3JlIGNvbXBvbmVudC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGFuZCB0byBjaGVjayBmb3IgYW55IGNhdmVhdHMgb3IgYXNzb2NpYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGZpbGUuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBzdXBwb3J0aW5nIGNvbmZpZywgb3IgYW4gZWRnZSBjYXNlLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlIHRoZSB3aG9sZSBwaWN0dXJlIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIHR5cGljYWxseSBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX1BDSV9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyBvbiBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBWRklPLVBDSSwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZC4gUmlnaHQsIGBWRklPX1BDSV9DT1JFYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgVkZJT19QQ0lgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBWRklPX1BDSV9DT1JFYCBwcm92aWRlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRoYXQgYFZGSU9fUENJYCBidWlsZHMgdXBvbi4gVGhlcmVmb3JlLCB0byBnZXQgYFZGSU9fUENJX0NPUkVgIHdvcmtpbmcsIEkgKm11c3QqIGhhdmUgYENPTkZJR19WRklPX1BDSWAgZW5hYmxlZCBpbiBteSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXTigJlzIGEgZGVwZW5kZW5jeSwgbm90IGEgc3RhbmRhbG9uZSBvcHRpb24uCgpOb3csIHdoZXJlIHdhcyB0aGF0IEtjb25maWcgZmlsZSBhZ2FpbiBmb3IgVkZJTy1QQ0k/IFJpZ2h0LCBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBob3cgYFZGSU9fUENJYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbuKAmXQgbWlzc2VkIGFueXRoaW5nIGZ1bmRhbWVudGFsIGR1cmluZyBteSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGFzIGV4cGVjdGVkLiBMZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIG1vZHVsZXMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgzNQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAxMDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWRklPLVBDSSBaREVWIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYC4gIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgc2VwYXJhdGUsIGRlcGVuZGluZyBvbiBgUzM5MCAmYW1wOyZhbXA7IEtWTWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgaWYgYFZGSU9fUENJX1pERVZfS1ZNYCBpcyBlbmFibGVkLCBgYXJjaC9zMzkwL2t2bS9wY2kub2AgZ2V0cyBjb21waWxlZC4gIEJ1dCB3YWl0LCBkb2VzIGBWRklPX1BDSV9aREVWX0tWTWAgYWN0dWFsbHkgKnJlcXVpcmUqIGBWRklPX1BDSV9DT1JFYCB0byBiZSBlbmFibGVkPyBJdCBzZWVtcyBzbywgYmVjYXVzZSBgdmZpb19wY2lfemRldi5vYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYFZGSU9fUENJX0NPUkVgIGlzIGVuYWJsZWQuIFNpbmNlIHdlIG5lZWQgdG8gdXNlIHRoZSBob29rcywgd2UgKmRlZmluaXRlbHkqIG5lZWQgYFZGSU9fUENJX0NPUkVgLCB3aGljaCBtZWFucyB3ZSAqbXVzdCogaGF2ZSBgQ09ORklHX1ZGSU9fUENJYCBlbmFibGVkLiAgR290IGl0LgoKU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgbmVlZGVkIGFyZTogYEtWTWAsIGBWRklPYCwgYFZGSU9fUENJYCwgYW5kIGBWRklPX1BDSV9aREVWX0tWTWAuICBMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgYGRlZmF1bHQgeWAgdW5kZXIgYFMzOTAgJmFtcDsmYW1wOyBLVk1gLiBZZXMsIGl0IGlzLiBUaGVyZWZvcmUsIHdlIGp1c3QgaGF2ZSB0byBlbnN1cmUgYFZGSU9gIGFuZCBgVkZJT19QQ0lgIGFyZSBlbmFibGVkLCBhbG9uZyB3aXRoIGBLVk1gLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBvbmUuICBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBpbml0IGFuZCBleGl0IGZ1bmN0aW9ucy4gYGt2bV9zMzkwX3BjaV9hZW5faW5pdGAgYW5kIGBrdm1fczM5MF9wY2lfaW5pdGAsIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfaW5pdGAuIEFsc28sIGBrdm1fczM5MF9wY2lfYWVuX2V4aXRgIGFuZCBga3ZtX3MzOTBfcGNpX2V4aXRgIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfZXhpdGAuIEFuZCBmaW5hbGx5LCBga3ZtX3MzOTBfcGNpX2luaXRfbGlzdGAgYW5kIGBrdm1fczM5MF9wY2lfY2xlYXJfbGlzdGAgYXJlIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9pbml0X3ZtYCBhbmQgYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gLgoKU28sIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBpb2N0bCBwZXItVk0sIGFuZCBoYW5kbGVzIHRoZSBtb3N0IG9mIHRoZSBtb2RpZmllZCBjb2RlLgoKTm93LCBsZXQmIzM5O3MgcmV2aXNpdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBjaGFuZ2luZyBgdW5hY2NvdW50X21lbWAgYW5kIGBhY2NvdW50X21lbWAgdG8gdXNlIGBremRldi0mZ3Q7dXNlcl9hY2NvdW50YCBhbmQgYGt6ZGV2LSZndDttbV9hY2NvdW50YCBpbnN0ZWFkIG9mIGBjdXJyZW50X3VzZXIoKWAgYW5kIGBjdXJyZW50LSZndDttbWAuICBDcnVjaWFsbHksIGl0JiMzOTtzIGFkZGluZyBlcnJvciBoYW5kbGluZyBpbiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIGZvciBgYWNjb3VudF9tZW1gIGZhaWx1cmVzLiBJdCBhbHNvIGNoZWNrcyBpZiBBSUJWIGlzIGFscmVhZHkgZW5hYmxlZCwgYXMgd2VsbCBhcyBpZiBBSUJWIHNwYW5zIG1vcmUgdGhhbiAxIHBhZ2UgYW5kIGlmIEFJU0IgaXMgZHdvcmQgYWxpZ25lZC4gIEFkZGl0aW9uYWxseSwgaXQgaGFuZGxlcyBmYWlsdXJlcyBmb3IgYGFpcnFfaXZfYWxsb2NfYml0YCwgYGFpcnFfaXZfY3JlYXRlYCwgYW5kIGBrdm1fenBjaV9zZXRfYWlycWAuIFRoYXQmIzM5O3MgYSAqc2lnbmlmaWNhbnQqIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGggYSBsb3Qgb2YgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuCgpJIG5lZWQgdG8gZW5hYmxlIGBLVk1gLCBgVkZJT2AsIGBWRklPX1BDSWAsIGFuZCBgVkZJT19QQ0lfWkRFVl9LVk1gIGluIHRoZSBjb25maWcuIEFuZCBubywgYFMzOTBgIGlzIHRoZSBhcmNoaXRlY3R1cmUsIGl0IHdpbGwgYmUgcnVuIG9uIHMzOTB4LgoKTGV0JiMzOTtzIHZlcmlmeSB0aGF0IGZ1bmN0aW9uIG5hbWU6IGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgaW5kZWVkIGBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylgCgpBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucz8gTWF5YmUgYHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2VgPyBUaGF0IG9uZSBpcyBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNgLCBhbmQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGl0LiBTbywgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyBzdWZmaWNpZW50LgoKTm93LCBsZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJX1pERVZfS1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3MzOTBfcGNpX3pwY2lfb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7VkZJT19QQ0lfWkRFVl9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fczM5MF9wY2lfenBjaV9vcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gczM5MHggS1ZNIFBDSSBwYXNzdGhyb3VnaCAoelBDSSkgZHVyaW5nIEFJRiAoQWRhcHRlciBJbnRlcnJ1cHRpb24gRmFjaWxpdHkpIGVuYWJsZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBtZW1vcnkgcGlubmluZyBhbmQgaW50ZXJydXB0IHZlY3RvciBhbGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk1fUzM5MF9aUENJX09QIGlvY3RsLCBoYW5kbGVkIGJ5IGt2bV9zMzkwX3BjaV96cGNpX29wLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6MjYuNjA3OTM3Njc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NTQ5OTg5NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlZGSU9fUENJX1pERVZfS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3MzOTBfcGNpX3pwY2lfb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gczM5MHggS1ZNIFBDSSBwYXNzdGhyb3VnaCAoelBDSSkgZHVyaW5nIEFJRiAoQWRhcHRlciBJbnRlcnJ1cHRpb24gRmFjaWxpdHkpIGVuYWJsZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBtZW1vcnkgcGlubmluZyBhbmQgaW50ZXJydXB0IHZlY3RvciBhbGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk1fUzM5MF9aUENJX09QIGlvY3RsLCBoYW5kbGVkIGJ5IGt2bV9zMzkwX3BjaV96cGNpX29wLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NToyNi42MDkzMDg1ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODY5NjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFmZWEyY2VlNThhNGE5MGViZWNkZTlkM2I5MTcwMTZjZGQyYWYwNmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDM6NDU6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuYyBiL2FyY2gvczM5MC9rdm0vcGNpLmNcXG5pbmRleCA3MjBiYjU4Y2FiZTJlOS4uNDM5NGNlZmVmMjQyMmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wY2kuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcGNpLmNcXG5AQCAtMTkwLDQwICsxOTAsNjEgQEAgc3RhdGljIGludCBrdm1fenBjaV9jbGVhcl9haXJxKHN0cnVjdCB6cGNpX2RldiAqemRldilcXG4gXFx0cmV0dXJuIGNjID8gLUVJTyA6IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4tXFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XFxuK1xcdHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGt6ZGV2LVxcdTAwM2V1c2VyX2FjY291bnQ7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQgPSBremRldi1cXHUwMDNlbW1fYWNjb3VudDtcXG4gXFxuLVxcdGlmICh1c2VyKVxcbitcXHRpZiAodXNlcikge1xcbiBcXHRcXHRhdG9taWNfbG9uZ19zdWIobnJfcGFnZXMsIFxcdTAwMjZ1c2VyLVxcdTAwM2Vsb2NrZWRfdm0pO1xcbi1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0pXFxuLVxcdFxcdGF0b21pYzY0X3N1Yihucl9wYWdlcywgXFx1MDAyNmN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwaW5uZWRfdm0pO1xcbitcXHRcXHRmcmVlX3VpZCh1c2VyKTtcXG4rXFx0XFx0a3pkZXYtXFx1MDAzZXVzZXJfYWNjb3VudCA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtbV9hY2NvdW50KSB7XFxuK1xcdFxcdGF0b21pYzY0X3N1Yihucl9wYWdlcywgXFx1MDAyNm1tX2FjY291bnQtXFx1MDAzZXBpbm5lZF92bSk7XFxuK1xcdFxcdG1tZHJvcChtbV9hY2NvdW50KTtcXG4rXFx0XFx0a3pkZXYtXFx1MDAzZW1tX2FjY291bnQgPSBOVUxMO1xcbitcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XFxuK1xcdGludCByYyA9IDA7XFxuIFxcbiBcXHRwYWdlX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0Y3VyX3BhZ2VzID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dXNlci1cXHUwMDNlbG9ja2VkX3ZtKTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXdfcGFnZXMgPSBjdXJfcGFnZXMgKyBucl9wYWdlcztcXG4tXFx0XFx0aWYgKG5ld19wYWdlcyBcXHUwMDNlIHBhZ2VfbGltaXQpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRpZiAobmV3X3BhZ2VzIFxcdTAwM2UgcGFnZV9saW1pdCkge1xcbitcXHRcXHRcXHRyYyA9ICAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGcoXFx1MDAyNnVzZXItXFx1MDAzZWxvY2tlZF92bSwgXFx1MDAyNmN1cl9wYWdlcywgbmV3X3BhZ2VzKSk7XFxuIFxcbi1cXHRhdG9taWM2NF9hZGQobnJfcGFnZXMsIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGlubmVkX3ZtKTtcXG4rXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tKSB7XFxuK1xcdFxcdG1tZ3JhYihjdXJyZW50LVxcdTAwM2VtbSk7XFxuK1xcdFxcdGF0b21pYzY0X2FkZChucl9wYWdlcywgXFx1MDAyNmN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwaW5uZWRfdm0pO1xcbitcXHR9XFxuK1xcbitcXHRremRldi1cXHUwMDNldXNlcl9hY2NvdW50ID0gdXNlcjtcXG4rXFx0a3pkZXYtXFx1MDAzZW1tX2FjY291bnQgPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rb3V0OlxcbitcXHRmcmVlX3VpZCh1c2VyKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcdFxcdFxcdFxcdCAgIGJvb2wgYXNzaXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlc1sxXSwgKmFpYnZfcGFnZSwgKmFpc2JfcGFnZSA9IE5VTEw7XFxuLVxcdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4O1xcbitcXHR1bnNpZ25lZCBpbnQgbXNpX3ZlY3MsIGlkeCwgc2l6ZTtcXG4gXFx0c3RydWN0IHpwY2lfZ2FpdGUgKmdhaXRlO1xcbiBcXHR1bnNpZ25lZCBsb25nIGh2YSwgYml0O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuQEAgLTIzNyw2ICsyNTgsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxcbiBcXHRpZiAoemRldi1cXHUwMDNlZ2lzYSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdC8qIEFJRiBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgKi9cXG4rXFx0aWYgKHpkZXYtXFx1MDAzZWt6ZGV2LVxcdTAwM2VmaWIuZm10MC5haWJ2ICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0a3ZtID0gemRldi1cXHUwMDNla3pkZXYtXFx1MDAzZWt2bTtcXG4gXFx0bXNpX3ZlY3MgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZpYi1cXHUwMDNlZm10MC5ub2ksIHpkZXYtXFx1MDAzZW1heF9tc2kpO1xcbiBcXG5AQCAtMjQ2LDYgKzI3MSwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcdFxcdHJldHVybiBnaXNjO1xcbiBcXG4gXFx0LyogUmVwbGFjZSBBSUJWIGFkZHJlc3MgKi9cXG4rXFx0c2l6ZSA9IEJJVFNfVE9fTE9OR1MobXNpX3ZlY3MgKyBmaWItXFx1MDAzZWZtdDAuYWlidm8pICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xcbitcXHRucGFnZXMgPSBESVZfUk9VTkRfVVAoKGZpYi1cXHUwMDNlZm10MC5haWJ2IFxcdTAwMjYgflBBR0VfTUFTSykgKyBzaXplLCBQQUdFX1NJWkUpO1xcbitcXHQvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi9cXG4rXFx0aWYgKG5wYWdlcyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0cmMgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuIFxcdGh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItXFx1MDAzZWZtdDAuYWlidikpO1xcbiBcXHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sIHBhZ2VzKTtcXG5AQCAtMjYxLDYgKzI5NCwxMiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcbiBcXHQvKiBQaW4gdGhlIGd1ZXN0IEFJU0IgaWYgb25lIHdhcyBzcGVjaWZpZWQgKi9cXG4gXFx0aWYgKGZpYi1cXHUwMDNlZm10MC5zdW0gPT0gMSkge1xcbitcXHRcXHQvKiBBSVNCIG11c3QgYmUgZHdvcmQgYWxpZ25lZCAqL1xcbitcXHRcXHRpZiAoZmliLVxcdTAwM2VmbXQwLmFpc2IgXFx1MDAyNiAweDcpIHtcXG4rXFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHVucGluMTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuIFxcdFxcdGh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItXFx1MDAzZWZtdDAuYWlzYikpO1xcbiBcXHRcXHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuQEAgLTI3NSwyMCArMzE0LDI4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcXG4gXFx0fVxcbiBcXG4gXFx0LyogQWNjb3VudCBmb3IgcGlubmVkIHBhZ2VzLCByb2xsIGJhY2sgb24gZmFpbHVyZSAqL1xcbi1cXHRpZiAoYWNjb3VudF9tZW0ocGNvdW50KSlcXG4rXFx0cmMgPSBhY2NvdW50X21lbSh6ZGV2LVxcdTAwM2VremRldiwgcGNvdW50KTtcXG4rXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIHVucGluMjtcXG4gXFxuIFxcdC8qIEFJU0IgbXVzdCBiZSBhbGxvY2F0ZWQgYmVmb3JlIHdlIGNhbiBmaWxsIGluIEdBSVRFICovXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmFpZnQtXFx1MDAzZWFpZnRfbG9jayk7XFxuIFxcdGJpdCA9IGFpcnFfaXZfYWxsb2NfYml0KGFpZnQtXFx1MDAzZXNidik7XFxuLVxcdGlmIChiaXQgPT0gLTFVTClcXG4rXFx0aWYgKGJpdCA9PSAtMVVMKSB7XFxuK1xcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4gXFx0emRldi1cXHUwMDNlYWlzYiA9IGJpdDsgLyogc3RvcmUgdGhlIHN1bW1hcnkgYml0IG51bWJlciAqL1xcbiBcXHR6ZGV2LVxcdTAwM2VhaWJ2ID0gYWlycV9pdl9jcmVhdGUobXNpX3ZlY3MsIEFJUlFfSVZfREFUQSB8XFxuIFxcdFxcdFxcdFxcdCAgICBBSVJRX0lWX0JJVExPQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgQUlSUV9JVl9HVUVTVFZFQyxcXG4gXFx0XFx0XFx0XFx0ICAgIHBoeXNfdG9fdmlydChmaWItXFx1MDAzZWZtdDAuYWlidikpO1xcbiBcXG4rXFx0aWYgKCF6ZGV2LVxcdTAwM2VhaWJ2KSB7XFxuK1xcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX2Fpc2I7XFxuK1xcdH1cXG4rXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmFpZnQtXFx1MDAzZWdhaXRfbG9jayk7XFxuIFxcdGdhaXRlID0gYWlmdC1cXHUwMDNlZ2FpdCArIHpkZXYtXFx1MDAzZWFpc2I7XFxuIFxcbkBAIC0zMTEsMjEgKzM1OCwzOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcdGFpZnQtXFx1MDAzZWt6ZGV2W3pkZXYtXFx1MDAzZWFpc2JdID0gemRldi1cXHUwMDNla3pkZXY7XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2YWlmdC1cXHUwMDNlZ2FpdF9sb2NrKTtcXG4gXFxuLVxcdC8qIFVwZGF0ZSBndWVzdCBGSUIgZm9yIHJlLWlzc3VlICovXFxuLVxcdGZpYi1cXHUwMDNlZm10MC5haXNibyA9IHpkZXYtXFx1MDAzZWFpc2IgXFx1MDAyNiA2MztcXG4tXFx0ZmliLVxcdTAwM2VmbXQwLmFpc2IgPSB2aXJ0X3RvX3BoeXMoYWlmdC1cXHUwMDNlc2J2LVxcdTAwM2V2ZWN0b3IpICsgKHpkZXYtXFx1MDAzZWFpc2IgLyA2NCkgKiA4O1xcbi1cXHRmaWItXFx1MDAzZWZtdDAuaXNjID0gZ2lzYztcXG4tXFxuIFxcdC8qIFNhdmUgc29tZSBndWVzdCBmaWIgdmFsdWVzIGluIHRoZSBob3N0IGZvciBsYXRlciB1c2UgKi9cXG4tXFx0emRldi1cXHUwMDNla3pkZXYtXFx1MDAzZWZpYi5mbXQwLmlzYyA9IGZpYi1cXHUwMDNlZm10MC5pc2M7XFxuK1xcdHpkZXYtXFx1MDAzZWt6ZGV2LVxcdTAwM2VmaWIuZm10MC5pc2MgPSBnaXNjO1xcbiBcXHR6ZGV2LVxcdTAwM2VremRldi1cXHUwMDNlZmliLmZtdDAuYWlidiA9IGZpYi1cXHUwMDNlZm10MC5haWJ2O1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFpZnQtXFx1MDAzZWFpZnRfbG9jayk7XFxuIFxcbiBcXHQvKiBJc3N1ZSB0aGUgY2xwIHRvIHNldHVwIHRoZSBpcnEgbm93ICovXFxuIFxcdHJjID0ga3ZtX3pwY2lfc2V0X2FpcnEoemRldik7XFxuLVxcdHJldHVybiByYztcXG4rXFx0aWYgKCFyYykge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFpZnQtXFx1MDAzZWFpZnRfbG9jayk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RhcnQgY2xlYW51cCAqL1xcbitcXHR6ZGV2LVxcdTAwM2VremRldi1cXHUwMDNlZmliLmZtdDAuaXNjID0gMDtcXG4rXFx0emRldi1cXHUwMDNla3pkZXYtXFx1MDAzZWZpYi5mbXQwLmFpYnYgPSAwO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2YWlmdC1cXHUwMDNlZ2FpdF9sb2NrKTtcXG4rXFx0Z2FpdGUtXFx1MDAzZWNvdW50LS07XFxuK1xcdGdhaXRlLVxcdTAwM2VhaXNiID0gMDtcXG4rXFx0Z2FpdGUtXFx1MDAzZWdpc2MgPSAwO1xcbitcXHRnYWl0ZS1cXHUwMDNlYWlzYm8gPSAwO1xcbitcXHRnYWl0ZS1cXHUwMDNlZ2lzYSA9IDA7XFxuK1xcdGFpZnQtXFx1MDAzZWt6ZGV2W3pkZXYtXFx1MDAzZWFpc2JdID0gTlVMTDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZhaWZ0LVxcdTAwM2VnYWl0X2xvY2spO1xcbitcXG4rXFx0YWlycV9pdl9yZWxlYXNlKHpkZXYtXFx1MDAzZWFpYnYpO1xcbitcXHR6ZGV2LVxcdTAwM2VhaWJ2ID0gTlVMTDtcXG4rXFxuK2ZyZWVfYWlzYjpcXG4rXFx0YWlycV9pdl9mcmVlX2JpdChhaWZ0LVxcdTAwM2VzYnYsIHpkZXYtXFx1MDAzZWFpc2IpO1xcbitcXHR6ZGV2LVxcdTAwM2VhaXNiID0gMDtcXG4gdW5sb2NrOlxcbitcXHRpZiAocGNvdW50IFxcdTAwM2UgMClcXG4rXFx0XFx0dW5hY2NvdW50X21lbSh6ZGV2LVxcdTAwM2VremRldiwgcGNvdW50KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhaWZ0LVxcdTAwM2VhaWZ0X2xvY2spO1xcbiB1bnBpbjI6XFxuIFxcdGlmIChmaWItXFx1MDAzZWZtdDAuc3VtID09IDEpXFxuQEAgLTM5Niw3ICs0NjEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXFxuIFxcdFxcdHBjb3VudCsrO1xcbiBcXHR9XFxuIFxcdGlmIChwY291bnQgXFx1MDAzZSAwKVxcbi1cXHRcXHR1bmFjY291bnRfbWVtKHBjb3VudCk7XFxuK1xcdFxcdHVuYWNjb3VudF9tZW0oa3pkZXYsIHBjb3VudCk7XFxuIG91dDpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhaWZ0LVxcdTAwM2VhaWZ0X2xvY2spO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuaCBiL2FyY2gvczM5MC9rdm0vcGNpLmhcXG5pbmRleCBmZjA5NzJkZDVlNzFkYy4uZmRmOGM3YmY0ZWQwODIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wY2kuaFxcbisrKyBiL2FyY2gvczM5MC9rdm0vcGNpLmhcXG5AQCAtMjIsNiArMjIsOCBAQCBzdHJ1Y3Qga3ZtX3pkZXYge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuIFxcdHN0cnVjdCB6cGNpX2ZpYiBmaWI7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XFxuK1xcdHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcl9hY2NvdW50O1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9hY2NvdW50O1xcbiB9O1xcbiBcXG4gc3RydWN0IHpwY2lfZ2FpdGUge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NToyNy41MDg5NjE4OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzc2NDg5NDgwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiVkZJT19QQ0lfWkRFVl9LVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fczM5MF9wY2lfenBjaV9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBlcnJvciBoYW5kbGluZyBpbiBzMzkweCBLVk0gUENJIHBhc3N0aHJvdWdoICh6UENJKSBkdXJpbmcgQUlGIChBZGFwdGVyIEludGVycnVwdGlvbiBGYWNpbGl0eSkgZW5hYmxlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZXJyb3IgcGF0aHMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZm9yIG1lbW9yeSBwaW5uaW5nIGFuZCBpbnRlcnJ1cHQgdmVjdG9yIGFsbG9jYXRpb24uIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEtWTV9TMzkwX1pQQ0lfT1AgaW9jdGwsIGhhbmRsZWQgYnkga3ZtX3MzOTBfcGNpX3pwY2lfb3AuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmZWEyY2VlNThhNGE5MGViZWNkZTlkM2I5MTcwMTZjZGQyYWYwNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMzo0NToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcGNpLmMgYi9hcmNoL3MzOTAva3ZtL3BjaS5jXG5pbmRleCA3MjBiYjU4Y2FiZTJlOS4uNDM5NGNlZmVmMjQyMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3BjaS5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3BjaS5jXG5AQCAtMTkwLDQwICsxOTAsNjEgQEAgc3RhdGljIGludCBrdm1fenBjaV9jbGVhcl9haXJxKHN0cnVjdCB6cGNpX2RldiAqemRldilcbiBcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5hY2NvdW50X21lbSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuLVx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XG4rXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBremRldi1cdTAwM2V1c2VyX2FjY291bnQ7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9hY2NvdW50ID0ga3pkZXYtXHUwMDNlbW1fYWNjb3VudDtcbiBcbi1cdGlmICh1c2VyKVxuK1x0aWYgKHVzZXIpIHtcbiBcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3BhZ2VzLCBcdTAwMjZ1c2VyLVx1MDAzZWxvY2tlZF92bSk7XG4tXHRpZiAoY3VycmVudC1cdTAwM2VtbSlcbi1cdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4rXHRcdGZyZWVfdWlkKHVzZXIpO1xuK1x0XHRremRldi1cdTAwM2V1c2VyX2FjY291bnQgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKG1tX2FjY291bnQpIHtcbitcdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZtbV9hY2NvdW50LVx1MDAzZXBpbm5lZF92bSk7XG4rXHRcdG1tZHJvcChtbV9hY2NvdW50KTtcbitcdFx0a3pkZXYtXHUwMDNlbW1fYWNjb3VudCA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4rc3RhdGljIGlubGluZSBpbnQgYWNjb3VudF9tZW0oc3RydWN0IGt2bV96ZGV2ICpremRldiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBnZXRfdWlkKGN1cnJlbnRfdXNlcigpKTtcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XG4rXHRpbnQgcmMgPSAwO1xuIFxuIFx0cGFnZV9saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRjdXJfcGFnZXMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnVzZXItXHUwMDNlbG9ja2VkX3ZtKTtcbiBcdGRvIHtcbiBcdFx0bmV3X3BhZ2VzID0gY3VyX3BhZ2VzICsgbnJfcGFnZXM7XG4tXHRcdGlmIChuZXdfcGFnZXMgXHUwMDNlIHBhZ2VfbGltaXQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGlmIChuZXdfcGFnZXMgXHUwMDNlIHBhZ2VfbGltaXQpIHtcbitcdFx0XHRyYyA9ICAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGcoXHUwMDI2dXNlci1cdTAwM2Vsb2NrZWRfdm0sIFx1MDAyNmN1cl9wYWdlcywgbmV3X3BhZ2VzKSk7XG4gXG4tXHRhdG9taWM2NF9hZGQobnJfcGFnZXMsIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGlubmVkX3ZtKTtcbitcdGlmIChjdXJyZW50LVx1MDAzZW1tKSB7XG4rXHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbitcdFx0YXRvbWljNjRfYWRkKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4rXHR9XG4rXG4rXHRremRldi1cdTAwM2V1c2VyX2FjY291bnQgPSB1c2VyO1xuK1x0a3pkZXYtXHUwMDNlbW1fYWNjb3VudCA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXQ6XG4rXHRmcmVlX3VpZCh1c2VyKTtcbitcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0XHRcdFx0ICAgYm9vbCBhc3Npc3QpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2VzWzFdLCAqYWlidl9wYWdlLCAqYWlzYl9wYWdlID0gTlVMTDtcbi1cdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4O1xuK1x0dW5zaWduZWQgaW50IG1zaV92ZWNzLCBpZHgsIHNpemU7XG4gXHRzdHJ1Y3QgenBjaV9nYWl0ZSAqZ2FpdGU7XG4gXHR1bnNpZ25lZCBsb25nIGh2YSwgYml0O1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuQEAgLTIzNyw2ICsyNTgsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0aWYgKHpkZXYtXHUwMDNlZ2lzYSA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIEFJRiBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgKi9cbitcdGlmICh6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRrdm0gPSB6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWt2bTtcbiBcdG1zaV92ZWNzID0gbWluX3QodW5zaWduZWQgaW50LCBmaWItXHUwMDNlZm10MC5ub2ksIHpkZXYtXHUwMDNlbWF4X21zaSk7XG4gXG5AQCAtMjQ2LDYgKzI3MSwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXG4gXHRcdHJldHVybiBnaXNjO1xuIFxuIFx0LyogUmVwbGFjZSBBSUJWIGFkZHJlc3MgKi9cbitcdHNpemUgPSBCSVRTX1RPX0xPTkdTKG1zaV92ZWNzICsgZmliLVx1MDAzZWZtdDAuYWlidm8pICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuK1x0bnBhZ2VzID0gRElWX1JPVU5EX1VQKChmaWItXHUwMDNlZm10MC5haWJ2IFx1MDAyNiB+UEFHRV9NQVNLKSArIHNpemUsIFBBR0VfU0laRSk7XG4rXHQvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi9cbitcdGlmIChucGFnZXMgXHUwMDNlIDEpIHtcbitcdFx0cmMgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcdGh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItXHUwMDNlZm10MC5haWJ2KSk7XG4gXHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sIHBhZ2VzKTtcbkBAIC0yNjEsNiArMjk0LDEyIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcbiBcdC8qIFBpbiB0aGUgZ3Vlc3QgQUlTQiBpZiBvbmUgd2FzIHNwZWNpZmllZCAqL1xuIFx0aWYgKGZpYi1cdTAwM2VmbXQwLnN1bSA9PSAxKSB7XG4rXHRcdC8qIEFJU0IgbXVzdCBiZSBkd29yZCBhbGlnbmVkICovXG4rXHRcdGlmIChmaWItXHUwMDNlZm10MC5haXNiIFx1MDAyNiAweDcpIHtcbitcdFx0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bnBpbjE7XG4rXHRcdH1cbitcbiBcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0XHRodmEgPSBnZm5fdG9faHZhKGt2bSwgZ3BhX3RvX2dmbigoZ3BhX3QpZmliLVx1MDAzZWZtdDAuYWlzYikpO1xuIFx0XHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG5AQCAtMjc1LDIwICszMTQsMjggQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0fVxuIFxuIFx0LyogQWNjb3VudCBmb3IgcGlubmVkIHBhZ2VzLCByb2xsIGJhY2sgb24gZmFpbHVyZSAqL1xuLVx0aWYgKGFjY291bnRfbWVtKHBjb3VudCkpXG4rXHRyYyA9IGFjY291bnRfbWVtKHpkZXYtXHUwMDNla3pkZXYsIHBjb3VudCk7XG4rXHRpZiAocmMpXG4gXHRcdGdvdG8gdW5waW4yO1xuIFxuIFx0LyogQUlTQiBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIGZpbGwgaW4gR0FJVEUgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIFx0Yml0ID0gYWlycV9pdl9hbGxvY19iaXQoYWlmdC1cdTAwM2VzYnYpO1xuLVx0aWYgKGJpdCA9PSAtMVVMKVxuK1x0aWYgKGJpdCA9PSAtMVVMKSB7XG4rXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXHR6ZGV2LVx1MDAzZWFpc2IgPSBiaXQ7IC8qIHN0b3JlIHRoZSBzdW1tYXJ5IGJpdCBudW1iZXIgKi9cbiBcdHpkZXYtXHUwMDNlYWlidiA9IGFpcnFfaXZfY3JlYXRlKG1zaV92ZWNzLCBBSVJRX0lWX0RBVEEgfFxuIFx0XHRcdFx0ICAgIEFJUlFfSVZfQklUTE9DSyB8XG4gXHRcdFx0XHQgICAgQUlSUV9JVl9HVUVTVFZFQyxcbiBcdFx0XHRcdCAgICBwaHlzX3RvX3ZpcnQoZmliLVx1MDAzZWZtdDAuYWlidikpO1xuIFxuK1x0aWYgKCF6ZGV2LVx1MDAzZWFpYnYpIHtcbitcdFx0cmMgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGZyZWVfYWlzYjtcbitcdH1cbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2YWlmdC1cdTAwM2VnYWl0X2xvY2spO1xuIFx0Z2FpdGUgPSBhaWZ0LVx1MDAzZWdhaXQgKyB6ZGV2LVx1MDAzZWFpc2I7XG4gXG5AQCAtMzExLDIxICszNTgsMzkgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0YWlmdC1cdTAwM2VremRldlt6ZGV2LVx1MDAzZWFpc2JdID0gemRldi1cdTAwM2VremRldjtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZhaWZ0LVx1MDAzZWdhaXRfbG9jayk7XG4gXG4tXHQvKiBVcGRhdGUgZ3Vlc3QgRklCIGZvciByZS1pc3N1ZSAqL1xuLVx0ZmliLVx1MDAzZWZtdDAuYWlzYm8gPSB6ZGV2LVx1MDAzZWFpc2IgXHUwMDI2IDYzO1xuLVx0ZmliLVx1MDAzZWZtdDAuYWlzYiA9IHZpcnRfdG9fcGh5cyhhaWZ0LVx1MDAzZXNidi1cdTAwM2V2ZWN0b3IpICsgKHpkZXYtXHUwMDNlYWlzYiAvIDY0KSAqIDg7XG4tXHRmaWItXHUwMDNlZm10MC5pc2MgPSBnaXNjO1xuLVxuIFx0LyogU2F2ZSBzb21lIGd1ZXN0IGZpYiB2YWx1ZXMgaW4gdGhlIGhvc3QgZm9yIGxhdGVyIHVzZSAqL1xuLVx0emRldi1cdTAwM2VremRldi1cdTAwM2VmaWIuZm10MC5pc2MgPSBmaWItXHUwMDNlZm10MC5pc2M7XG4rXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IGdpc2M7XG4gXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgPSBmaWItXHUwMDNlZm10MC5haWJ2O1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiBcbiBcdC8qIElzc3VlIHRoZSBjbHAgdG8gc2V0dXAgdGhlIGlycSBub3cgKi9cbiBcdHJjID0ga3ZtX3pwY2lfc2V0X2FpcnEoemRldik7XG4tXHRyZXR1cm4gcmM7XG4rXHRpZiAoIXJjKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZhaWZ0LVx1MDAzZWFpZnRfbG9jayk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdC8qIFN0YXJ0IGNsZWFudXAgKi9cbitcdHpkZXYtXHUwMDNla3pkZXYtXHUwMDNlZmliLmZtdDAuaXNjID0gMDtcbitcdHpkZXYtXHUwMDNla3pkZXYtXHUwMDNlZmliLmZtdDAuYWlidiA9IDA7XG4gXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmFpZnQtXHUwMDNlZ2FpdF9sb2NrKTtcbitcdGdhaXRlLVx1MDAzZWNvdW50LS07XG4rXHRnYWl0ZS1cdTAwM2VhaXNiID0gMDtcbitcdGdhaXRlLVx1MDAzZWdpc2MgPSAwO1xuK1x0Z2FpdGUtXHUwMDNlYWlzYm8gPSAwO1xuK1x0Z2FpdGUtXHUwMDNlZ2lzYSA9IDA7XG4rXHRhaWZ0LVx1MDAzZWt6ZGV2W3pkZXYtXHUwMDNlYWlzYl0gPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmFpZnQtXHUwMDNlZ2FpdF9sb2NrKTtcbitcbitcdGFpcnFfaXZfcmVsZWFzZSh6ZGV2LVx1MDAzZWFpYnYpO1xuK1x0emRldi1cdTAwM2VhaWJ2ID0gTlVMTDtcbitcbitmcmVlX2Fpc2I6XG4rXHRhaXJxX2l2X2ZyZWVfYml0KGFpZnQtXHUwMDNlc2J2LCB6ZGV2LVx1MDAzZWFpc2IpO1xuK1x0emRldi1cdTAwM2VhaXNiID0gMDtcbiB1bmxvY2s6XG4rXHRpZiAocGNvdW50IFx1MDAzZSAwKVxuK1x0XHR1bmFjY291bnRfbWVtKHpkZXYtXHUwMDNla3pkZXYsIHBjb3VudCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIHVucGluMjpcbiBcdGlmIChmaWItXHUwMDNlZm10MC5zdW0gPT0gMSlcbkBAIC0zOTYsNyArNDYxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBib29sIGZvcmNlKVxuIFx0XHRwY291bnQrKztcbiBcdH1cbiBcdGlmIChwY291bnQgXHUwMDNlIDApXG4tXHRcdHVuYWNjb3VudF9tZW0ocGNvdW50KTtcbitcdFx0dW5hY2NvdW50X21lbShremRldiwgcGNvdW50KTtcbiBvdXQ6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcGNpLmggYi9hcmNoL3MzOTAva3ZtL3BjaS5oXG5pbmRleCBmZjA5NzJkZDVlNzFkYy4uZmRmOGM3YmY0ZWQwODIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3BjaS5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL3BjaS5oXG5AQCAtMjIsNiArMjIsOCBAQCBzdHJ1Y3Qga3ZtX3pkZXYge1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0c3RydWN0IHpwY2lfZmliIGZpYjtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4rXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXJfYWNjb3VudDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQ7XG4gfTtcbiBcbiBzdHJ1Y3QgenBjaV9nYWl0ZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NToyNy41MDg5NjM4NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUwNTIzMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBzMzkwIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgYGFyY2gvczM5MC9rdm0vcGNpLmNgIGFuZCBgYXJjaC9zMzkwL2t2bS9wY2kuaGAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGF0IGB1bmFjY291bnRfbWVtYCBhbmQgYGFjY291bnRfbWVtYCBhcmUgbm93IHRha2luZyBhIGBzdHJ1Y3Qga3ZtX3pkZXYgKmt6ZGV2YCBhbmQgdXNpbmcgdGhhdCB0byBtYW5hZ2UgYHVzZXJfYWNjb3VudGAgYW5kIGBtbV9hY2NvdW50YCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZ2xvYmFsIHZhcmlhYmxlcyBsaWtlIGBjdXJyZW50X3VzZXIoKWAgYW5kIGBjdXJyZW50LVx1MDAzZW1tYC4gVGhhdCdzIGEgZ29vZCBzdGVwIHRvd2FyZHMgaW1wcm92ZWQgaXNvbGF0aW9uLiBQbHVzLCBJIHNlZSBzb21lIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBpbiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCB3aGljaCBpcyBhbHdheXMgYSBwbHVzLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlmIGl0J3Mgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nLiBMZXQncyBzZWUuLi4gaXQncyBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFJpZ2h0LCBzbyBLVk0gb24gczM5MHggaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydCBvZiBzMzkweCB2aXJ0dWFsaXphdGlvbiwgc28gaXQncyB2ZXJ5IGxpa2VseSB0byBiZSByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIFFFTVUgc2V0dXBzLiBOb3csIHRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgZXZlbiBzdXBwb3J0cyBmdXp6aW5nIHMzOTB4IEtWTS4gVGhhbmtmdWxseSwgdGhlIGFuc3dlciBpcyB5ZXMsIHN5emthbGxlciBkb2VzIHN1cHBvcnQgczM5MHgsIGFuZCBpdCBkb2VzIGZ1enogS1ZNLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5jb3VyYWdpbmcuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGxvb2tpbmcgYXQgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCwgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAsIHBsdXMgdGhlIGFmb3JlbWVudGlvbmVkIGBhY2NvdW50X21lbWAgYW5kIGB1bmFjY291bnRfbWVtYC4gT2theSwgbm93IEkgd2FudCB0byBmaW5kIHdoZXJlIGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAgaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9wY2kuY2AgdG8gc2VlIGhvdyBpdCdzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ1OjMzLjg1OTQ5NjYwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI2MTM2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3BjaV9haWZfZW5hYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcGNpLmM9MjExPXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTI0Mi1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjI0MzpzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy0yNDQtXFx0XFx0XFx0XFx0ICAgYm9vbCBhc3Npc3QpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY2MT1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oc3RydWN0IHpwY2lfZGV2ICp6ZGV2LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODAtXFx0aG9zdGZsYWcgPSAhKGFyZ3MtXFx1MDAzZXUucmVnX2Flbi5mbGFncyBcXHUwMDI2IEtWTV9TMzkwX1pQQ0lPUF9SRUdBRU5fSE9TVCk7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2ODE6XFx0cmV0dXJuIGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHpkZXYsIFxcdTAwMjZmaWIsIGhvc3RmbGFnKTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ1OjM2Ljk4NTYzNzk1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDkxMTUzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgQWN0aXZhdGlvbiBvZiB0aGUgQUlGIEVuYWJsZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGluIHRoZSBLVk0vczM5MCBQQ0kgY29kZS4gVGhlIGZpcnN0IGNsdWUgSSBoYXZlIGlzIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbmAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGFwcHJvYWNoOiBmaW5kIHRoZSBjYWxsZXIsIHRoZW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gZGlnIGludG8gYGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW5gLiBJJ2xsIHdhbnQgdG8gc2VlIHdoZXJlICppdCogZ2V0cyBjYWxsZWQgZnJvbSwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBldmVudHMgb3IgY29uZGl0aW9ucyB0aGF0IGV2ZW50dWFsbHkgbGVhZCB0byB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgQUlGIGVuYWJsZSBmdW5jdGlvbi4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgQUlGIGVuYWJsZSBtZWNoYW5pc20gYW5kIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBaUENJIHJlZ2lzdHJhdGlvbiBhbmQgZXZlbnQgbm90aWZpY2F0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NTo0MC43OTQ3NTczMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODU2ODg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcGNpLmM9NjQ0PXN0YXRpYyBzdHJ1Y3QgenBjaV9kZXYgKmdldF96ZGV2X2Zyb21fa3ZtX2J5X2ZoKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGZoKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02NjAtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2NjE6c3RhdGljIGludCBrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuKHN0cnVjdCB6cGNpX2RldiAqemRldixcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY2Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz02ODQ9aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTcxMy1cXHRcXHR9XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3MTQ6XFx0XFx0ciA9IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oemRldiwgYXJncyk7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ1OjQzLjIyMzMzMjM1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTE5MTA3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBrdm1fczM5MF9wY2lfenBjaV9vcGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCdzIGhpdHRpbmcgbWUgaXMgdGhhdCBmdW5jdGlvbiBuYW1lOiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgS1ZNLCBzbyB0aGlzIGlzIHZpcnR1YWxpemF0aW9uIG9uIGFuIHMzOTAgYXJjaGl0ZWN0dXJlLiBcIlBDSSxcIiBcInpwY2lcIiBpbXBsaWVzIGludGVyYWN0aW9uIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0sIGxpa2VseSBhIFpQQ0kgZGV2aWNlLCB3aGljaCBpcyBob3cgd2UgaGFuZGxlIFBDSSBkZXZpY2VzIGluIHRoZSBzMzkwIHdvcmxkLiBcIk9wXCIgc3VnZ2VzdHMgc29tZSBraW5kIG9mIG9wZXJhdGlvbiBvciBmdW5jdGlvbi5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgKndoZXJlKiBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoYXQgY2FsbCBzaXRlIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgS1ZNIGh5cGVyY2FsbD8gSXMgaXQgd2l0aGluIHRoZSBndWVzdC1zaWRlIGVtdWxhdGlvbiBvZiB0aGUgZGV2aWNlLCBvciBpcyBpdCBvbiB0aGUgaG9zdCBzaWRlLCBtYW5hZ2luZyB0aGUgdW5kZXJseWluZyByZXNvdXJjZXM/IFRoZSBjb250ZXh0IGlzIGNyaXRpY2FsLlxuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZmluZCBpdHMgY2FsbGVycy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3RydWN0dXJlcyBpbnRlcmFjdCB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIGRldGVybWluZSB3aGljaCBldmVudCBpbml0aWF0ZXMgaXQuIElzIGl0IGludGVycnVwdCByZWxhdGVkPyBJcyBpdCB0cmlnZ2VyZWQgYnkgTU1JTz8gSXMgaXQgYSByZXN1bHQgb2Ygc29tZSBLVk0gb3BlcmF0aW9uIHJlbGF0ZWQgdG8gWlBDSSBjb25maWd1cmF0aW9uPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZnVuIGxpdHRsZSBqb3VybmV5LiBJIGJldCB0aGVyZSBpcyBzb21lIGltcG9ydGFudCBjb250cm9sIG92ZXIgWlBDSSBkZXZpY2Ugd2l0aGluIHRoZSBLVk0vczM5MCBzZXR1cCB0aGF0IG5lZWRzIG15IGZ1bGwgYW5kIGltbWVkaWF0ZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NTo0Ny4xMzUyNDU2MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNDcxMjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wY2lfenBjaV9vcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNT1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5Mi1cXHRcXHR9XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwOTM6XFx0XFx0ciA9IGt2bV9zMzkwX3BjaV96cGNpX29wKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDk0LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz02NjE9c3RhdGljIGludCBrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuKHN0cnVjdCB6cGNpX2RldiAqemRldixcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjgzLVxcbmFyY2gvczM5MC9rdm0vcGNpLmM6Njg0OmludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmg9NjE9dm9pZCBrdm1fczM5MF9wY2lfY2xlYXJfbGlzdChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjItXFxuYXJjaC9zMzkwL2t2bS9wY2kuaDo2MzppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncyk7XFxuYXJjaC9zMzkwL2t2bS9wY2kuaC02NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6NTEuNzU5OTY2NjM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NjYxMDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBLVk1fUzM5MF9aUENJX09QKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgYSBwcm9taXNpbmcgbGVhZCBoZXJlLiBUaGlzIGBLVk1fUzM5MF9aUENJX09QYCBpb2N0bCwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgc2NyZWFtcyBcImNvcmUgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25hbGl0eVwiIHRvIG1lLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGFuZCBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi4gVGhlc2UgbG93LWxldmVsIGludGVyZmFjZXMgYXJlIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBtb3N0IGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWdzIGluIHRoZSBoeXBlcnZpc29yLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hlbiBgYXJjaC9zMzkwL2t2bS9wY2kuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4gTGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBidWlsZCBmbGFncy4gS25vd2luZyB0aGUgYnVpbGQgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gY29uc3RydWN0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1pbmltaXppbmcgbm9pc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NTo1NS41MTY1Nzk3ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQ2MjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEyPWt2bS15ICs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTEzLVxcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTQ6a3ZtLSQoQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNKSArPSBwY2kub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6NTUuNjM0MDUxMTYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzExNzE2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlZGSU8tUENJIFpERVYgS1ZNIEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgKnRoYXQncyogd2hhdCBJIG5lZWQuIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBpcyB0aGUgY3J1Y2lhbCBlbGVtZW50IGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgZXhhY3RseSB3aGF0IHRoYXQgZmxhZyBlbmFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIFZGSU8gYW5kIEtWTSBsYW5kc2NhcGUuIElzIGl0IGNvcnJlY3RseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBzZXR1cD8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBwYXRjaGVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhhdCBvcHRpb24gY29udHJvbHMgYW5kIGlmIGl0J3MgdGhlIHNwZWNpZmljIHRoaW5nIHRvIHJlc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuIExldOKAmXMgZ2V0IHRvIHRoZSByb290IG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6NTguNTY1MjI1MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjM3NDgzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MDEuNTI4OTc5Nzg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzODMzNjc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byB0aGUgVkZJTyBLY29uZmlnIGZvciBVbmRlcnN0YW5kaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSA0NywgYXMgdGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBjb250cm9sbGVkIGhlcmUgZm9yIHRoZSBWRklPLVBDSSBkcml2ZXIuIElzIGl0IHRoZSBmZWF0dXJlIGZsYWdzLCBwbGF0Zm9ybSBzdXBwb3J0IG9yIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gcmVtZW1iZXI/IExldCdzIHJlZnJlc2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjowMy45MTIzNTA5NDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgYXNzaWdubWVudCB0byB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBpbmNsdWRlcyBleHBvc2luZyBhbiBJR0RcXG4gIDQxOlxcdFxcdCAgc3BlY2lmaWMgZmlybXdhcmUgdGFibGUgYW5kIHJlYWQtb25seSBjb3BpZXMgb2YgdGhlIGhvc3QgYnJpZGdlXFxuICA0MjpcXHRcXHQgIGFuZCBMUEMgYnJpZGdlIGNvbmZpZyBzcGFjZS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ICBUbyBlbmFibGUgSW50ZWwgSUdEIGFzc2lnbm1lbnQgdGhyb3VnaCB2ZmlvLXBjaSwgc2F5IFkuXFxuICA0NTpcXHRlbmRpZlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gUzM5MCBcXHUwMDI2XFx1MDAyNiBLVk1cXG4gIDUwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNTE6XFx0XFx0aGVscFxcbiAgNTI6XFx0XFx0ICBTdXBwb3J0IHMzOTB4LXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGVuaGFuY2VtZW50c1xcbiAgNTM6XFx0XFx0ICB0byBLVk0gcGFzc3Rocm91Z2ggY2FwYWJpbGl0aWVzLCBzdWNoIGFzIGludGVycHJldGl2ZSBleGVjdXRpb24gb2ZcXG4gIDU0OlxcdFxcdCAgelBDSSBpbnN0cnVjdGlvbnMuXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gZW5hYmxlIHMzOTB4IEtWTSB2ZmlvLXBjaSBleHRlbnNpb25zLCBzYXkgWS5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbiAgNTk6XFx0XFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MDMuOTEyNDQyNjQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTY3MDUxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIGJvaWxzIGRvd24gdG8gaG93IHRoaW5ncyBhcmUgY29uZmlndXJlZCBmb3IgYFMzOTBgIGFuZCBgS1ZNYC4gUmlnaHQsIHNvIHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCwgYENPTkZJR19LVk1gLCBhbmQgYENPTkZJR19TMzkwYCDigJMgdGhhdCdzIHRoZSBhcmNoaXRlY3R1cmUuIEFoLCBidXQgd2FpdCwgYENPTkZJR19WRklPX1BDSV9aREVWX0tWTWAgKmRlZmF1bHRzKiB0byAneScgaWYgYm90aCBgUzM5MGAgYW5kIGBLVk1gIGFyZSBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICpvdGhlciogY3J1Y2lhbCBjb25maWd1cmF0aW9ucz8gSG1tbSwgZG9lcyBpdCBuZWVkIGBDT05GSUdfVkZJT19QQ0lgIGFzIHdlbGw/IExldCdzIHZlcmlmeSB0aGF0LiBBbmQsIGhhbmcgb24sIHRoaXMgYFZGSU9fUENJX1pERVZfS1ZNYCBzZXR0aW5nIGlzIGRlZmluZWQsIGluc2lkZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgc2l0cyB3aXRoaW4gYW4gYGlmIFZGSU9fUENJYCBibG9jaywgb3IgaWYgaXQncyBpbmRlcGVuZGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjA3LjkwOTE1MTI1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFZGSU9fUENJX0NPUkVcXG4gICA2OlxcdFxcdHRyaXN0YXRlXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19WSVJRRkRcXG4gICA4OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFZGSU9fUENJX0lOVFhcXG4gIDExOlxcdFxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVkZJT19QQ0lcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuICAxNjpcXHRcXHRzZWxlY3QgVkZJT19QQ0lfQ09SRVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgZ2VuZXJpYyBQQ0kgVkZJTyBidXMgZHJpdmVyIHdoaWNoIGNhbiBjb25uZWN0IGFueVxcbiAgMTk6XFx0XFx0ICBQQ0kgZGV2aWNlIHRvIHRoZSBWRklPIGZyYW1ld29yay5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRpZiBWRklPX1BDSVxcbiAgMjQ6XFx0Y29uZmlnIFZGSU9fUENJX1ZHQVxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1xcXCJcXG4gIDI2OlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2IFZHQV9BUkJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXFxuICAyOTpcXHRcXHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcXG4gIDMwOlxcdFxcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBWRklPX1BDSV9JR0RcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gWDg2XFxuICAzNzpcXHRcXHRkZWZhdWx0IHlcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgU3VwcG9ydCBmb3IgSW50ZWwgSUdEIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIGRpcmVjdFxcbiAgNDA6XFx0XFx0ICBhc3NpZ25tZW50IHRvIHZpcnR1YWwgbWFjaGluZXMuICBUaGlzIGluY2x1ZGVzIGV4cG9zaW5nIGFuIElHRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjowNy45MDkyNjI3MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMjY4NTIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYGlmIFZGSU9fUENJYCBjbG9zZXMgYXQgbGluZSA0NS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYFZGSU9fUENJX1pERVZfS1ZNYC4gSXQgbG9va3MgbGlrZSBpdCAqaXNuJ3QqIG5lc3RlZCB3aXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0IGRvZXNuJ3QgZGVwZW5kIG9uIGBWRklPX1BDSWAsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQgbG9va3MgbGlrZSBpdHMgZGVwZW5kZW5jaWVzIGFyZSBgUzM5MCBcdTAwMjZcdTAwMjYgS1ZNYCwgd2hpY2ggaXMgZmluZSwgYnV0IEkgc3VzcGVjdCB0aGVyZSBjb3VsZCBiZSBtb3JlIHRvIGl0LiBEb2VzIGl0IGRlcGVuZCBvbiB0aGUgYnJvYWRlciBgVkZJT2AgY29uZmlndXJhdGlvbiBvcHRpb24/IFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvdmZpby9gLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlciBmb3IgdGhlIGRlcGVuZGVuY3kgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjExLjAxMTk1MTE0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgVkZJT1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcXG4gICA2OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXFxuICAgODpcXHRcXHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxcbiAgIDk6XFx0XFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxcbiAgMTI6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgVkZJT1xcbiAgMTc6XFx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgXFx1MDAyNlxcdTAwMjYgIVNQQVBSX1RDRV9JT01NVVxcbiAgMjA6XFx0XFx0ZGVmYXVsdCAhVkZJT19HUk9VUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjoxMS4wMTIwNjM0ODFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMDg1ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqVkZJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBpcyBvbmx5IGluY2x1ZGVkIHdoZW4gYFZGSU9gIGl0c2VsZiBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBzb3VyY2luZyBoaWVyYXJjaHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGVyZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBpcyBpbmNsdWRlZC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIGBkcml2ZXJzL3ZmaW8vTWFrZWZpbGVgIG9yIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGluY2x1c2lvbiBydWxlcy4gS25vd2luZyB0aGUgYnVpbGQgc3lzdGVtLCBpdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgVkZJTyBkaXJlY3RvcnkgaGFzIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCwgYnV0IHRoZSBNYWtlZmlsZSB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gZ28gaWYgSSBuZWVkZWQgdG8ga25vdyB3aGF0IGNvbXBvbmVudHMgYXJlIGdldHRpbmcgbGlua2VkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MTQuMjEyOTI1NTE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkyMTM4NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXFxcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vS2NvbmZpZz04Mz1jb25maWcgVkZJT19ERUJVR0ZTXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo5Mzpzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05NC1zb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjoxNy4zMDUwNzMyNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNzg0MzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgVkZJTyBDb25kaXRpb25hbCoqXG5cblJpZ2h0LCBzbyBJJ20gcHJldHR5IHN1cmUgdGhhdCBwaWVjZSBvZiBjb2RlIGlzIG5lc3RsZWQgd2l0aGluIGFuIGBpZiBWRklPYCBibG9jay4uLiBidXQgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGRldmlsJ3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggdGhlc2UgdGhpbmdzLCBhbmQgYSBtaXNwbGFjZWQgY29uZGl0aW9uIGNhbiB3cmVhayBoYXZvYy4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlICpleGFjdCogbG9jYXRpb24gd2hlcmUgdGhhdCBgaWYgVkZJT2Agc3RhdGVtZW50IHRlcm1pbmF0ZXMuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBsb2dpYyBkZXBlbmRpbmcgb24gdGhhdCBjb25kaXRpb24gaXMgcHJvcGVybHkgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGF0IFZGSU8gYmxvY2suIE9rYXksIGxldCBtZSBmb2xsb3cgdGhlIGJyYWNrZXRzIGFuZCBzZWUgd2hlcmUgdGhlIFwiZW5kIGlmXCIgc3RhdGVtZW50IGlzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIG90aGVyd2lzZSwgdGhlcmUgY291bGQgYmUgYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgcmVzdWx0cyBkb3duc3RyZWFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjIxLjUxMjkyMjgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxMTczMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWc9NTc9Y29uZmlnIFZGSU9fSU9NTVVfU1BBUFJfVENFXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02MC1cXHRkZWZhdWx0IFZGSU9cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2MTplbmRpZlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYyLVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9OTc9c291cmNlIFxcXCJkcml2ZXJzL3ZmaW8vY2R4L0tjb25maWdcXFwiXFxuZHJpdmVycy92ZmlvL0tjb25maWc6OTg6ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MjEuNjUzMDQ4NTc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNjQ3NTA5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0vVkZJTyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCwgYGVuZGlmYCBpcyBhdCBsaW5lIDk4LCBjb25maXJtaW5nIGl0J3Mgd2l0aGluIHRoZSBgaWYgVkZJT2AgYmxvY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gvczM5MC9rdm0vcGNpLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGZpbGUgZXZlbiBnZXQgYnVpbHQgd2hlbiBgVkZJT19QQ0lfWkRFVl9LVk1gIGlzIGVuYWJsZWQ/IFRpbWUgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAuIEFoLCB5ZXMsIGBrdm0tJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICs9IHBjaS5vYCBjbGVhcmx5IHNob3dzIHRoYXQgaXQgaXMuIFNvLCBgVkZJT19QQ0lfWkRFVl9LVk1gLCBgS1ZNYCwgYW5kIGBWRklPYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuTm93IEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkLiBMZXQncyBzZWUuLi4gdGhlIHByaW1hcnkgc3VzcGVjdHMgYXJlOiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCBga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlYCwgYW5kIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuIEFuZCBpdCBhcHBlYXJzIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgY2FsbHMgYGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW5gIHdoaWNoIGluIHR1cm4gY2FsbHMgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSXMgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCBzdGF0aWM/IFllcywgaXQgaXMuIEJ1dCwgd2FpdCwgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyAqbm90KiBzdGF0aWMhIEFscmlnaHQsIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBlbnRyeSBwb2ludCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaW4gYGFyY2gvczM5MC9rdm0vcGNpLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjoyNy43MTc4MTMzNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAyNjQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfcGNpX3pwY2lfb3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjU9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwOTItXFx0XFx0fVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDkzOlxcdFxcdHIgPSBrdm1fczM5MF9wY2lfenBjaV9vcChrdm0sIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5NC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4My1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5oPTYxPXZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5oLTYyLVxcbmFyY2gvczM5MC9rdm0vcGNpLmg6NjM6aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjMwLjE1ODA4NzI1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQxMjI0MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgWlBDSSBPcGVyYXRpb25zIGluIEtWTS9zMzkweCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gU2VlbXMgbGlrZSB0aGF0J3MgYSBrZXkgZnVuY3Rpb24sIGEgZ29vZCBjZW50cmFsIHBvaW50IHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgWlBDSSAoei9BcmNoaXRlY3R1cmUgUENJKSBvcGVyYXRpb24gd2l0aGluIEtWTS9zMzkweC4gSXQgbWFrZXMgc2Vuc2UgYXMgYSBmb2N1cyBzeW1ib2wsIGdpdmVuIHRoYXQgaXQncyBpbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IGZvciB0aGVzZSBQQ0kgZGV2aWNlcyBvbiBzMzkweC5cblxuTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24gY29tZXMgdG8gbWluZCAtIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIG9yIG5vdCBoYXMgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgaG93IGl0J3MgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBJZiBpdCBpcyBzdGF0aWMsIHRoZW4gaXQncyBsb2NhbCB0byBhIG1vZHVsZSBvciBmaWxlIGFuZCBJIHdpbGwgbmVlZCB0byBsb29rIGFyb3VuZCBpdCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgY2FzZSBtb3JlIGZ1bGx5LiBUaGlzIHdob2xlIHNldCBvZiBpbnRlcmFjdGlvbnMgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIGhvdyBaUENJIGlzIGhhbmRsZWQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjI2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MzQuMjk5MzE0ODcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0Njk3OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3BjaS5jPTI0Mz1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTQwNC1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjQwNTpzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy00MDYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz01NzY9c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjAyLVxcdGlmICh6ZGV2LVxcdTAwM2VremRldi1cXHUwMDNlZmliLmZtdDAuYWlidiAhPSAwKVxcbmFyY2gvczM5MC9rdm0vcGNpLmM6NjAzOlxcdFxcdGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZSh6ZGV2LCB0cnVlKTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYwNC1cXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmM9Njg0PWludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MTYtXFx0Y2FzZSBLVk1fUzM5MF9aUENJT1BfREVSRUdfQUVOOlxcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzE3OlxcdFxcdHIgPSBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoemRldiwgZmFsc2UpO1xcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzE4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjozNi43MTQwMTkyOTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMTc2MjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpQQ0kgRGVyZWdpc3RyYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBhcnQgaXMgc3RhdGljLiBJdCdzIGludm9rZWQgYnkgYGt2bV9zMzkwX3BjaV96cGNpX29wYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgdGhlIGBLVk1fUzM5MF9aUENJT1BfREVSRUdfQUVOYCBjYXNlLCBhbmQgYWxzbyBkaXJlY3RseSBieSBga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtYC4gSG1tLCBxdWljayBjaGVjay4uLiB5ZXAsIGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gIGlzIGFsc28gc3RhdGljLlxuXG5SaWdodCwgc28gdGhhdCBtZWFucyBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBib3RoIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhpcyBaUENJIGZ1bmN0aW9uYWxpdHkuIE5vdywgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBXaGVyZSAqZWxzZSogaXMgYGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bWAgYmVpbmcgY2FsbGVkIGZyb20/IEdvdCB0byB0cmFjZSB0aGF0IGJhY2sgZm9yIGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA3NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0Njo0MC44NDU3ODQ3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MjQ3OTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wY2kuYz01MDE9c3RhdGljIGludCBrdm1fczM5MF9wY2lfcmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy01NzUtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo1NzY6c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTU3Ny17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMS1cXHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm07XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3MzI6XFx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6NDMuNTg4MjY5MzA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Nzg1MjkzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFbnRyeSBQb2ludCBvZiB0aGUgTW9kaWZpZWQgS1ZNIENvZGUqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgaG9vayB0byBzdGFydCBkaWdnaW5nIGludG8uIFRoZSBjb2RlIGNoYW5nZXMgc2VlbSBjZW50ZXJlZCBhcm91bmQgYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgYGFjY291bnRfbWVtYCBhbmQgYHVuYWNjb3VudF9tZW1gIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiBpdCBhcmUgc3RhdGljIGlubGluZS4gVGhhdCdzIGEgY29tbW9uIG9wdGltaXphdGlvbiwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGJlIHN1cmUsIHdoaWNoIHRoZXkgYXJlLiBUaGlzIGZ1bmN0aW9uLCBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLCBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiBob3cgaXMgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBhY3R1YWxseSAqcmVhY2hlZCogd2l0aGluIFFFTVU/IExldCdzIHRyYWNlIGl0IGRvd24uIEFoLCB5ZXMsIGl04oCZcyBhbiBpb2N0bCwgc3BlY2lmaWNhbGx5IGBLVk1fUzM5MF9aUENJX09QYC4gVGhhdCdzIGludGVyZXN0aW5nOyBTeXprYWxsZXIgaXMga25vd24gdG8gZnV6eiBLVk0gaW9jdGxzLiBUaGlzIGlzIGxpa2VseSBob3cgdGhleSB3aWxsIGV4cG9zZSB0aGVzZSBjaGFuZ2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gV2hhdCBhcmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gYmUgZW5hYmxlZD8gT2theSwgY2xlYXJseSwgd2UgbmVlZCBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBhbmQgYENPTkZJR19LVk1gLiBCdXQgd2hhdCBhYm91dCBgQ09ORklHX1ZGSU9fUENJYD8gSG1tbSwgaWYgYFZGSU9fUENJX1pERVZfS1ZNYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLCBpdCB3b3VsZCBtYWtlIHNlbnNlIGlmIGl0IGRlcGVuZHMgb24gYFZGSU9fUENJYC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQncyBiZXN0IHRvIGJlIHByZWNpc2UsIG9yIEknbSBib3VuZCB0byBtaXNzIHNvbWV0aGluZyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjQ5LjI2NjgwMTI4NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdGVuZGlmXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwIFxcdTAwMjZcXHUwMDI2IEtWTVxcbiAgNTA6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFN1cHBvcnQgczM5MHgtc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBlbmFibGUgc3VwcG9ydCBmb3IgZW5oYW5jZW1lbnRzXFxuICA1MzpcXHRcXHQgIHRvIEtWTSBwYXNzdGhyb3VnaCBjYXBhYmlsaXRpZXMsIHN1Y2ggYXMgaW50ZXJwcmV0aXZlIGV4ZWN1dGlvbiBvZlxcbiAgNTQ6XFx0XFx0ICB6UENJIGluc3RydWN0aW9ucy5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBlbmFibGUgczM5MHggS1ZNIHZmaW8tcGNpIGV4dGVuc2lvbnMsIHNheSBZLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuICA1OTpcXHRcXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcbiAgNjA6XFx0XFxuICA2MTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wY2kvbWx4NS9LY29uZmlnXFxcIlxcbiAgNjI6XFx0XFxuICA2MzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wY2kvaXNtL0tjb25maWdcXFwiXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6NDkuMjY2OTA2MTE2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTk3NDAyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBicmVha2luZyBkb3duIHRoZSBkZXBlbmRlbmN5IGlzc3VlLlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBWRklPIGFuZCBpdHMgSW1wbGljYXRpb25zKipcblxuSG1tLCB0aGlzIGRlcGVuZGVuY3kgaXNuJ3QgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGluaXRpYWxseSB0aG91Z2h0LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGBWRklPX1BDSWAsIGJ1dCBpdCBzZWVtcyB0aGUgcmVhbCBrZXkgaXMgdGhlIGludGVycGxheSBiZXR3ZWVuIGBTMzkwYCBhbmQgYEtWTWAuIFRob3NlIGFyZSB0aGUgY29yZSByZXF1aXJlbWVudHMuIEhvd2V2ZXIsIHRoZSBgS2NvbmZpZ2Agc3RydWN0dXJlIGlzIHRoZSBjdWxwcml0IGhlcmUuIFdlIHNlZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gbmVzdGVkIHdpdGhpbiBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCwgd2hpY2ggaXMsIGluIHR1cm4sIHNvdXJjZWQgaW5zaWRlIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AsIHVuZGVyIHRoZSBgaWYgVkZJT2AgY29uZGl0aW9uLiBFc3NlbnRpYWxseSwgZXZlbiB0aG91Z2ggdGhlIGRpcmVjdCBkZXBlbmRlbmN5IGlzbid0IG9uIGBWRklPX1BDSWAsIHRoZSB3YXkgdGhlIGtlcm5lbCBjb25maWcgaXMgc3RydWN0dXJlZCBtZWFucyB0aGF0IGBWRklPYCBpdHNlbGYgKmlzKiByZXF1aXJlZCBiZWNhdXNlIG9mIHRoaXMgbmVzdGluZy4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgZXZlbiBpZiBpdCdzIG5vdCB0aGUgY3JpdGljYWwgZW5hYmxpbmcgZmFjdG9yLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBWRklPYCBpcyB0cnVseSBuZWNlc3NhcnkgaGVyZSwgZXZlbiB3aXRoIHRoZSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6NTMuMTI2NjQ5NjE1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBWRklPXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1xcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBJT01NVV9BUElcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU9NTVVGRCB8fCAhSU9NTVVGRFxcbiAgIDY6XFx0XFx0c2VsZWN0IElOVEVSVkFMX1RSRUVcXG4gICA3OlxcdFxcdHNlbGVjdCBWRklPX0dST1VQIGlmIFNQQVBSX1RDRV9JT01NVSB8fCBJT01NVUZEPW5cXG4gICA4OlxcdFxcdHNlbGVjdCBWRklPX0RFVklDRV9DREVWIGlmICFWRklPX0dST1VQXFxuICAgOTpcXHRcXHRzZWxlY3QgVkZJT19DT05UQUlORVIgaWYgSU9NTVVGRD1uXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFZGSU8gcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHNlY3VyZSB1c2Vyc3BhY2UgZGV2aWNlIGRyaXZlcnMuXFxuICAxMjpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby5yc3QgZm9yIG1vcmUgZGV0YWlscy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBWRklPXFxuICAxNzpcXHRjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gSU9NTVVGRCBcXHUwMDI2XFx1MDAyNiAhU1BBUFJfVENFX0lPTU1VXFxuICAyMDpcXHRcXHRkZWZhdWx0ICFWRklPX0dST1VQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjUzLjEyNjc1MzExNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDUyODU1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTUzNzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0Njo1OC41Nzk2MTE4MjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzMzODgwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienBjaV9rdm1faG9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD03Njk9dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzcwLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjc3MTpzdHJ1Y3QgenBjaV9rdm1faG9vayB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzcyLVxcdGludCAoKmt2bV9yZWdpc3Rlcikodm9pZCAqb3BhcXVlLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzc1LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjc3NjpleHRlcm4gc3RydWN0IHpwY2lfa3ZtX2hvb2sgenBjaV9rdm1faG9vaztcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzctXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MzAte1xcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzMxOlxcdHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyID0ga3ZtX3MzOTBfcGNpX3JlZ2lzdGVyX2t2bTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjczMjpcXHR6cGNpX2t2bV9ob29rLmt2bV91bnJlZ2lzdGVyID0ga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtO1xcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzMzLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz03NDc9dm9pZCBrdm1fczM5MF9wY2lfZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzQ4LXtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjc0OTpcXHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3NTA6XFx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlciA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03NTEtXFxuLS1cXG5hcmNoL3MzOTAvcGNpL3BjaV9rdm1faG9vay5jLTExLVxcbmFyY2gvczM5MC9wY2kvcGNpX2t2bV9ob29rLmM6MTI6c3RydWN0IHpwY2lfa3ZtX2hvb2sgenBjaV9rdm1faG9vaztcXG5hcmNoL3MzOTAvcGNpL3BjaV9rdm1faG9vay5jOjEzOkVYUE9SVF9TWU1CT0xfR1BMKHpwY2lfa3ZtX2hvb2spO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmM9MTQ0PWludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE1My1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYzoxNTQ6XFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE1NTpcXHRcXHRyZXR1cm4genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwgdmRldi1cXHUwMDNldmRldi5rdm0pO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE1Ni1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jPTE2MD12b2lkIHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE2Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYzoxNjc6XFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmM6MTY4OlxcdFxcdHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIoemRldik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMtMTY5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDc6MDEuMTEzMDA4Njg5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDU5NjExNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPLVBDSSBhbmQgS1ZNL3MzOTAgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8tUENJIGRyaXZlciBhbmQgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbS4gSXQgbG9va3MgbGlrZSBgdmZpb19wY2lfemRldl9vcGVuX2RldmljZWAgdHJpZ2dlcnMgdGhlIGBrdm1fcmVnaXN0ZXJgIHByb2Nlc3MsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gLiBDb252ZXJzZWx5LCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIGhhbmRsZXMgdGhlIGNsZWFudXAgYnkgY2FsbGluZyBga3ZtX3VucmVnaXN0ZXJgLCBsZWFkaW5nIHRvIGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gLiBJIHNlZSB0aGF0IGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gIHRoZW4gY2FsbHMgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAuIFNvLCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIG9mZmVycyBhbm90aGVyIHJvdXRlIHRvIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLlxuXG5JIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUuLi4gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBzZWVtcyBsaWtlIHRoZSBiZXN0IGNhbmRpZGF0ZSBiZWNhdXNlIGl0IGNvdmVycyB0aGUgaW9jdGwgcGF0aC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGZvY3VzLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBjb25zaWRlcj8gTGV0J3MgcnVsZSB0aGVtIG91dC4gYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCBhbmQgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAgYXJlIHN0YXRpYywgc28gdGhhdCdzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGV4YW1pbmF0aW9uLiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFNpbWlsYXJseSwgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gIGFuZCBga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtYCBhcmUgc3RhdGljLlxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIHRoZSBsb2NhdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gYHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2VgIGFuZCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIHJlc2lkZSBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNgLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGluIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCwgd2hpY2ggc3RyZW5ndGhlbnMgdGhlIGFyZ3VtZW50IHRoYXQgZm9jdXNpbmcgb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IHNlZW1zIGxvZ2ljYWwuXG5cbk5vdywgbGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgaW1tZWRpYXRlbHkgb2J2aW91cyBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBub3RlLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbmZpcm0gdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGEgY3J1Y2lhbCBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzY5LCJPdXRwdXRUb2tlbnMiOjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjA5LjMxODk3MzEwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjcxMjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcGNpLmM9MjE9c3RhdGljIGlubGluZSBpbnQgX19zZXRfaXJxX25vaWliKHUxNiBjdGwsIHU4IGlzYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtMjctXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzoyODp2b2lkIGt2bV9zMzkwX3BjaV9hZW5fZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtMjkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz0xMDE9c3RhdGljIGludCB6cGNpX3Jlc2V0X2FpcGIodTggbmlzYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtMTE5LVxcbmFyY2gvczM5MC9rdm0vcGNpLmM6MTIwOmludCBrdm1fczM5MF9wY2lfYWVuX2luaXQodTggbmlzYylcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTEyMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTU3Nj1zdGF0aWMgdm9pZCBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm0odm9pZCAqb3BhcXVlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02MjYtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2Mjc6dm9pZCBrdm1fczM5MF9wY2lfaW5pdF9saXN0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYyOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYzMi1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjYzMzp2b2lkIGt2bV9zMzkwX3BjaV9jbGVhcl9saXN0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYzNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY2MT1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oc3RydWN0IHpwY2lfZGV2ICp6ZGV2LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2ODQ6aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz03Mjk9aW50IF9faW5pdCBrdm1fczM5MF9wY2lfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03NDYtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3NDc6dm9pZCBrdm1fczM5MF9wY2lfZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzQ4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDc6MDkuNDc1MjQ5MTMxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQzNjI2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBaUENJIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGZ1bmN0aW9uOyB0aGF0J3MgdGhlIGNvcmUgb2YgdGhpcywgcmlnaHQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjaywgdGhvdWdoIOKAkyBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFoLCB5ZXMsIGBDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk1gIGxvb2tzIGxpa2UgYSBrZXkgb25lIHRvby4gTmF0dXJhbGx5LCBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIGEgcHJlcmVxdWlzaXRlLiBBbmQgb2YgY291cnNlIGBDT05GSUdfVkZJT2AgYW5kIGBDT05GSUdfVkZJT19QQ0lgLiBIYW5nIG9u4oCmIGlzbid0IGB2ZmlvX3BjaV96ZGV2LmNgIGxvY2F0ZWQgaW4gYGRyaXZlcnMvdmZpby9wY2kvYD8gUmlnaHQsIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoxMy4yMzk2MTY0OThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTYzODg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV96ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZT0zPXZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjQ6dmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgKz0gdmZpb19wY2lfemRldi5vXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZS01LXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSArPSB2ZmlvX3BjaV9kbWFidWYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoxMy40NTEyNjI4OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM0MjQ4NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbCBhbmQgVkZJTzpcblxuKipWRklPIE1vZHVsZSBSZWxhdGlvbnNoaXBzOiBBIFF1aWNrIE1lbnRhbCBEcmlsbCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIHRoaW5raW5nIGFib3V0IGB2ZmlvX3BjaV96ZGV2Lm9gLiBUaGF0J3MgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBWRklPLVBDSSBpbmZyYXN0cnVjdHVyZSwgaXNuJ3QgaXQ/IFNlZW1zIHJpZ2h0LiBJdCdzIG5vdCBhIHN0YW5kYWxvbmUgdGhpbmc7IGl0J3MgaW50cmljYXRlbHkgbGlua2VkLiBTbywgYHZmaW9fcGNpX3pkZXYub2AuLi4gdGhhdCdzICpwYXJ0KiBvZiB0aGUgbGFyZ2VyIGB2ZmlvLXBjaS1jb3JlYCBtb2R1bGUsIGdvdCBpdC5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogd2hlbiBkb2VzIHRoaXMgYHZmaW8tcGNpLWNvcmVgIG1vZHVsZSBhY3R1YWxseSBnZXQgY29tcGlsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgYnVpbGQgcHJvY2VzcyBvciB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0byBwaW4gZG93biB3aGVuIHRoZSBjb3JlIFZGSU8tUENJIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlLiBXaGVyZSBpcyBpdCByZWZlcmVuY2VkIGluIHRoZSBLY29uZmlnPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgaXRzIGNvbXBpbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjE3LjU4NTUxMzg4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMDY4NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW8tcGNpLWNvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlLTItXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZTozOnZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjQ6dmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgKz0gdmZpb19wY2lfemRldi5vXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZTo1OnZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSArPSB2ZmlvX3BjaV9kbWFidWYub1xcbmRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVkZJT19QQ0lfQ09SRSkgKz0gdmZpby1wY2ktY29yZS5vXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoxNy44Njc1OTEyNzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NjEzNjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IFZGSU8tUENJLiBTZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1ZGSU9fUENJX0NPUkVgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBzb21ldGhpbmcgSSdtIHdvcmtpbmcgb24uIE1ha2VzIHNlbnNlLCBpdCdzIHRoZSBjb3JlIGNvbXBvbmVudC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGFuZCB0byBjaGVjayBmb3IgYW55IGNhdmVhdHMgb3IgYXNzb2NpYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCB0aGUgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgZmlsZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGEgc3VwcG9ydGluZyBjb25maWcsIG9yIGFuIGVkZ2UgY2FzZS4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZSBiZWZvcmUgSSBwcm9jZWVkLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSB0eXBpY2FsbHkgbGllLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjIxLjAzMzczMTUyOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyOTg2ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19QQ0lfQ09SRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoyMy43NjM2MDQ3MDRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0OTYzNTc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIHdvcmtpbmcgb24gc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgVkZJTy1QQ0ksIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZC4gUmlnaHQsIGBWRklPX1BDSV9DT1JFYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgVkZJT19QQ0lgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBWRklPX1BDSV9DT1JFYCBwcm92aWRlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRoYXQgYFZGSU9fUENJYCBidWlsZHMgdXBvbi4gVGhlcmVmb3JlLCB0byBnZXQgYFZGSU9fUENJX0NPUkVgIHdvcmtpbmcsIEkgKm11c3QqIGhhdmUgYENPTkZJR19WRklPX1BDSWAgZW5hYmxlZCBpbiBteSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXTigJlzIGEgZGVwZW5kZW5jeSwgbm90IGEgc3RhbmRhbG9uZSBvcHRpb24uXG5cbk5vdywgd2hlcmUgd2FzIHRoYXQgS2NvbmZpZyBmaWxlIGFnYWluIGZvciBWRklPLVBDST8gUmlnaHQsIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBob3cgYFZGSU9fUENJYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbuKAmXQgbWlzc2VkIGFueXRoaW5nIGZ1bmRhbWVudGFsIGR1cmluZyBteSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGFzIGV4cGVjdGVkLiBMZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIG1vZHVsZXMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoyNy4yMTMyNDM2MjhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc3ODU1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjMxLjYyMTAzNjYxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzg2MzQ1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWRklPLVBDSSBaREVWIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBWRklPX1BDSWAgc2VsZWN0cyBgVkZJT19QQ0lfQ09SRWAuICBgVkZJT19QQ0lfWkRFVl9LVk1gIGlzIHNlcGFyYXRlLCBkZXBlbmRpbmcgb24gYFMzOTAgXHUwMDI2XHUwMDI2IEtWTWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgaWYgYFZGSU9fUENJX1pERVZfS1ZNYCBpcyBlbmFibGVkLCBgYXJjaC9zMzkwL2t2bS9wY2kub2AgZ2V0cyBjb21waWxlZC4gIEJ1dCB3YWl0LCBkb2VzIGBWRklPX1BDSV9aREVWX0tWTWAgYWN0dWFsbHkgKnJlcXVpcmUqIGBWRklPX1BDSV9DT1JFYCB0byBiZSBlbmFibGVkPyBJdCBzZWVtcyBzbywgYmVjYXVzZSBgdmZpb19wY2lfemRldi5vYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYFZGSU9fUENJX0NPUkVgIGlzIGVuYWJsZWQuIFNpbmNlIHdlIG5lZWQgdG8gdXNlIHRoZSBob29rcywgd2UgKmRlZmluaXRlbHkqIG5lZWQgYFZGSU9fUENJX0NPUkVgLCB3aGljaCBtZWFucyB3ZSAqbXVzdCogaGF2ZSBgQ09ORklHX1ZGSU9fUENJYCBlbmFibGVkLiAgR290IGl0LlxuXG5TbywgdGhlIGtleSBjb25maWd1cmF0aW9ucyBuZWVkZWQgYXJlOiBgS1ZNYCwgYFZGSU9gLCBgVkZJT19QQ0lgLCBhbmQgYFZGSU9fUENJX1pERVZfS1ZNYC4gIExldCdzIGRvdWJsZS1jaGVjayBpZiBgVkZJT19QQ0lfWkRFVl9LVk1gIGlzIGBkZWZhdWx0IHlgIHVuZGVyIGBTMzkwIFx1MDAyNlx1MDAyNiBLVk1gLiBZZXMsIGl0IGlzLiBUaGVyZWZvcmUsIHdlIGp1c3QgaGF2ZSB0byBlbnN1cmUgYFZGSU9gIGFuZCBgVkZJT19QQ0lgIGFyZSBlbmFibGVkLCBhbG9uZyB3aXRoIGBLVk1gLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQuIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgc2VlbXMgdG8gYmUgdGhlIG1haW4gb25lLiAgSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMuIGBrdm1fczM5MF9wY2lfYWVuX2luaXRgIGFuZCBga3ZtX3MzOTBfcGNpX2luaXRgLCBhcmUgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2luaXRgLiBBbHNvLCBga3ZtX3MzOTBfcGNpX2Flbl9leGl0YCBhbmQgYGt2bV9zMzkwX3BjaV9leGl0YCBhcmUgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2V4aXRgLiBBbmQgZmluYWxseSwgYGt2bV9zMzkwX3BjaV9pbml0X2xpc3RgIGFuZCBga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3RgIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfaW5pdF92bWAgYW5kIGBrdm1fYXJjaF9kZXN0cm95X3ZtYC5cblxuU28sIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBpb2N0bCBwZXItVk0sIGFuZCBoYW5kbGVzIHRoZSBtb3N0IG9mIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5Ob3csIGxldCdzIHJldmlzaXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBjaGFuZ2luZyBgdW5hY2NvdW50X21lbWAgYW5kIGBhY2NvdW50X21lbWAgdG8gdXNlIGBremRldi1cdTAwM2V1c2VyX2FjY291bnRgIGFuZCBga3pkZXYtXHUwMDNlbW1fYWNjb3VudGAgaW5zdGVhZCBvZiBgY3VycmVudF91c2VyKClgIGFuZCBgY3VycmVudC1cdTAwM2VtbWAuICBDcnVjaWFsbHksIGl0J3MgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGluIGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAgZm9yIGBhY2NvdW50X21lbWAgZmFpbHVyZXMuIEl0IGFsc28gY2hlY2tzIGlmIEFJQlYgaXMgYWxyZWFkeSBlbmFibGVkLCBhcyB3ZWxsIGFzIGlmIEFJQlYgc3BhbnMgbW9yZSB0aGFuIDEgcGFnZSBhbmQgaWYgQUlTQiBpcyBkd29yZCBhbGlnbmVkLiAgQWRkaXRpb25hbGx5LCBpdCBoYW5kbGVzIGZhaWx1cmVzIGZvciBgYWlycV9pdl9hbGxvY19iaXRgLCBgYWlycV9pdl9jcmVhdGVgLCBhbmQgYGt2bV96cGNpX3NldF9haXJxYC4gVGhhdCdzIGEgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIGEgbG90IG9mIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuXG5cbkkgbmVlZCB0byBlbmFibGUgYEtWTWAsIGBWRklPYCwgYFZGSU9fUENJYCwgYW5kIGBWRklPX1BDSV9aREVWX0tWTWAgaW4gdGhlIGNvbmZpZy4gQW5kIG5vLCBgUzM5MGAgaXMgdGhlIGFyY2hpdGVjdHVyZSwgaXQgd2lsbCBiZSBydW4gb24gczM5MHguXG5cbkxldCdzIHZlcmlmeSB0aGF0IGZ1bmN0aW9uIG5hbWU6IGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgaW5kZWVkIGBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylgXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBNYXliZSBgdmZpb19wY2lfemRldl9vcGVuX2RldmljZWA/IFRoYXQgb25lIGlzIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY2AsIGFuZCB0aGUgcGF0Y2ggZG9lc24ndCB0b3VjaCBpdC4gU28sIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgc3VmZmljaWVudC5cblxuTm93LCBsZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgzNSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjQ1LjAwNzM4NjcxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDYwMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJWRklPX1BDSV9aREVWX0tWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX3BjaV96cGNpX29wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJWRklPX1BDSV9aREVWX0tWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX3BjaV96cGNpX29wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowmn42g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 03:24:03 +0000 UTC FinishedAt: 2026-07-25 03:47:46 +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": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VFIO", "VFIO_PCI", "VFIO_PCI_ZDEV_KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VFIO", "VFIO_PCI", "VFIO_PCI_ZDEV_KVM" ], "series_id": "104faa58-b642-47ac-a163-11d299d531f2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_s390_pci_zpci_op" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJX1pERVZfS1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3MzOTBfcGNpX3pwY2lfb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmZWEyY2VlNThhNGE5MGViZWNkZTlkM2I5MTcwMTZjZGQyYWYwNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMzo0NToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3BjaS5jIGIvYXJjaC9zMzkwL2t2bS9wY2kuY1xuaW5kZXggNzIwYmI1OGNhYmUyZTkuLjQzOTRjZWZlZjI0MjJlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wY2kuY1xuQEAgLTE5MCw0MCAmIzQzOzE5MCw2MSBAQCBzdGF0aWMgaW50IGt2bV96cGNpX2NsZWFyX2FpcnEoc3RydWN0IHpwY2lfZGV2ICp6ZGV2KVxuIFx0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuLVx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XG4mIzQzO1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0ga3pkZXYtXHUwMDNldXNlcl9hY2NvdW50O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQgPSBremRldi1cdTAwM2VtbV9hY2NvdW50O1xuIFxuLVx0aWYgKHVzZXIpXG4mIzQzO1x0aWYgKHVzZXIpIHtcbiBcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3BhZ2VzLCBcdTAwMjZ1c2VyLVx1MDAzZWxvY2tlZF92bSk7XG4tXHRpZiAoY3VycmVudC1cdTAwM2VtbSlcbi1cdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4mIzQzO1x0XHRmcmVlX3VpZCh1c2VyKTtcbiYjNDM7XHRcdGt6ZGV2LVx1MDAzZXVzZXJfYWNjb3VudCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobW1fYWNjb3VudCkge1xuJiM0MztcdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZtbV9hY2NvdW50LVx1MDAzZXBpbm5lZF92bSk7XG4mIzQzO1x0XHRtbWRyb3AobW1fYWNjb3VudCk7XG4mIzQzO1x0XHRremRldi1cdTAwM2VtbV9hY2NvdW50ID0gTlVMTDtcbiYjNDM7XHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzO1xuJiM0MztcdGludCByYyA9IDA7XG4gXG4gXHRwYWdlX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdGN1cl9wYWdlcyA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2dXNlci1cdTAwM2Vsb2NrZWRfdm0pO1xuIFx0ZG8ge1xuIFx0XHRuZXdfcGFnZXMgPSBjdXJfcGFnZXMgJiM0MzsgbnJfcGFnZXM7XG4tXHRcdGlmIChuZXdfcGFnZXMgXHUwMDNlIHBhZ2VfbGltaXQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRpZiAobmV3X3BhZ2VzIFx1MDAzZSBwYWdlX2xpbWl0KSB7XG4mIzQzO1x0XHRcdHJjID0gIC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuIFx0fSB3aGlsZSAoIWF0b21pY19sb25nX3RyeV9jbXB4Y2hnKFx1MDAyNnVzZXItXHUwMDNlbG9ja2VkX3ZtLCBcdTAwMjZjdXJfcGFnZXMsIG5ld19wYWdlcykpO1xuIFxuLVx0YXRvbWljNjRfYWRkKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4mIzQzO1x0aWYgKGN1cnJlbnQtXHUwMDNlbW0pIHtcbiYjNDM7XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbiYjNDM7XHRcdGF0b21pYzY0X2FkZChucl9wYWdlcywgXHUwMDI2Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VwaW5uZWRfdm0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3pkZXYtXHUwMDNldXNlcl9hY2NvdW50ID0gdXNlcjtcbiYjNDM7XHRremRldi1cdTAwM2VtbV9hY2NvdW50ID0gY3VycmVudC1cdTAwM2VtbTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGZyZWVfdWlkKHVzZXIpO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0XHRcdFx0ICAgYm9vbCBhc3Npc3QpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2VzWzFdLCAqYWlidl9wYWdlLCAqYWlzYl9wYWdlID0gTlVMTDtcbi1cdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4O1xuJiM0MztcdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4LCBzaXplO1xuIFx0c3RydWN0IHpwY2lfZ2FpdGUgKmdhaXRlO1xuIFx0dW5zaWduZWQgbG9uZyBodmEsIGJpdDtcbiBcdHN0cnVjdCBrdm0gKmt2bTtcbkBAIC0yMzcsNiAmIzQzOzI1OCwxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXG4gXHRpZiAoemRldi1cdTAwM2VnaXNhID09IDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIEFJRiBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgKi9cbiYjNDM7XHRpZiAoemRldi1cdTAwM2VremRldi1cdTAwM2VmaWIuZm10MC5haWJ2ICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRrdm0gPSB6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWt2bTtcbiBcdG1zaV92ZWNzID0gbWluX3QodW5zaWduZWQgaW50LCBmaWItXHUwMDNlZm10MC5ub2ksIHpkZXYtXHUwMDNlbWF4X21zaSk7XG4gXG5AQCAtMjQ2LDYgJiM0MzsyNzEsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0XHRyZXR1cm4gZ2lzYztcbiBcbiBcdC8qIFJlcGxhY2UgQUlCViBhZGRyZXNzICovXG4mIzQzO1x0c2l6ZSA9IEJJVFNfVE9fTE9OR1MobXNpX3ZlY3MgJiM0MzsgZmliLVx1MDAzZWZtdDAuYWlidm8pICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MztcdG5wYWdlcyA9IERJVl9ST1VORF9VUCgoZmliLVx1MDAzZWZtdDAuYWlidiBcdTAwMjYgflBBR0VfTUFTSykgJiM0Mzsgc2l6ZSwgUEFHRV9TSVpFKTtcbiYjNDM7XHQvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi9cbiYjNDM7XHRpZiAobnBhZ2VzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0aHZhID0gZ2ZuX3RvX2h2YShrdm0sIGdwYV90b19nZm4oKGdwYV90KWZpYi1cdTAwM2VmbXQwLmFpYnYpKTtcbiBcdG5wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoaHZhLCAxLCBGT0xMX1dSSVRFIHwgRk9MTF9MT05HVEVSTSwgcGFnZXMpO1xuQEAgLTI2MSw2ICYjNDM7Mjk0LDEyIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcbiBcdC8qIFBpbiB0aGUgZ3Vlc3QgQUlTQiBpZiBvbmUgd2FzIHNwZWNpZmllZCAqL1xuIFx0aWYgKGZpYi1cdTAwM2VmbXQwLnN1bSA9PSAxKSB7XG4mIzQzO1x0XHQvKiBBSVNCIG11c3QgYmUgZHdvcmQgYWxpZ25lZCAqL1xuJiM0MztcdFx0aWYgKGZpYi1cdTAwM2VmbXQwLmFpc2IgXHUwMDI2IDB4Nykge1xuJiM0MztcdFx0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5waW4xO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0XHRodmEgPSBnZm5fdG9faHZhKGt2bSwgZ3BhX3RvX2dmbigoZ3BhX3QpZmliLVx1MDAzZWZtdDAuYWlzYikpO1xuIFx0XHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG5AQCAtMjc1LDIwICYjNDM7MzE0LDI4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcdH1cbiBcbiBcdC8qIEFjY291bnQgZm9yIHBpbm5lZCBwYWdlcywgcm9sbCBiYWNrIG9uIGZhaWx1cmUgKi9cbi1cdGlmIChhY2NvdW50X21lbShwY291bnQpKVxuJiM0MztcdHJjID0gYWNjb3VudF9tZW0oemRldi1cdTAwM2VremRldiwgcGNvdW50KTtcbiYjNDM7XHRpZiAocmMpXG4gXHRcdGdvdG8gdW5waW4yO1xuIFxuIFx0LyogQUlTQiBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIGZpbGwgaW4gR0FJVEUgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIFx0Yml0ID0gYWlycV9pdl9hbGxvY19iaXQoYWlmdC1cdTAwM2VzYnYpO1xuLVx0aWYgKGJpdCA9PSAtMVVMKVxuJiM0MztcdGlmIChiaXQgPT0gLTFVTCkge1xuJiM0MztcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXHR6ZGV2LVx1MDAzZWFpc2IgPSBiaXQ7IC8qIHN0b3JlIHRoZSBzdW1tYXJ5IGJpdCBudW1iZXIgKi9cbiBcdHpkZXYtXHUwMDNlYWlidiA9IGFpcnFfaXZfY3JlYXRlKG1zaV92ZWNzLCBBSVJRX0lWX0RBVEEgfFxuIFx0XHRcdFx0ICAgIEFJUlFfSVZfQklUTE9DSyB8XG4gXHRcdFx0XHQgICAgQUlSUV9JVl9HVUVTVFZFQyxcbiBcdFx0XHRcdCAgICBwaHlzX3RvX3ZpcnQoZmliLVx1MDAzZWZtdDAuYWlidikpO1xuIFxuJiM0MztcdGlmICghemRldi1cdTAwM2VhaWJ2KSB7XG4mIzQzO1x0XHRyYyA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGZyZWVfYWlzYjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZhaWZ0LVx1MDAzZWdhaXRfbG9jayk7XG4gXHRnYWl0ZSA9IGFpZnQtXHUwMDNlZ2FpdCAmIzQzOyB6ZGV2LVx1MDAzZWFpc2I7XG4gXG5AQCAtMzExLDIxICYjNDM7MzU4LDM5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcdGFpZnQtXHUwMDNla3pkZXZbemRldi1cdTAwM2VhaXNiXSA9IHpkZXYtXHUwMDNla3pkZXY7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2YWlmdC1cdTAwM2VnYWl0X2xvY2spO1xuIFxuLVx0LyogVXBkYXRlIGd1ZXN0IEZJQiBmb3IgcmUtaXNzdWUgKi9cbi1cdGZpYi1cdTAwM2VmbXQwLmFpc2JvID0gemRldi1cdTAwM2VhaXNiIFx1MDAyNiA2Mztcbi1cdGZpYi1cdTAwM2VmbXQwLmFpc2IgPSB2aXJ0X3RvX3BoeXMoYWlmdC1cdTAwM2VzYnYtXHUwMDNldmVjdG9yKSAmIzQzOyAoemRldi1cdTAwM2VhaXNiIC8gNjQpICogODtcbi1cdGZpYi1cdTAwM2VmbXQwLmlzYyA9IGdpc2M7XG4tXG4gXHQvKiBTYXZlIHNvbWUgZ3Vlc3QgZmliIHZhbHVlcyBpbiB0aGUgaG9zdCBmb3IgbGF0ZXIgdXNlICovXG4tXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IGZpYi1cdTAwM2VmbXQwLmlzYztcbiYjNDM7XHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IGdpc2M7XG4gXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgPSBmaWItXHUwMDNlZm10MC5haWJ2O1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiBcbiBcdC8qIElzc3VlIHRoZSBjbHAgdG8gc2V0dXAgdGhlIGlycSBub3cgKi9cbiBcdHJjID0ga3ZtX3pwY2lfc2V0X2FpcnEoemRldik7XG4tXHRyZXR1cm4gcmM7XG4mIzQzO1x0aWYgKCFyYykge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0YXJ0IGNsZWFudXAgKi9cbiYjNDM7XHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IDA7XG4mIzQzO1x0emRldi1cdTAwM2VremRldi1cdTAwM2VmaWIuZm10MC5haWJ2ID0gMDtcbiBcbiYjNDM7XHRzcGluX2xvY2tfaXJxKFx1MDAyNmFpZnQtXHUwMDNlZ2FpdF9sb2NrKTtcbiYjNDM7XHRnYWl0ZS1cdTAwM2Vjb3VudC0tO1xuJiM0MztcdGdhaXRlLVx1MDAzZWFpc2IgPSAwO1xuJiM0MztcdGdhaXRlLVx1MDAzZWdpc2MgPSAwO1xuJiM0MztcdGdhaXRlLVx1MDAzZWFpc2JvID0gMDtcbiYjNDM7XHRnYWl0ZS1cdTAwM2VnaXNhID0gMDtcbiYjNDM7XHRhaWZ0LVx1MDAzZWt6ZGV2W3pkZXYtXHUwMDNlYWlzYl0gPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZhaWZ0LVx1MDAzZWdhaXRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFpcnFfaXZfcmVsZWFzZSh6ZGV2LVx1MDAzZWFpYnYpO1xuJiM0MztcdHpkZXYtXHUwMDNlYWlidiA9IE5VTEw7XG4mIzQzO1xuJiM0MztmcmVlX2Fpc2I6XG4mIzQzO1x0YWlycV9pdl9mcmVlX2JpdChhaWZ0LVx1MDAzZXNidiwgemRldi1cdTAwM2VhaXNiKTtcbiYjNDM7XHR6ZGV2LVx1MDAzZWFpc2IgPSAwO1xuIHVubG9jazpcbiYjNDM7XHRpZiAocGNvdW50IFx1MDAzZSAwKVxuJiM0MztcdFx0dW5hY2NvdW50X21lbSh6ZGV2LVx1MDAzZWt6ZGV2LCBwY291bnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiB1bnBpbjI6XG4gXHRpZiAoZmliLVx1MDAzZWZtdDAuc3VtID09IDEpXG5AQCAtMzk2LDcgJiM0Mzs0NjEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXG4gXHRcdHBjb3VudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXHRpZiAocGNvdW50IFx1MDAzZSAwKVxuLVx0XHR1bmFjY291bnRfbWVtKHBjb3VudCk7XG4mIzQzO1x0XHR1bmFjY291bnRfbWVtKGt6ZGV2LCBwY291bnQpO1xuIG91dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZhaWZ0LVx1MDAzZWFpZnRfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuaCBiL2FyY2gvczM5MC9rdm0vcGNpLmhcbmluZGV4IGZmMDk3MmRkNWU3MWRjLi5mZGY4YzdiZjRlZDA4MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcGNpLmhcbkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBzdHJ1Y3Qga3ZtX3pkZXYge1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0c3RydWN0IHpwY2lfZmliIGZpYjtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4mIzQzO1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyX2FjY291bnQ7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW1fYWNjb3VudDtcbiB9O1xuIFxuIHN0cnVjdCB6cGNpX2dhaXRlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7VkZJT19QQ0lfWkRFVl9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fczM5MF9wY2lfenBjaV9vcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gczM5MHggS1ZNIFBDSSBwYXNzdGhyb3VnaCAoelBDSSkgZHVyaW5nIEFJRiAoQWRhcHRlciBJbnRlcnJ1cHRpb24gRmFjaWxpdHkpIGVuYWJsZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBtZW1vcnkgcGlubmluZyBhbmQgaW50ZXJydXB0IHZlY3RvciBhbGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk1fUzM5MF9aUENJX09QIGlvY3RsLCBoYW5kbGVkIGJ5IGt2bV9zMzkwX3BjaV96cGNpX29wLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWZlYTJjZWU1OGE0YTkwZWJlY2RlOWQzYjkxNzAxNmNkZDJhZjA2ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDAzOjQ1OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuYyBiL2FyY2gvczM5MC9rdm0vcGNpLmMKaW5kZXggNzIwYmI1OGNhYmUyZTkuLjQzOTRjZWZlZjI0MjJlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcGNpLmMKQEAgLTE5MCw0MCAmIzQzOzE5MCw2MSBAQCBzdGF0aWMgaW50IGt2bV96cGNpX2NsZWFyX2FpcnEoc3RydWN0IHpwY2lfZGV2ICp6ZGV2KQogCXJldHVybiBjYyA/IC1FSU8gOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5hY2NvdW50X21lbSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7CiYjNDM7CXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGt6ZGV2LSZndDt1c2VyX2FjY291bnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQgPSBremRldi0mZ3Q7bW1fYWNjb3VudDsKIAotCWlmICh1c2VyKQomIzQzOwlpZiAodXNlcikgewogCQlhdG9taWNfbG9uZ19zdWIobnJfcGFnZXMsICZhbXA7dXNlci0mZ3Q7bG9ja2VkX3ZtKTsKLQlpZiAoY3VycmVudC0mZ3Q7bW0pCi0JCWF0b21pYzY0X3N1Yihucl9wYWdlcywgJmFtcDtjdXJyZW50LSZndDttbS0mZ3Q7cGlubmVkX3ZtKTsKJiM0MzsJCWZyZWVfdWlkKHVzZXIpOwomIzQzOwkJa3pkZXYtJmd0O3VzZXJfYWNjb3VudCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1tX2FjY291bnQpIHsKJiM0MzsJCWF0b21pYzY0X3N1Yihucl9wYWdlcywgJmFtcDttbV9hY2NvdW50LSZndDtwaW5uZWRfdm0pOwomIzQzOwkJbW1kcm9wKG1tX2FjY291bnQpOwomIzQzOwkJa3pkZXYtJmd0O21tX2FjY291bnQgPSBOVUxMOwomIzQzOwl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYWNjb3VudF9tZW0oc3RydWN0IGt2bV96ZGV2ICpremRldiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBnZXRfdWlkKGN1cnJlbnRfdXNlcigpKTsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzOwomIzQzOwlpbnQgcmMgPSAwOwogCiAJcGFnZV9saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSykgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWN1cl9wYWdlcyA9IGF0b21pY19sb25nX3JlYWQoJmFtcDt1c2VyLSZndDtsb2NrZWRfdm0pOwogCWRvIHsKIAkJbmV3X3BhZ2VzID0gY3VyX3BhZ2VzICYjNDM7IG5yX3BhZ2VzOwotCQlpZiAobmV3X3BhZ2VzICZndDsgcGFnZV9saW1pdCkKLQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJaWYgKG5ld19wYWdlcyAmZ3Q7IHBhZ2VfbGltaXQpIHsKJiM0MzsJCQlyYyA9ICAtRU5PTUVNOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQogCX0gd2hpbGUgKCFhdG9taWNfbG9uZ190cnlfY21weGNoZygmYW1wO3VzZXItJmd0O2xvY2tlZF92bSwgJmFtcDtjdXJfcGFnZXMsIG5ld19wYWdlcykpOwogCi0JYXRvbWljNjRfYWRkKG5yX3BhZ2VzLCAmYW1wO2N1cnJlbnQtJmd0O21tLSZndDtwaW5uZWRfdm0pOwomIzQzOwlpZiAoY3VycmVudC0mZ3Q7bW0pIHsKJiM0MzsJCW1tZ3JhYihjdXJyZW50LSZndDttbSk7CiYjNDM7CQlhdG9taWM2NF9hZGQobnJfcGFnZXMsICZhbXA7Y3VycmVudC0mZ3Q7bW0tJmd0O3Bpbm5lZF92bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3pkZXYtJmd0O3VzZXJfYWNjb3VudCA9IHVzZXI7CiYjNDM7CWt6ZGV2LSZndDttbV9hY2NvdW50ID0gY3VycmVudC0mZ3Q7bW07CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWZyZWVfdWlkKHVzZXIpOwomIzQzOwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYiwKIAkJCQkgICBib29sIGFzc2lzdCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbMV0sICphaWJ2X3BhZ2UsICphaXNiX3BhZ2UgPSBOVUxMOwotCXVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4OwomIzQzOwl1bnNpZ25lZCBpbnQgbXNpX3ZlY3MsIGlkeCwgc2l6ZTsKIAlzdHJ1Y3QgenBjaV9nYWl0ZSAqZ2FpdGU7CiAJdW5zaWduZWQgbG9uZyBodmEsIGJpdDsKIAlzdHJ1Y3Qga3ZtICprdm07CkBAIC0yMzcsNiAmIzQzOzI1OCwxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsCiAJaWYgKHpkZXYtJmd0O2dpc2EgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogQUlGIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIGRldmljZSAqLwomIzQzOwlpZiAoemRldi0mZ3Q7a3pkZXYtJmd0O2ZpYi5mbXQwLmFpYnYgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWt2bSA9IHpkZXYtJmd0O2t6ZGV2LSZndDtrdm07CiAJbXNpX3ZlY3MgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZpYi0mZ3Q7Zm10MC5ub2ksIHpkZXYtJmd0O21heF9tc2kpOwogCkBAIC0yNDYsNiAmIzQzOzI3MSwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsCiAJCXJldHVybiBnaXNjOwogCiAJLyogUmVwbGFjZSBBSUJWIGFkZHJlc3MgKi8KJiM0MzsJc2l6ZSA9IEJJVFNfVE9fTE9OR1MobXNpX3ZlY3MgJiM0MzsgZmliLSZndDtmbXQwLmFpYnZvKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKJiM0MzsJbnBhZ2VzID0gRElWX1JPVU5EX1VQKChmaWItJmd0O2ZtdDAuYWlidiAmYW1wOyB+UEFHRV9NQVNLKSAmIzQzOyBzaXplLCBQQUdFX1NJWkUpOwomIzQzOwkvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi8KJiM0MzsJaWYgKG5wYWdlcyAmZ3Q7IDEpIHsKJiM0MzsJCXJjID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmFtcDtrdm0tJmd0O3NyY3UpOwogCWh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItJmd0O2ZtdDAuYWlidikpOwogCW5wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoaHZhLCAxLCBGT0xMX1dSSVRFIHwgRk9MTF9MT05HVEVSTSwgcGFnZXMpOwpAQCAtMjYxLDYgJiM0MzsyOTQsMTIgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLAogCiAJLyogUGluIHRoZSBndWVzdCBBSVNCIGlmIG9uZSB3YXMgc3BlY2lmaWVkICovCiAJaWYgKGZpYi0mZ3Q7Zm10MC5zdW0gPT0gMSkgewomIzQzOwkJLyogQUlTQiBtdXN0IGJlIGR3b3JkIGFsaWduZWQgKi8KJiM0MzsJCWlmIChmaWItJmd0O2ZtdDAuYWlzYiAmYW1wOyAweDcpIHsKJiM0MzsJCQlyYyA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byB1bnBpbjE7CiYjNDM7CQl9CiYjNDM7CiAJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKIAkJaHZhID0gZ2ZuX3RvX2h2YShrdm0sIGdwYV90b19nZm4oKGdwYV90KWZpYi0mZ3Q7Zm10MC5haXNiKSk7CiAJCW5wYWdlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoaHZhLCAxLCBGT0xMX1dSSVRFIHwgRk9MTF9MT05HVEVSTSwKQEAgLTI3NSwyMCAmIzQzOzMxNCwyOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsCiAJfQogCiAJLyogQWNjb3VudCBmb3IgcGlubmVkIHBhZ2VzLCByb2xsIGJhY2sgb24gZmFpbHVyZSAqLwotCWlmIChhY2NvdW50X21lbShwY291bnQpKQomIzQzOwlyYyA9IGFjY291bnRfbWVtKHpkZXYtJmd0O2t6ZGV2LCBwY291bnQpOwomIzQzOwlpZiAocmMpCiAJCWdvdG8gdW5waW4yOwogCiAJLyogQUlTQiBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIGZpbGwgaW4gR0FJVEUgKi8KIAltdXRleF9sb2NrKCZhbXA7YWlmdC0mZ3Q7YWlmdF9sb2NrKTsKIAliaXQgPSBhaXJxX2l2X2FsbG9jX2JpdChhaWZ0LSZndDtzYnYpOwotCWlmIChiaXQgPT0gLTFVTCkKJiM0MzsJaWYgKGJpdCA9PSAtMVVMKSB7CiYjNDM7CQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiAJemRldi0mZ3Q7YWlzYiA9IGJpdDsgLyogc3RvcmUgdGhlIHN1bW1hcnkgYml0IG51bWJlciAqLwogCXpkZXYtJmd0O2FpYnYgPSBhaXJxX2l2X2NyZWF0ZShtc2lfdmVjcywgQUlSUV9JVl9EQVRBIHwKIAkJCQkgICAgQUlSUV9JVl9CSVRMT0NLIHwKIAkJCQkgICAgQUlSUV9JVl9HVUVTVFZFQywKIAkJCQkgICAgcGh5c190b192aXJ0KGZpYi0mZ3Q7Zm10MC5haWJ2KSk7CiAKJiM0MzsJaWYgKCF6ZGV2LSZndDthaWJ2KSB7CiYjNDM7CQlyYyA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGZyZWVfYWlzYjsKJiM0MzsJfQomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDthaWZ0LSZndDtnYWl0X2xvY2spOwogCWdhaXRlID0gYWlmdC0mZ3Q7Z2FpdCAmIzQzOyB6ZGV2LSZndDthaXNiOwogCkBAIC0zMTEsMjEgJiM0MzszNTgsMzkgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLAogCWFpZnQtJmd0O2t6ZGV2W3pkZXYtJmd0O2Fpc2JdID0gemRldi0mZ3Q7a3pkZXY7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7YWlmdC0mZ3Q7Z2FpdF9sb2NrKTsKIAotCS8qIFVwZGF0ZSBndWVzdCBGSUIgZm9yIHJlLWlzc3VlICovCi0JZmliLSZndDtmbXQwLmFpc2JvID0gemRldi0mZ3Q7YWlzYiAmYW1wOyA2MzsKLQlmaWItJmd0O2ZtdDAuYWlzYiA9IHZpcnRfdG9fcGh5cyhhaWZ0LSZndDtzYnYtJmd0O3ZlY3RvcikgJiM0MzsgKHpkZXYtJmd0O2Fpc2IgLyA2NCkgKiA4OwotCWZpYi0mZ3Q7Zm10MC5pc2MgPSBnaXNjOwotCiAJLyogU2F2ZSBzb21lIGd1ZXN0IGZpYiB2YWx1ZXMgaW4gdGhlIGhvc3QgZm9yIGxhdGVyIHVzZSAqLwotCXpkZXYtJmd0O2t6ZGV2LSZndDtmaWIuZm10MC5pc2MgPSBmaWItJmd0O2ZtdDAuaXNjOwomIzQzOwl6ZGV2LSZndDtremRldi0mZ3Q7ZmliLmZtdDAuaXNjID0gZ2lzYzsKIAl6ZGV2LSZndDtremRldi0mZ3Q7ZmliLmZtdDAuYWlidiA9IGZpYi0mZ3Q7Zm10MC5haWJ2OwotCW11dGV4X3VubG9jaygmYW1wO2FpZnQtJmd0O2FpZnRfbG9jayk7CiAKIAkvKiBJc3N1ZSB0aGUgY2xwIHRvIHNldHVwIHRoZSBpcnEgbm93ICovCiAJcmMgPSBrdm1fenBjaV9zZXRfYWlycSh6ZGV2KTsKLQlyZXR1cm4gcmM7CiYjNDM7CWlmICghcmMpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2FpZnQtJmd0O2FpZnRfbG9jayk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RhcnQgY2xlYW51cCAqLwomIzQzOwl6ZGV2LSZndDtremRldi0mZ3Q7ZmliLmZtdDAuaXNjID0gMDsKJiM0MzsJemRldi0mZ3Q7a3pkZXYtJmd0O2ZpYi5mbXQwLmFpYnYgPSAwOwogCiYjNDM7CXNwaW5fbG9ja19pcnEoJmFtcDthaWZ0LSZndDtnYWl0X2xvY2spOwomIzQzOwlnYWl0ZS0mZ3Q7Y291bnQtLTsKJiM0MzsJZ2FpdGUtJmd0O2Fpc2IgPSAwOwomIzQzOwlnYWl0ZS0mZ3Q7Z2lzYyA9IDA7CiYjNDM7CWdhaXRlLSZndDthaXNibyA9IDA7CiYjNDM7CWdhaXRlLSZndDtnaXNhID0gMDsKJiM0MzsJYWlmdC0mZ3Q7a3pkZXZbemRldi0mZ3Q7YWlzYl0gPSBOVUxMOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDthaWZ0LSZndDtnYWl0X2xvY2spOwomIzQzOwomIzQzOwlhaXJxX2l2X3JlbGVhc2UoemRldi0mZ3Q7YWlidik7CiYjNDM7CXpkZXYtJmd0O2FpYnYgPSBOVUxMOwomIzQzOwomIzQzO2ZyZWVfYWlzYjoKJiM0MzsJYWlycV9pdl9mcmVlX2JpdChhaWZ0LSZndDtzYnYsIHpkZXYtJmd0O2Fpc2IpOwomIzQzOwl6ZGV2LSZndDthaXNiID0gMDsKIHVubG9jazoKJiM0MzsJaWYgKHBjb3VudCAmZ3Q7IDApCiYjNDM7CQl1bmFjY291bnRfbWVtKHpkZXYtJmd0O2t6ZGV2LCBwY291bnQpOwogCW11dGV4X3VubG9jaygmYW1wO2FpZnQtJmd0O2FpZnRfbG9jayk7CiB1bnBpbjI6CiAJaWYgKGZpYi0mZ3Q7Zm10MC5zdW0gPT0gMSkKQEAgLTM5Niw3ICYjNDM7NDYxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBib29sIGZvcmNlKQogCQlwY291bnQmIzQzOyYjNDM7OwogCX0KIAlpZiAocGNvdW50ICZndDsgMCkKLQkJdW5hY2NvdW50X21lbShwY291bnQpOwomIzQzOwkJdW5hY2NvdW50X21lbShremRldiwgcGNvdW50KTsKIG91dDoKIAltdXRleF91bmxvY2soJmFtcDthaWZ0LSZndDthaWZ0X2xvY2spOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3BjaS5oIGIvYXJjaC9zMzkwL2t2bS9wY2kuaAppbmRleCBmZjA5NzJkZDVlNzFkYy4uZmRmOGM3YmY0ZWQwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wY2kuaApAQCAtMjIsNiAmIzQzOzIyLDggQEAgc3RydWN0IGt2bV96ZGV2IHsKIAlzdHJ1Y3Qga3ZtICprdm07CiAJc3RydWN0IHpwY2lfZmliIGZpYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwomIzQzOwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXJfYWNjb3VudDsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW1fYWNjb3VudDsKIH07CiAKIHN0cnVjdCB6cGNpX2dhaXRlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gczM5MCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCBhbmQgYGFyY2gvczM5MC9rdm0vcGNpLmhgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhhdCBgdW5hY2NvdW50X21lbWAgYW5kIGBhY2NvdW50X21lbWAgYXJlIG5vdyB0YWtpbmcgYSBgc3RydWN0IGt2bV96ZGV2ICpremRldmAgYW5kIHVzaW5nIHRoYXQgdG8gbWFuYWdlIGB1c2VyX2FjY291bnRgIGFuZCBgbW1fYWNjb3VudGAgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGdsb2JhbCB2YXJpYWJsZXMgbGlrZSBgY3VycmVudF91c2VyKClgIGFuZCBgY3VycmVudC0mZ3Q7bW1gLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGVwIHRvd2FyZHMgaW1wcm92ZWQgaXNvbGF0aW9uLiBQbHVzLCBJIHNlZSBzb21lIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBpbiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCB3aGljaCBpcyBhbHdheXMgYSBwbHVzLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuICpyZWFjaGFibGUqIGFuZCBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBSaWdodCwgc28gS1ZNIG9uIHMzOTB4IGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHBhcnQgb2YgczM5MHggdmlydHVhbGl6YXRpb24sIHNvIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRvIGJlIHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVSBzZXR1cHMuIE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBldmVuIHN1cHBvcnRzIGZ1enppbmcgczM5MHggS1ZNLiBUaGFua2Z1bGx5LCB0aGUgYW5zd2VyIGlzIHllcywgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweCwgYW5kIGl0IGRvZXMgZnV6eiBLVk0uCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGVuY291cmFnaW5nLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCBga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlYCwgcGx1cyB0aGUgYWZvcmVtZW50aW9uZWQgYGFjY291bnRfbWVtYCBhbmQgYHVuYWNjb3VudF9tZW1gLiBPa2F5LCBub3cgSSB3YW50IHRvIGZpbmQgd2hlcmUgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCBpcyBkZWZpbmVkIGluIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9wY2lfYWlmX2VuYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jPTIxMT1zdGF0aWMgaW5saW5lIGludCBhY2NvdW50X21lbShzdHJ1Y3Qga3ZtX3pkZXYgKmt6ZGV2LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtMjQyLVxuYXJjaC9zMzkwL2t2bS9wY2kuYzoyNDM6c3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuYXJjaC9zMzkwL2t2bS9wY2kuYy0yNDQtXHRcdFx0XHQgICBib29sIGFzc2lzdClcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY2MT1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oc3RydWN0IHpwY2lfZGV2ICp6ZGV2LFxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtNjgwLVx0aG9zdGZsYWcgPSAhKGFyZ3MtXHUwMDNldS5yZWdfYWVuLmZsYWdzIFx1MDAyNiBLVk1fUzM5MF9aUENJT1BfUkVHQUVOX0hPU1QpO1xuYXJjaC9zMzkwL2t2bS9wY2kuYzo2ODE6XHRyZXR1cm4ga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoemRldiwgXHUwMDI2ZmliLCBob3N0ZmxhZyk7XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgQWN0aXZhdGlvbiBvZiB0aGUgQUlGIEVuYWJsZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgaW4gdGhlIEtWTS9zMzkwIFBDSSBjb2RlLiBUaGUgZmlyc3QgY2x1ZSBJIGhhdmUgaXMgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbmAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGFwcHJvYWNoOiBmaW5kIHRoZSBjYWxsZXIsIHRoZW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCk15IG5leHQgc3RlcCBpcyBjbGVhciDigJMgSSBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgd2hlcmUgKml0KiBnZXRzIGNhbGxlZCBmcm9tLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGV2ZW50cyBvciBjb25kaXRpb25zIHRoYXQgZXZlbnR1YWxseSBsZWFkIHRvIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBBSUYgZW5hYmxlIGZ1bmN0aW9uLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgQUlGIGVuYWJsZSBtZWNoYW5pc20gYW5kIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBaUENJIHJlZ2lzdHJhdGlvbiBhbmQgZXZlbnQgbm90aWZpY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jPTY0ND1zdGF0aWMgc3RydWN0IHpwY2lfZGV2ICpnZXRfemRldl9mcm9tX2t2bV9ieV9maChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBmaClcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY2MC1cbmFyY2gvczM5MC9rdm0vcGNpLmM6NjYxOnN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY2Mi1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz02ODQ9aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MTMtXHRcdH1cbmFyY2gvczM5MC9rdm0vcGNpLmM6NzE0Olx0XHRyID0ga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2Flbih6ZGV2LCBhcmdzKTtcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzE1LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBrdm1fczM5MF9wY2lfenBjaV9vcGAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQmIzM5O3MgaGl0dGluZyBtZSBpcyB0aGF0IGZ1bmN0aW9uIG5hbWU6IGBrdm1fczM5MF9wY2lfenBjaV9vcGAuIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgS1ZNLCBzbyB0aGlzIGlzIHZpcnR1YWxpemF0aW9uIG9uIGFuIHMzOTAgYXJjaGl0ZWN0dXJlLiAmIzM0O1BDSSwmIzM0OyAmIzM0O3pwY2kmIzM0OyBpbXBsaWVzIGludGVyYWN0aW9uIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0sIGxpa2VseSBhIFpQQ0kgZGV2aWNlLCB3aGljaCBpcyBob3cgd2UgaGFuZGxlIFBDSSBkZXZpY2VzIGluIHRoZSBzMzkwIHdvcmxkLiAmIzM0O09wJiMzNDsgc3VnZ2VzdHMgc29tZSBraW5kIG9mIG9wZXJhdGlvbiBvciBmdW5jdGlvbi4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGF0IGNhbGwgc2l0ZSBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIElzIGl0IHRyaWdnZXJlZCBieSBhIEtWTSBoeXBlcmNhbGw/IElzIGl0IHdpdGhpbiB0aGUgZ3Vlc3Qtc2lkZSBlbXVsYXRpb24gb2YgdGhlIGRldmljZSwgb3IgaXMgaXQgb24gdGhlIGhvc3Qgc2lkZSwgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzPyBUaGUgY29udGV4dCBpcyBjcml0aWNhbC4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZmluZCBpdHMgY2FsbGVycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uIGFuZCBkZXRlcm1pbmUgd2hpY2ggZXZlbnQgaW5pdGlhdGVzIGl0LiBJcyBpdCBpbnRlcnJ1cHQgcmVsYXRlZD8gSXMgaXQgdHJpZ2dlcmVkIGJ5IE1NSU8/IElzIGl0IGEgcmVzdWx0IG9mIHNvbWUgS1ZNIG9wZXJhdGlvbiByZWxhdGVkIHRvIFpQQ0kgY29uZmlndXJhdGlvbj8gVGhpcyBpcyBnb2luZyB0byBiZSBhIGZ1biBsaXR0bGUgam91cm5leS4gSSBiZXQgdGhlcmUgaXMgc29tZSBpbXBvcnRhbnQgY29udHJvbCBvdmVyIFpQQ0kgZGV2aWNlIHdpdGhpbiB0aGUgS1ZNL3MzOTAgc2V0dXAgdGhhdCBuZWVkcyBteSBmdWxsIGFuZCBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3BjaV96cGNpX29wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5Mi1cdFx0fVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwOTM6XHRcdHIgPSBrdm1fczM5MF9wY2lfenBjaV9vcChrdm0sIFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwOTQtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5oPTYxPXZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjItXG5hcmNoL3MzOTAva3ZtL3BjaS5oOjYzOmludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNX1MzOTBfWlBDSV9PUCoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBwcm9taXNpbmcgbGVhZCBoZXJlLiBUaGlzIGBLVk1fUzM5MF9aUENJX09QYCBpb2N0bCwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgc2NyZWFtcyAmIzM0O2NvcmUgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25hbGl0eSYjMzQ7IHRvIG1lLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZyBhdHRlbnRpb24uIFRoZXNlIGxvdy1sZXZlbCBpbnRlcmZhY2VzIGFyZSBvZnRlbiB3aGVyZSB5b3UgZmluZCB0aGUgbW9zdCBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVncyBpbiB0aGUgaHlwZXJ2aXNvci4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGVuIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4gTGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBidWlsZCBmbGFncy4gS25vd2luZyB0aGUgYnVpbGQgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gY29uc3RydWN0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1pbmltaXppbmcgbm9pc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGU9MTI9a3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTMtXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjE0Omt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHBjaS5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlZGSU8tUENJIFpERVYgS1ZNIEludmVzdGlnYXRpb24qKgoKUmlnaHQsICp0aGF0JiMzOTtzKiB3aGF0IEkgbmVlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBpcyB0aGUgY3J1Y2lhbCBlbGVtZW50IGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgZXhhY3RseSB3aGF0IHRoYXQgZmxhZyBlbmFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIFZGSU8gYW5kIEtWTSBsYW5kc2NhcGUuIElzIGl0IGNvcnJlY3RseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBzZXR1cD8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBwYXRjaGVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhhdCBvcHRpb24gY29udHJvbHMgYW5kIGlmIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyB0aGluZyB0byByZXNvbHZlIHRoZSBpc3N1ZSBhdCBoYW5kLiBMZXTigJlzIGdldCB0byB0aGUgcm9vdCBvZiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRlbHZpbmcgaW50byB0aGUgVkZJTyBLY29uZmlnIGZvciBVbmRlcnN0YW5kaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSA0NywgYXMgdGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBjb250cm9sbGVkIGhlcmUgZm9yIHRoZSBWRklPLVBDSSBkcml2ZXIuIElzIGl0IHRoZSBmZWF0dXJlIGZsYWdzLCBwbGF0Zm9ybSBzdXBwb3J0IG9yIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gcmVtZW1iZXI/IExldCYjMzk7cyByZWZyZXNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdCAgYXNzaWdubWVudCB0byB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBpbmNsdWRlcyBleHBvc2luZyBhbiBJR0RcbiAgNDE6XHRcdCAgc3BlY2lmaWMgZmlybXdhcmUgdGFibGUgYW5kIHJlYWQtb25seSBjb3BpZXMgb2YgdGhlIGhvc3QgYnJpZGdlXG4gIDQyOlx0XHQgIGFuZCBMUEMgYnJpZGdlIGNvbmZpZyBzcGFjZS5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgVG8gZW5hYmxlIEludGVsIElHRCBhc3NpZ25tZW50IHRocm91Z2ggdmZpby1wY2ksIHNheSBZLlxuICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4gIDQ4Olx0XHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBTMzkwIFx1MDAyNlx1MDAyNiBLVk1cbiAgNTA6XHRcdGRlZmF1bHQgeVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBTdXBwb3J0IHMzOTB4LXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGVuaGFuY2VtZW50c1xuICA1MzpcdFx0ICB0byBLVk0gcGFzc3Rocm91Z2ggY2FwYWJpbGl0aWVzLCBzdWNoIGFzIGludGVycHJldGl2ZSBleGVjdXRpb24gb2ZcbiAgNTQ6XHRcdCAgelBDSSBpbnN0cnVjdGlvbnMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGVuYWJsZSBzMzkweCBLVk0gdmZpby1wY2kgZXh0ZW5zaW9ucywgc2F5IFkuXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuICA1OTpcdFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIHRoaXMgYm9pbHMgZG93biB0byBob3cgdGhpbmdzIGFyZSBjb25maWd1cmVkIGZvciBgUzM5MGAgYW5kIGBLVk1gLiBSaWdodCwgc28gd2UgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk1gLCBgQ09ORklHX0tWTWAsIGFuZCBgQ09ORklHX1MzOTBgIOKAkyB0aGF0JiMzOTtzIHRoZSBhcmNoaXRlY3R1cmUuIEFoLCBidXQgd2FpdCwgYENPTkZJR19WRklPX1BDSV9aREVWX0tWTWAgKmRlZmF1bHRzKiB0byAmIzM5O3kmIzM5OyBpZiBib3RoIGBTMzkwYCBhbmQgYEtWTWAgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGNydWNpYWwgY29uZmlndXJhdGlvbnM/IEhtbW0sIGRvZXMgaXQgbmVlZCBgQ09ORklHX1ZGSU9fUENJYCBhcyB3ZWxsPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIEFuZCwgaGFuZyBvbiwgdGhpcyBgVkZJT19QQ0lfWkRFVl9LVk1gIHNldHRpbmcgaXMgZGVmaW5lZCwgaW5zaWRlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBzaXRzIHdpdGhpbiBhbiBgaWYgVkZJT19QQ0lgIGJsb2NrLCBvciBpZiBpdCYjMzk7cyBpbmRlcGVuZGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gUENJXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFZGSU9fUENJX0NPUkVcbiAgIDY6XHRcdHRyaXN0YXRlXG4gICA3Olx0XHRzZWxlY3QgVkZJT19WSVJRRkRcbiAgIDg6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgVkZJT19QQ0lfSU5UWFxuICAxMTpcdFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuICAxMjpcdFx0ZGVwZW5kcyBvbiBWRklPX1BDSV9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFZGSU9fUENJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcJiMzNDtcbiAgMTY6XHRcdHNlbGVjdCBWRklPX1BDSV9DT1JFXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIHRoZSBnZW5lcmljIFBDSSBWRklPIGJ1cyBkcml2ZXIgd2hpY2ggY2FuIGNvbm5lY3QgYW55XG4gIDE5Olx0XHQgIFBDSSBkZXZpY2UgdG8gdGhlIFZGSU8gZnJhbWV3b3JrLlxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMjI6XHRcbiAgMjM6XHRpZiBWRklPX1BDSVxuICAyNDpcdGNvbmZpZyBWRklPX1BDSV9WR0FcbiAgMjU6XHRcdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBYODYgXHUwMDI2XHUwMDI2IFZHQV9BUkJcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXG4gIDI5Olx0XHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcbiAgMzA6XHRcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxuICAzMTpcdFxuICAzMjpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVkZJT19QQ0lfSUdEXG4gIDM1Olx0XHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBYODZcbiAgMzc6XHRcdGRlZmF1bHQgeVxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBTdXBwb3J0IGZvciBJbnRlbCBJR0Qgc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBlbmFibGUgZGlyZWN0XG4gIDQwOlx0XHQgIGFzc2lnbm1lbnQgdG8gdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgaW5jbHVkZXMgZXhwb3NpbmcgYW4gSUdEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgaWYgVkZJT19QQ0lgIGNsb3NlcyBhdCBsaW5lIDQ1LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYFZGSU9fUENJX1pERVZfS1ZNYC4gSXQgbG9va3MgbGlrZSBpdCAqaXNuJiMzOTt0KiBuZXN0ZWQgd2l0aGluIHRoYXQgY29uZGl0aW9uYWwgYmxvY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gYFZGSU9fUENJYCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGBTMzkwICZhbXA7JmFtcDsgS1ZNYCwgd2hpY2ggaXMgZmluZSwgYnV0IEkgc3VzcGVjdCB0aGVyZSBjb3VsZCBiZSBtb3JlIHRvIGl0LiBEb2VzIGl0IGRlcGVuZCBvbiB0aGUgYnJvYWRlciBgVkZJT2AgY29uZmlndXJhdGlvbiBvcHRpb24/IFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvdmZpby9gLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VyIGZvciB0aGUgZGVwZW5kZW5jeSBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgVkZJT1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1wmIzM0O1xuICAgNDpcdFx0c2VsZWN0IElPTU1VX0FQSVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIHx8ICFJT01NVUZEXG4gICA2Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuICAgNzpcdFx0c2VsZWN0IFZGSU9fR1JPVVAgaWYgU1BBUFJfVENFX0lPTU1VIHx8IElPTU1VRkQ9blxuICAgODpcdFx0c2VsZWN0IFZGSU9fREVWSUNFX0NERVYgaWYgIVZGSU9fR1JPVVBcbiAgIDk6XHRcdHNlbGVjdCBWRklPX0NPTlRBSU5FUiBpZiBJT01NVUZEPW5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVkZJTyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2VjdXJlIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVycy5cbiAgMTI6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMTU6XHRcbiAgMTY6XHRpZiBWRklPXG4gIDE3Olx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIFx1MDAyNlx1MDAyNiAhU1BBUFJfVENFX0lPTU1VXG4gIDIwOlx0XHRkZWZhdWx0ICFWRklPX0dST1VQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjIxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqVkZJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGlzIG9ubHkgaW5jbHVkZWQgd2hlbiBgVkZJT2AgaXRzZWxmIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBzb3VyY2luZyBoaWVyYXJjaHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGVyZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBpcyBpbmNsdWRlZC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIGBkcml2ZXJzL3ZmaW8vTWFrZWZpbGVgIG9yIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGluY2x1c2lvbiBydWxlcy4gS25vd2luZyB0aGUgYnVpbGQgc3lzdGVtLCBpdCYjMzk7cyBoaWdobHkgcHJvYmFibGUgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIFZGSU8gZGlyZWN0b3J5IGhhcyB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQsIGJ1dCB0aGUgTWFrZWZpbGUgd291bGQgYmUgdGhlIHBsYWNlIHRvIGdvIGlmIEkgbmVlZGVkIHRvIGtub3cgd2hhdCBjb21wb25lbnRzIGFyZSBnZXR0aW5nIGxpbmtlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1wmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZz04Mz1jb25maWcgVkZJT19ERUJVR0ZTXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctOTItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo5Mzpzb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05NC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgVkZJTyBDb25kaXRpb25hbCoqCgpSaWdodCwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHBpZWNlIG9mIGNvZGUgaXMgbmVzdGxlZCB3aXRoaW4gYW4gYGlmIFZGSU9gIGJsb2NrLi4uIGJ1dCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGV2aWwmIzM5O3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggdGhlc2UgdGhpbmdzLCBhbmQgYSBtaXNwbGFjZWQgY29uZGl0aW9uIGNhbiB3cmVhayBoYXZvYy4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlICpleGFjdCogbG9jYXRpb24gd2hlcmUgdGhhdCBgaWYgVkZJT2Agc3RhdGVtZW50IHRlcm1pbmF0ZXMuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBsb2dpYyBkZXBlbmRpbmcgb24gdGhhdCBjb25kaXRpb24gaXMgcHJvcGVybHkgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGF0IFZGSU8gYmxvY2suIE9rYXksIGxldCBtZSBmb2xsb3cgdGhlIGJyYWNrZXRzIGFuZCBzZWUgd2hlcmUgdGhlICYjMzQ7ZW5kIGlmJiMzNDsgc3RhdGVtZW50IGlzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIG90aGVyd2lzZSwgdGhlcmUgY291bGQgYmUgYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgcmVzdWx0cyBkb3duc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmRpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnPTU3PWNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTYwLVx0ZGVmYXVsdCBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2MTplbmRpZlxuZHJpdmVycy92ZmlvL0tjb25maWctNjItXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9OTc9c291cmNlIFwmIzM0O2RyaXZlcnMvdmZpby9jZHgvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy92ZmlvL0tjb25maWc6OTg6ZW5kaWZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS9WRklPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQsIGBlbmRpZmAgaXMgYXQgbGluZSA5OCwgY29uZmlybWluZyBpdCYjMzk7cyB3aXRoaW4gdGhlIGBpZiBWRklPYCBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhlcmUuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC9zMzkwL2t2bS9wY2kuY2AuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgZmlsZSBldmVuIGdldCBidWlsdCB3aGVuIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgZW5hYmxlZD8gVGltZSB0byBjaGVjayB0aGUgYE1ha2VmaWxlYC4gQWgsIHllcywgYGt2bS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHBjaS5vYCBjbGVhcmx5IHNob3dzIHRoYXQgaXQgaXMuIFNvLCBgVkZJT19QQ0lfWkRFVl9LVk1gLCBgS1ZNYCwgYW5kIGBWRklPYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCk5vdyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcHJpbWFyeSBzdXNwZWN0cyBhcmU6IGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAsIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLCBhbmQgYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gQW5kIGl0IGFwcGVhcnMgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBjYWxscyBga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbmAgd2hpY2ggaW4gdHVybiBjYWxscyBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLiBJcyBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIHN0YXRpYz8gWWVzLCBpdCBpcy4gQnV0LCB3YWl0LCBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzICpub3QqIHN0YXRpYyEgQWxyaWdodCwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGVudHJ5IHBvaW50IHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpbiBgYXJjaC9zMzkwL2t2bS9wY2kuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3BjaV96cGNpX29wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5Mi1cdFx0fVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwOTM6XHRcdHIgPSBrdm1fczM5MF9wY2lfenBjaV9vcChrdm0sIFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwOTQtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5oPTYxPXZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjItXG5hcmNoL3MzOTAva3ZtL3BjaS5oOjYzOmludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKTtcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjI2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFpQQ0kgT3BlcmF0aW9ucyBpbiBLVk0vczM5MHgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gU2VlbXMgbGlrZSB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhIGdvb2QgY2VudHJhbCBwb2ludCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIFpQQ0kgKHovQXJjaGl0ZWN0dXJlIFBDSSkgb3BlcmF0aW9uIHdpdGhpbiBLVk0vczM5MHguIEl0IG1ha2VzIHNlbnNlIGFzIGEgZm9jdXMgc3ltYm9sLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBuYW1pbmcgY29udmVudGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgZm9yIHRoZXNlIFBDSSBkZXZpY2VzIG9uIHMzOTB4LgoKTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24gY29tZXMgdG8gbWluZCAtIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBLbm93aW5nIGlmIGl0JiMzOTtzIHN0YXRpYyBvciBub3QgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIElmIGl0IGlzIHN0YXRpYywgdGhlbiBpdCYjMzk7cyBsb2NhbCB0byBhIG1vZHVsZSBvciBmaWxlIGFuZCBJIHdpbGwgbmVlZCB0byBsb29rIGFyb3VuZCBpdCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgY2FzZSBtb3JlIGZ1bGx5LiBUaGlzIHdob2xlIHNldCBvZiBpbnRlcmFjdGlvbnMgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIGhvdyBaUENJIGlzIGhhbmRsZWQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHR3byBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3BjaV9haWZfZGlzYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jPTI0Mz1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy00MDQtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjQwNTpzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTQwNi17XG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz01NzY9c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYwMi1cdGlmICh6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgIT0gMClcbmFyY2gvczM5MC9rdm0vcGNpLmM6NjAzOlx0XHRrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoemRldiwgdHJ1ZSk7XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYwNC1cbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY4ND1pbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTcxNi1cdGNhc2UgS1ZNX1MzOTBfWlBDSU9QX0RFUkVHX0FFTjpcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzE3Olx0XHRyID0ga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlKHpkZXYsIGZhbHNlKTtcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzE4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUENJIERlcmVnaXN0cmF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgcGFydGljdWxhciBwYXJ0IGlzIHN0YXRpYy4gSXQmIzM5O3MgaW52b2tlZCBieSBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLCBzcGVjaWZpY2FsbHkgd2hlbiBoYW5kbGluZyB0aGUgYEtWTV9TMzkwX1pQQ0lPUF9ERVJFR19BRU5gIGNhc2UsIGFuZCBhbHNvIGRpcmVjdGx5IGJ5IGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gLiBIbW0sIHF1aWNrIGNoZWNrLi4uIHllcCwgYGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bWAgaXMgYWxzbyBzdGF0aWMuCgpSaWdodCwgc28gdGhhdCBtZWFucyBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBib3RoIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhpcyBaUENJIGZ1bmN0aW9uYWxpdHkuIE5vdywgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBXaGVyZSAqZWxzZSogaXMgYGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bWAgYmVpbmcgY2FsbGVkIGZyb20/IEdvdCB0byB0cmFjZSB0aGF0IGJhY2sgZm9yIGEgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wY2kuYz01MDE9c3RhdGljIGludCBrdm1fczM5MF9wY2lfcmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtNTc1LVxuYXJjaC9zMzkwL2t2bS9wY2kuYzo1NzY6c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcbmFyY2gvczM5MC9rdm0vcGNpLmMtNTc3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MzEtXHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jOjczMjpcdHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIgPSBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFbnRyeSBQb2ludCBvZiB0aGUgTW9kaWZpZWQgS1ZNIENvZGUqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIGZlZWxzIGxpa2UgYSBnb29kIGhvb2sgdG8gc3RhcnQgZGlnZ2luZyBpbnRvLiBUaGUgY29kZSBjaGFuZ2VzIHNlZW0gY2VudGVyZWQgYXJvdW5kIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGBhY2NvdW50X21lbWAgYW5kIGB1bmFjY291bnRfbWVtYCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gaXQgYXJlIHN0YXRpYyBpbmxpbmUuIFRoYXQmIzM5O3MgYSBjb21tb24gb3B0aW1pemF0aW9uLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIHN1cmUsIHdoaWNoIHRoZXkgYXJlLiBUaGlzIGZ1bmN0aW9uLCBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLCBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogaG93IGlzIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgYWN0dWFsbHkgKnJlYWNoZWQqIHdpdGhpbiBRRU1VPyBMZXQmIzM5O3MgdHJhY2UgaXQgZG93bi4gQWgsIHllcywgaXTigJlzIGFuIGlvY3RsLCBzcGVjaWZpY2FsbHkgYEtWTV9TMzkwX1pQQ0lfT1BgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBTeXprYWxsZXIgaXMga25vd24gdG8gZnV6eiBLVk0gaW9jdGxzLiBUaGlzIGlzIGxpa2VseSBob3cgdGhleSB3aWxsIGV4cG9zZSB0aGVzZSBjaGFuZ2VzLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGJlIGVuYWJsZWQ/IE9rYXksIGNsZWFybHksIHdlIG5lZWQgYENPTkZJR19WRklPX1BDSV9aREVWX0tWTWAgYW5kIGBDT05GSUdfS1ZNYC4gQnV0IHdoYXQgYWJvdXQgYENPTkZJR19WRklPX1BDSWA/IEhtbW0sIGlmIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCwgaXQgd291bGQgbWFrZSBzZW5zZSBpZiBpdCBkZXBlbmRzIG9uIGBWRklPX1BDSWAuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIHRvIGJlIHN1cmUuIEl0JiMzOTtzIGJlc3QgdG8gYmUgcHJlY2lzZSwgb3IgSSYjMzk7bSBib3VuZCB0byBtaXNzIHNvbWV0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4gIDQ4Olx0XHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBTMzkwIFx1MDAyNlx1MDAyNiBLVk1cbiAgNTA6XHRcdGRlZmF1bHQgeVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBTdXBwb3J0IHMzOTB4LXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGVuaGFuY2VtZW50c1xuICA1MzpcdFx0ICB0byBLVk0gcGFzc3Rocm91Z2ggY2FwYWJpbGl0aWVzLCBzdWNoIGFzIGludGVycHJldGl2ZSBleGVjdXRpb24gb2ZcbiAgNTQ6XHRcdCAgelBDSSBpbnN0cnVjdGlvbnMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGVuYWJsZSBzMzkweCBLVk0gdmZpby1wY2kgZXh0ZW5zaW9ucywgc2F5IFkuXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuICA1OTpcdFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuICA2MDpcdFxuICA2MTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZ1wmIzM0O1xuICA2MjpcdFxuICA2MzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL2lzbS9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYnJlYWtpbmcgZG93biB0aGUgZGVwZW5kZW5jeSBpc3N1ZS4KCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFZGSU8gYW5kIGl0cyBJbXBsaWNhdGlvbnMqKgoKSG1tLCB0aGlzIGRlcGVuZGVuY3kgaXNuJiMzOTt0IGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBpbml0aWFsbHkgdGhvdWdodC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBgVkZJT19QQ0lgLCBidXQgaXQgc2VlbXMgdGhlIHJlYWwga2V5IGlzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgUzM5MGAgYW5kIGBLVk1gLiBUaG9zZSBhcmUgdGhlIGNvcmUgcmVxdWlyZW1lbnRzLiBIb3dldmVyLCB0aGUgYEtjb25maWdgIHN0cnVjdHVyZSBpcyB0aGUgY3VscHJpdCBoZXJlLiBXZSBzZWUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIG5lc3RlZCB3aXRoaW4gYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AsIHdoaWNoIGlzLCBpbiB0dXJuLCBzb3VyY2VkIGluc2lkZSBgZHJpdmVycy92ZmlvL0tjb25maWdgLCB1bmRlciB0aGUgYGlmIFZGSU9gIGNvbmRpdGlvbi4gRXNzZW50aWFsbHksIGV2ZW4gdGhvdWdoIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSBpc24mIzM5O3Qgb24gYFZGSU9fUENJYCwgdGhlIHdheSB0aGUga2VybmVsIGNvbmZpZyBpcyBzdHJ1Y3R1cmVkIG1lYW5zIHRoYXQgYFZGSU9gIGl0c2VsZiAqaXMqIHJlcXVpcmVkIGJlY2F1c2Ugb2YgdGhpcyBuZXN0aW5nLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgZXZlbiBpZiBpdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIGVuYWJsaW5nIGZhY3Rvci4gU28sIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgVkZJT2AgaXMgdHJ1bHkgbmVjZXNzYXJ5IGhlcmUsIGV2ZW4gd2l0aCB0aGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGluIHBsYWNlLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgVkZJT1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1wmIzM0O1xuICAgNDpcdFx0c2VsZWN0IElPTU1VX0FQSVxuICAgNTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIHx8ICFJT01NVUZEXG4gICA2Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuICAgNzpcdFx0c2VsZWN0IFZGSU9fR1JPVVAgaWYgU1BBUFJfVENFX0lPTU1VIHx8IElPTU1VRkQ9blxuICAgODpcdFx0c2VsZWN0IFZGSU9fREVWSUNFX0NERVYgaWYgIVZGSU9fR1JPVVBcbiAgIDk6XHRcdHNlbGVjdCBWRklPX0NPTlRBSU5FUiBpZiBJT01NVUZEPW5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVkZJTyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2VjdXJlIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVycy5cbiAgMTI6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMTU6XHRcbiAgMTY6XHRpZiBWRklPXG4gIDE3Olx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJT01NVUZEIFx1MDAyNlx1MDAyNiAhU1BBUFJfVENFX0lPTU1VXG4gIDIwOlx0XHRkZWZhdWx0ICFWRklPX0dST1VQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzc1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6cGNpX2t2bV9ob29rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTc2OT12b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTc3MC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjc3MTpzdHJ1Y3QgenBjaV9rdm1faG9vayB7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzItXHRpbnQgKCprdm1fcmVnaXN0ZXIpKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzUtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo3NzY6ZXh0ZXJuIHN0cnVjdCB6cGNpX2t2bV9ob29rIHpwY2lfa3ZtX2hvb2s7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzctXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz03Mjk9aW50IF9faW5pdCBrdm1fczM5MF9wY2lfaW5pdCh2b2lkKVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MzAte1xuYXJjaC9zMzkwL2t2bS9wY2kuYzo3MzE6XHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jOjczMjpcdHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIgPSBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm07XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMy1cbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTc0Nz12b2lkIGt2bV9zMzkwX3BjaV9leGl0KHZvaWQpXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTc0OC17XG5hcmNoL3MzOTAva3ZtL3BjaS5jOjc0OTpcdHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyID0gTlVMTDtcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzUwOlx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlciA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL3BjaS5jLTc1MS1cbi0tXG5hcmNoL3MzOTAvcGNpL3BjaV9rdm1faG9vay5jLTExLVxuYXJjaC9zMzkwL3BjaS9wY2lfa3ZtX2hvb2suYzoxMjpzdHJ1Y3QgenBjaV9rdm1faG9vayB6cGNpX2t2bV9ob29rO1xuYXJjaC9zMzkwL3BjaS9wY2lfa3ZtX2hvb2suYzoxMzpFWFBPUlRfU1lNQk9MX0dQTCh6cGNpX2t2bV9ob29rKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYz0xNDQ9aW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE1My1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE1NDpcdGlmICh6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlcilcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE1NTpcdFx0cmV0dXJuIHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKHpkZXYsIHZkZXYtXHUwMDNldmRldi5rdm0pO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMtMTU2LVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jPTE2MD12b2lkIHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYy0xNjYtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYzoxNjc6XHRpZiAoenBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlcilcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE2ODpcdFx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3Rlcih6ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE2OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzY5CgkJCQkJCQlvdXRwdXQ6IDcxCgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkZJTy1QQ0kgYW5kIEtWTS9zMzkwIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8tUENJIGRyaXZlciBhbmQgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbS4gSXQgbG9va3MgbGlrZSBgdmZpb19wY2lfemRldl9vcGVuX2RldmljZWAgdHJpZ2dlcnMgdGhlIGBrdm1fcmVnaXN0ZXJgIHByb2Nlc3MsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gLiBDb252ZXJzZWx5LCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIGhhbmRsZXMgdGhlIGNsZWFudXAgYnkgY2FsbGluZyBga3ZtX3VucmVnaXN0ZXJgLCBsZWFkaW5nIHRvIGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gLiBJIHNlZSB0aGF0IGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gIHRoZW4gY2FsbHMgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAuIFNvLCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIG9mZmVycyBhbm90aGVyIHJvdXRlIHRvIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLgoKSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIHNlZW1zIGxpa2UgdGhlIGJlc3QgY2FuZGlkYXRlIGJlY2F1c2UgaXQgY292ZXJzIHRoZSBpb2N0bCBwYXRoLiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIHRoZSByaWdodCBwbGFjZSB0byBmb2N1cy4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgdG8gY29uc2lkZXI/IExldCYjMzk7cyBydWxlIHRoZW0gb3V0LiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIGFuZCBga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlYCBhcmUgc3RhdGljLCBzbyB0aGF0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGV4YW1pbmF0aW9uLiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFNpbWlsYXJseSwgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gIGFuZCBga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtYCBhcmUgc3RhdGljLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGxvY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gYHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2VgIGFuZCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIHJlc2lkZSBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNgLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGluIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCwgd2hpY2ggc3RyZW5ndGhlbnMgdGhlIGFyZ3VtZW50IHRoYXQgZm9jdXNpbmcgb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IHNlZW1zIGxvZ2ljYWwuCgpOb3csIGxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gb2YgYGFyY2gvczM5MC9rdm0vcGNpLmNgIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBpbW1lZGlhdGVseSBvYnZpb3VzIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIG5vdGUuIFRoaXMgc2hvdWxkIGhlbHAgbWUgY29uZmlybSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3J1Y2lhbCBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcGNpLmM9MjE9c3RhdGljIGlubGluZSBpbnQgX19zZXRfaXJxX25vaWliKHUxNiBjdGwsIHU4IGlzYylcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTI3LVxuYXJjaC9zMzkwL2t2bS9wY2kuYzoyODp2b2lkIGt2bV9zMzkwX3BjaV9hZW5fZXhpdCh2b2lkKVxuYXJjaC9zMzkwL2t2bS9wY2kuYy0yOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYz0xMDE9c3RhdGljIGludCB6cGNpX3Jlc2V0X2FpcGIodTggbmlzYylcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTExOS1cbmFyY2gvczM5MC9rdm0vcGNpLmM6MTIwOmludCBrdm1fczM5MF9wY2lfYWVuX2luaXQodTggbmlzYylcbmFyY2gvczM5MC9rdm0vcGNpLmMtMTIxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTU3Nj1zdGF0aWMgdm9pZCBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm0odm9pZCAqb3BhcXVlKVxuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmMtNjI2LVxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2Mjc6dm9pZCBrdm1fczM5MF9wY2lfaW5pdF9saXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjI4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYzMi1cbmFyY2gvczM5MC9rdm0vcGNpLmM6NjMzOnZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02MzQte1xuLS1cbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9wY2kuYy03NDYtXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjc0Nzp2b2lkIGt2bV9zMzkwX3BjaV9leGl0KHZvaWQpXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTc0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgWlBDSSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoaXMsIHJpZ2h0PyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIHRob3VnaCDigJMgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBaCwgeWVzLCBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBsb29rcyBsaWtlIGEga2V5IG9uZSB0b28uIE5hdHVyYWxseSwgYENPTkZJR19LVk1gIGl0c2VsZiBpcyBhIHByZXJlcXVpc2l0ZS4gQW5kIG9mIGNvdXJzZSBgQ09ORklHX1ZGSU9gIGFuZCBgQ09ORklHX1ZGSU9fUENJYC4gSGFuZyBvbuKApiBpc24mIzM5O3QgYHZmaW9fcGNpX3pkZXYuY2AgbG9jYXRlZCBpbiBgZHJpdmVycy92ZmlvL3BjaS9gPyBSaWdodCwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX3pkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGU9Mz12ZmlvLXBjaS1jb3JlLXkgOj0gdmZpb19wY2lfY29yZS5vIHZmaW9fcGNpX2ludHJzLm8gdmZpb19wY2lfcmR3ci5vIHZmaW9fcGNpX2NvbmZpZy5vXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjQ6dmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHZmaW9fcGNpX3pkZXYub1xuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZS01LXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSAmIzQzOz0gdmZpb19wY2lfZG1hYnVmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBWRklPOgoKKipWRklPIE1vZHVsZSBSZWxhdGlvbnNoaXBzOiBBIFF1aWNrIE1lbnRhbCBEcmlsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB2ZmlvX3BjaV96ZGV2Lm9gLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgVkZJTy1QQ0kgaW5mcmFzdHJ1Y3R1cmUsIGlzbiYjMzk7dCBpdD8gU2VlbXMgcmlnaHQuIEl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgdGhpbmc7IGl0JiMzOTtzIGludHJpY2F0ZWx5IGxpbmtlZC4gU28sIGB2ZmlvX3BjaV96ZGV2Lm9gLi4uIHRoYXQmIzM5O3MgKnBhcnQqIG9mIHRoZSBsYXJnZXIgYHZmaW8tcGNpLWNvcmVgIG1vZHVsZSwgZ290IGl0LgoKTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogd2hlbiBkb2VzIHRoaXMgYHZmaW8tcGNpLWNvcmVgIG1vZHVsZSBhY3R1YWxseSBnZXQgY29tcGlsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgYnVpbGQgcHJvY2VzcyBvciB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0byBwaW4gZG93biB3aGVuIHRoZSBjb3JlIFZGSU8tUENJIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlLiBXaGVyZSBpcyBpdCByZWZlcmVuY2VkIGluIHRoZSBLY29uZmlnPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgaXRzIGNvbXBpbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvLXBjaS1jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlLTItXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjM6dmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZTo0OnZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICYjNDM7PSB2ZmlvX3BjaV96ZGV2Lm9cbmRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGU6NTp2ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX0RNQUJVRikgJiM0Mzs9IHZmaW9fcGNpX2RtYWJ1Zi5vXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZGSU9fUENJX0NPUkUpICYjNDM7PSB2ZmlvLXBjaS1jb3JlLm9cbmRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBWRklPLVBDSS4gU2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19WRklPX1BDSV9DT1JFYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3Igc29tZXRoaW5nIEkmIzM5O20gd29ya2luZyBvbi4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIHRoZSBjb3JlIGNvbXBvbmVudC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGFuZCB0byBjaGVjayBmb3IgYW55IGNhdmVhdHMgb3IgYXNzb2NpYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGZpbGUuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBzdXBwb3J0aW5nIGNvbmZpZywgb3IgYW4gZWRnZSBjYXNlLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlIHRoZSB3aG9sZSBwaWN0dXJlIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIHR5cGljYWxseSBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX1BDSV9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyBvbiBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBWRklPLVBDSSwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZC4gUmlnaHQsIGBWRklPX1BDSV9DT1JFYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgVkZJT19QQ0lgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBWRklPX1BDSV9DT1JFYCBwcm92aWRlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRoYXQgYFZGSU9fUENJYCBidWlsZHMgdXBvbi4gVGhlcmVmb3JlLCB0byBnZXQgYFZGSU9fUENJX0NPUkVgIHdvcmtpbmcsIEkgKm11c3QqIGhhdmUgYENPTkZJR19WRklPX1BDSWAgZW5hYmxlZCBpbiBteSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXTigJlzIGEgZGVwZW5kZW5jeSwgbm90IGEgc3RhbmRhbG9uZSBvcHRpb24uCgpOb3csIHdoZXJlIHdhcyB0aGF0IEtjb25maWcgZmlsZSBhZ2FpbiBmb3IgVkZJTy1QQ0k/IFJpZ2h0LCBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBob3cgYFZGSU9fUENJYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbuKAmXQgbWlzc2VkIGFueXRoaW5nIGZ1bmRhbWVudGFsIGR1cmluZyBteSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGFzIGV4cGVjdGVkLiBMZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIG1vZHVsZXMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgzNQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAxMDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWRklPLVBDSSBaREVWIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYC4gIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgc2VwYXJhdGUsIGRlcGVuZGluZyBvbiBgUzM5MCAmYW1wOyZhbXA7IEtWTWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgaWYgYFZGSU9fUENJX1pERVZfS1ZNYCBpcyBlbmFibGVkLCBgYXJjaC9zMzkwL2t2bS9wY2kub2AgZ2V0cyBjb21waWxlZC4gIEJ1dCB3YWl0LCBkb2VzIGBWRklPX1BDSV9aREVWX0tWTWAgYWN0dWFsbHkgKnJlcXVpcmUqIGBWRklPX1BDSV9DT1JFYCB0byBiZSBlbmFibGVkPyBJdCBzZWVtcyBzbywgYmVjYXVzZSBgdmZpb19wY2lfemRldi5vYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYFZGSU9fUENJX0NPUkVgIGlzIGVuYWJsZWQuIFNpbmNlIHdlIG5lZWQgdG8gdXNlIHRoZSBob29rcywgd2UgKmRlZmluaXRlbHkqIG5lZWQgYFZGSU9fUENJX0NPUkVgLCB3aGljaCBtZWFucyB3ZSAqbXVzdCogaGF2ZSBgQ09ORklHX1ZGSU9fUENJYCBlbmFibGVkLiAgR290IGl0LgoKU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgbmVlZGVkIGFyZTogYEtWTWAsIGBWRklPYCwgYFZGSU9fUENJYCwgYW5kIGBWRklPX1BDSV9aREVWX0tWTWAuICBMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIGBWRklPX1BDSV9aREVWX0tWTWAgaXMgYGRlZmF1bHQgeWAgdW5kZXIgYFMzOTAgJmFtcDsmYW1wOyBLVk1gLiBZZXMsIGl0IGlzLiBUaGVyZWZvcmUsIHdlIGp1c3QgaGF2ZSB0byBlbnN1cmUgYFZGSU9gIGFuZCBgVkZJT19QQ0lgIGFyZSBlbmFibGVkLCBhbG9uZyB3aXRoIGBLVk1gLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBvbmUuICBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBpbml0IGFuZCBleGl0IGZ1bmN0aW9ucy4gYGt2bV9zMzkwX3BjaV9hZW5faW5pdGAgYW5kIGBrdm1fczM5MF9wY2lfaW5pdGAsIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfaW5pdGAuIEFsc28sIGBrdm1fczM5MF9wY2lfYWVuX2V4aXRgIGFuZCBga3ZtX3MzOTBfcGNpX2V4aXRgIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfZXhpdGAuIEFuZCBmaW5hbGx5LCBga3ZtX3MzOTBfcGNpX2luaXRfbGlzdGAgYW5kIGBrdm1fczM5MF9wY2lfY2xlYXJfbGlzdGAgYXJlIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9pbml0X3ZtYCBhbmQgYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gLgoKU28sIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBpb2N0bCBwZXItVk0sIGFuZCBoYW5kbGVzIHRoZSBtb3N0IG9mIHRoZSBtb2RpZmllZCBjb2RlLgoKTm93LCBsZXQmIzM5O3MgcmV2aXNpdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBjaGFuZ2luZyBgdW5hY2NvdW50X21lbWAgYW5kIGBhY2NvdW50X21lbWAgdG8gdXNlIGBremRldi0mZ3Q7dXNlcl9hY2NvdW50YCBhbmQgYGt6ZGV2LSZndDttbV9hY2NvdW50YCBpbnN0ZWFkIG9mIGBjdXJyZW50X3VzZXIoKWAgYW5kIGBjdXJyZW50LSZndDttbWAuICBDcnVjaWFsbHksIGl0JiMzOTtzIGFkZGluZyBlcnJvciBoYW5kbGluZyBpbiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIGZvciBgYWNjb3VudF9tZW1gIGZhaWx1cmVzLiBJdCBhbHNvIGNoZWNrcyBpZiBBSUJWIGlzIGFscmVhZHkgZW5hYmxlZCwgYXMgd2VsbCBhcyBpZiBBSUJWIHNwYW5zIG1vcmUgdGhhbiAxIHBhZ2UgYW5kIGlmIEFJU0IgaXMgZHdvcmQgYWxpZ25lZC4gIEFkZGl0aW9uYWxseSwgaXQgaGFuZGxlcyBmYWlsdXJlcyBmb3IgYGFpcnFfaXZfYWxsb2NfYml0YCwgYGFpcnFfaXZfY3JlYXRlYCwgYW5kIGBrdm1fenBjaV9zZXRfYWlycWAuIFRoYXQmIzM5O3MgYSAqc2lnbmlmaWNhbnQqIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGggYSBsb3Qgb2YgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuCgpJIG5lZWQgdG8gZW5hYmxlIGBLVk1gLCBgVkZJT2AsIGBWRklPX1BDSWAsIGFuZCBgVkZJT19QQ0lfWkRFVl9LVk1gIGluIHRoZSBjb25maWcuIEFuZCBubywgYFMzOTBgIGlzIHRoZSBhcmNoaXRlY3R1cmUsIGl0IHdpbGwgYmUgcnVuIG9uIHMzOTB4LgoKTGV0JiMzOTtzIHZlcmlmeSB0aGF0IGZ1bmN0aW9uIG5hbWU6IGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgaW5kZWVkIGBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylgCgpBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucz8gTWF5YmUgYHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2VgPyBUaGF0IG9uZSBpcyBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNgLCBhbmQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGl0LiBTbywgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyBzdWZmaWNpZW50LgoKTm93LCBsZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJX1pERVZfS1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3MzOTBfcGNpX3pwY2lfb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7VkZJT19QQ0lfWkRFVl9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fczM5MF9wY2lfenBjaV9vcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gczM5MHggS1ZNIFBDSSBwYXNzdGhyb3VnaCAoelBDSSkgZHVyaW5nIEFJRiAoQWRhcHRlciBJbnRlcnJ1cHRpb24gRmFjaWxpdHkpIGVuYWJsZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBtZW1vcnkgcGlubmluZyBhbmQgaW50ZXJydXB0IHZlY3RvciBhbGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk1fUzM5MF9aUENJX09QIGlvY3RsLCBoYW5kbGVkIGJ5IGt2bV9zMzkwX3BjaV96cGNpX29wLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6MjYuNjA3OTM3Njc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NTQ5OTg5NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlZGSU9fUENJX1pERVZfS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3MzOTBfcGNpX3pwY2lfb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgaW4gczM5MHggS1ZNIFBDSSBwYXNzdGhyb3VnaCAoelBDSSkgZHVyaW5nIEFJRiAoQWRhcHRlciBJbnRlcnJ1cHRpb24gRmFjaWxpdHkpIGVuYWJsZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciBtZW1vcnkgcGlubmluZyBhbmQgaW50ZXJydXB0IHZlY3RvciBhbGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBLVk1fUzM5MF9aUENJX09QIGlvY3RsLCBoYW5kbGVkIGJ5IGt2bV9zMzkwX3BjaV96cGNpX29wLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NToyNi42MDkzMDg1ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODY5NjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFmZWEyY2VlNThhNGE5MGViZWNkZTlkM2I5MTcwMTZjZGQyYWYwNmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDM6NDU6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuYyBiL2FyY2gvczM5MC9rdm0vcGNpLmNcXG5pbmRleCA3MjBiYjU4Y2FiZTJlOS4uNDM5NGNlZmVmMjQyMmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wY2kuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcGNpLmNcXG5AQCAtMTkwLDQwICsxOTAsNjEgQEAgc3RhdGljIGludCBrdm1fenBjaV9jbGVhcl9haXJxKHN0cnVjdCB6cGNpX2RldiAqemRldilcXG4gXFx0cmV0dXJuIGNjID8gLUVJTyA6IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4tXFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XFxuK1xcdHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGt6ZGV2LVxcdTAwM2V1c2VyX2FjY291bnQ7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQgPSBremRldi1cXHUwMDNlbW1fYWNjb3VudDtcXG4gXFxuLVxcdGlmICh1c2VyKVxcbitcXHRpZiAodXNlcikge1xcbiBcXHRcXHRhdG9taWNfbG9uZ19zdWIobnJfcGFnZXMsIFxcdTAwMjZ1c2VyLVxcdTAwM2Vsb2NrZWRfdm0pO1xcbi1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0pXFxuLVxcdFxcdGF0b21pYzY0X3N1Yihucl9wYWdlcywgXFx1MDAyNmN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwaW5uZWRfdm0pO1xcbitcXHRcXHRmcmVlX3VpZCh1c2VyKTtcXG4rXFx0XFx0a3pkZXYtXFx1MDAzZXVzZXJfYWNjb3VudCA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtbV9hY2NvdW50KSB7XFxuK1xcdFxcdGF0b21pYzY0X3N1Yihucl9wYWdlcywgXFx1MDAyNm1tX2FjY291bnQtXFx1MDAzZXBpbm5lZF92bSk7XFxuK1xcdFxcdG1tZHJvcChtbV9hY2NvdW50KTtcXG4rXFx0XFx0a3pkZXYtXFx1MDAzZW1tX2FjY291bnQgPSBOVUxMO1xcbitcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XFxuK1xcdGludCByYyA9IDA7XFxuIFxcbiBcXHRwYWdlX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0Y3VyX3BhZ2VzID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dXNlci1cXHUwMDNlbG9ja2VkX3ZtKTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXdfcGFnZXMgPSBjdXJfcGFnZXMgKyBucl9wYWdlcztcXG4tXFx0XFx0aWYgKG5ld19wYWdlcyBcXHUwMDNlIHBhZ2VfbGltaXQpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRpZiAobmV3X3BhZ2VzIFxcdTAwM2UgcGFnZV9saW1pdCkge1xcbitcXHRcXHRcXHRyYyA9ICAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGcoXFx1MDAyNnVzZXItXFx1MDAzZWxvY2tlZF92bSwgXFx1MDAyNmN1cl9wYWdlcywgbmV3X3BhZ2VzKSk7XFxuIFxcbi1cXHRhdG9taWM2NF9hZGQobnJfcGFnZXMsIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGlubmVkX3ZtKTtcXG4rXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tKSB7XFxuK1xcdFxcdG1tZ3JhYihjdXJyZW50LVxcdTAwM2VtbSk7XFxuK1xcdFxcdGF0b21pYzY0X2FkZChucl9wYWdlcywgXFx1MDAyNmN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwaW5uZWRfdm0pO1xcbitcXHR9XFxuK1xcbitcXHRremRldi1cXHUwMDNldXNlcl9hY2NvdW50ID0gdXNlcjtcXG4rXFx0a3pkZXYtXFx1MDAzZW1tX2FjY291bnQgPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rb3V0OlxcbitcXHRmcmVlX3VpZCh1c2VyKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcdFxcdFxcdFxcdCAgIGJvb2wgYXNzaXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlc1sxXSwgKmFpYnZfcGFnZSwgKmFpc2JfcGFnZSA9IE5VTEw7XFxuLVxcdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4O1xcbitcXHR1bnNpZ25lZCBpbnQgbXNpX3ZlY3MsIGlkeCwgc2l6ZTtcXG4gXFx0c3RydWN0IHpwY2lfZ2FpdGUgKmdhaXRlO1xcbiBcXHR1bnNpZ25lZCBsb25nIGh2YSwgYml0O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuQEAgLTIzNyw2ICsyNTgsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxcbiBcXHRpZiAoemRldi1cXHUwMDNlZ2lzYSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdC8qIEFJRiBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgKi9cXG4rXFx0aWYgKHpkZXYtXFx1MDAzZWt6ZGV2LVxcdTAwM2VmaWIuZm10MC5haWJ2ICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0a3ZtID0gemRldi1cXHUwMDNla3pkZXYtXFx1MDAzZWt2bTtcXG4gXFx0bXNpX3ZlY3MgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZpYi1cXHUwMDNlZm10MC5ub2ksIHpkZXYtXFx1MDAzZW1heF9tc2kpO1xcbiBcXG5AQCAtMjQ2LDYgKzI3MSwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcdFxcdHJldHVybiBnaXNjO1xcbiBcXG4gXFx0LyogUmVwbGFjZSBBSUJWIGFkZHJlc3MgKi9cXG4rXFx0c2l6ZSA9IEJJVFNfVE9fTE9OR1MobXNpX3ZlY3MgKyBmaWItXFx1MDAzZWZtdDAuYWlidm8pICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xcbitcXHRucGFnZXMgPSBESVZfUk9VTkRfVVAoKGZpYi1cXHUwMDNlZm10MC5haWJ2IFxcdTAwMjYgflBBR0VfTUFTSykgKyBzaXplLCBQQUdFX1NJWkUpO1xcbitcXHQvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi9cXG4rXFx0aWYgKG5wYWdlcyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0cmMgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuIFxcdGh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItXFx1MDAzZWZtdDAuYWlidikpO1xcbiBcXHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sIHBhZ2VzKTtcXG5AQCAtMjYxLDYgKzI5NCwxMiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcbiBcXHQvKiBQaW4gdGhlIGd1ZXN0IEFJU0IgaWYgb25lIHdhcyBzcGVjaWZpZWQgKi9cXG4gXFx0aWYgKGZpYi1cXHUwMDNlZm10MC5zdW0gPT0gMSkge1xcbitcXHRcXHQvKiBBSVNCIG11c3QgYmUgZHdvcmQgYWxpZ25lZCAqL1xcbitcXHRcXHRpZiAoZmliLVxcdTAwM2VmbXQwLmFpc2IgXFx1MDAyNiAweDcpIHtcXG4rXFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHVucGluMTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuIFxcdFxcdGh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItXFx1MDAzZWZtdDAuYWlzYikpO1xcbiBcXHRcXHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuQEAgLTI3NSwyMCArMzE0LDI4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcXG4gXFx0fVxcbiBcXG4gXFx0LyogQWNjb3VudCBmb3IgcGlubmVkIHBhZ2VzLCByb2xsIGJhY2sgb24gZmFpbHVyZSAqL1xcbi1cXHRpZiAoYWNjb3VudF9tZW0ocGNvdW50KSlcXG4rXFx0cmMgPSBhY2NvdW50X21lbSh6ZGV2LVxcdTAwM2VremRldiwgcGNvdW50KTtcXG4rXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIHVucGluMjtcXG4gXFxuIFxcdC8qIEFJU0IgbXVzdCBiZSBhbGxvY2F0ZWQgYmVmb3JlIHdlIGNhbiBmaWxsIGluIEdBSVRFICovXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmFpZnQtXFx1MDAzZWFpZnRfbG9jayk7XFxuIFxcdGJpdCA9IGFpcnFfaXZfYWxsb2NfYml0KGFpZnQtXFx1MDAzZXNidik7XFxuLVxcdGlmIChiaXQgPT0gLTFVTClcXG4rXFx0aWYgKGJpdCA9PSAtMVVMKSB7XFxuK1xcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4gXFx0emRldi1cXHUwMDNlYWlzYiA9IGJpdDsgLyogc3RvcmUgdGhlIHN1bW1hcnkgYml0IG51bWJlciAqL1xcbiBcXHR6ZGV2LVxcdTAwM2VhaWJ2ID0gYWlycV9pdl9jcmVhdGUobXNpX3ZlY3MsIEFJUlFfSVZfREFUQSB8XFxuIFxcdFxcdFxcdFxcdCAgICBBSVJRX0lWX0JJVExPQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgQUlSUV9JVl9HVUVTVFZFQyxcXG4gXFx0XFx0XFx0XFx0ICAgIHBoeXNfdG9fdmlydChmaWItXFx1MDAzZWZtdDAuYWlidikpO1xcbiBcXG4rXFx0aWYgKCF6ZGV2LVxcdTAwM2VhaWJ2KSB7XFxuK1xcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX2Fpc2I7XFxuK1xcdH1cXG4rXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmFpZnQtXFx1MDAzZWdhaXRfbG9jayk7XFxuIFxcdGdhaXRlID0gYWlmdC1cXHUwMDNlZ2FpdCArIHpkZXYtXFx1MDAzZWFpc2I7XFxuIFxcbkBAIC0zMTEsMjEgKzM1OCwzOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuIFxcdGFpZnQtXFx1MDAzZWt6ZGV2W3pkZXYtXFx1MDAzZWFpc2JdID0gemRldi1cXHUwMDNla3pkZXY7XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2YWlmdC1cXHUwMDNlZ2FpdF9sb2NrKTtcXG4gXFxuLVxcdC8qIFVwZGF0ZSBndWVzdCBGSUIgZm9yIHJlLWlzc3VlICovXFxuLVxcdGZpYi1cXHUwMDNlZm10MC5haXNibyA9IHpkZXYtXFx1MDAzZWFpc2IgXFx1MDAyNiA2MztcXG4tXFx0ZmliLVxcdTAwM2VmbXQwLmFpc2IgPSB2aXJ0X3RvX3BoeXMoYWlmdC1cXHUwMDNlc2J2LVxcdTAwM2V2ZWN0b3IpICsgKHpkZXYtXFx1MDAzZWFpc2IgLyA2NCkgKiA4O1xcbi1cXHRmaWItXFx1MDAzZWZtdDAuaXNjID0gZ2lzYztcXG4tXFxuIFxcdC8qIFNhdmUgc29tZSBndWVzdCBmaWIgdmFsdWVzIGluIHRoZSBob3N0IGZvciBsYXRlciB1c2UgKi9cXG4tXFx0emRldi1cXHUwMDNla3pkZXYtXFx1MDAzZWZpYi5mbXQwLmlzYyA9IGZpYi1cXHUwMDNlZm10MC5pc2M7XFxuK1xcdHpkZXYtXFx1MDAzZWt6ZGV2LVxcdTAwM2VmaWIuZm10MC5pc2MgPSBnaXNjO1xcbiBcXHR6ZGV2LVxcdTAwM2VremRldi1cXHUwMDNlZmliLmZtdDAuYWlidiA9IGZpYi1cXHUwMDNlZm10MC5haWJ2O1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFpZnQtXFx1MDAzZWFpZnRfbG9jayk7XFxuIFxcbiBcXHQvKiBJc3N1ZSB0aGUgY2xwIHRvIHNldHVwIHRoZSBpcnEgbm93ICovXFxuIFxcdHJjID0ga3ZtX3pwY2lfc2V0X2FpcnEoemRldik7XFxuLVxcdHJldHVybiByYztcXG4rXFx0aWYgKCFyYykge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFpZnQtXFx1MDAzZWFpZnRfbG9jayk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RhcnQgY2xlYW51cCAqL1xcbitcXHR6ZGV2LVxcdTAwM2VremRldi1cXHUwMDNlZmliLmZtdDAuaXNjID0gMDtcXG4rXFx0emRldi1cXHUwMDNla3pkZXYtXFx1MDAzZWZpYi5mbXQwLmFpYnYgPSAwO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2YWlmdC1cXHUwMDNlZ2FpdF9sb2NrKTtcXG4rXFx0Z2FpdGUtXFx1MDAzZWNvdW50LS07XFxuK1xcdGdhaXRlLVxcdTAwM2VhaXNiID0gMDtcXG4rXFx0Z2FpdGUtXFx1MDAzZWdpc2MgPSAwO1xcbitcXHRnYWl0ZS1cXHUwMDNlYWlzYm8gPSAwO1xcbitcXHRnYWl0ZS1cXHUwMDNlZ2lzYSA9IDA7XFxuK1xcdGFpZnQtXFx1MDAzZWt6ZGV2W3pkZXYtXFx1MDAzZWFpc2JdID0gTlVMTDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZhaWZ0LVxcdTAwM2VnYWl0X2xvY2spO1xcbitcXG4rXFx0YWlycV9pdl9yZWxlYXNlKHpkZXYtXFx1MDAzZWFpYnYpO1xcbitcXHR6ZGV2LVxcdTAwM2VhaWJ2ID0gTlVMTDtcXG4rXFxuK2ZyZWVfYWlzYjpcXG4rXFx0YWlycV9pdl9mcmVlX2JpdChhaWZ0LVxcdTAwM2VzYnYsIHpkZXYtXFx1MDAzZWFpc2IpO1xcbitcXHR6ZGV2LVxcdTAwM2VhaXNiID0gMDtcXG4gdW5sb2NrOlxcbitcXHRpZiAocGNvdW50IFxcdTAwM2UgMClcXG4rXFx0XFx0dW5hY2NvdW50X21lbSh6ZGV2LVxcdTAwM2VremRldiwgcGNvdW50KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhaWZ0LVxcdTAwM2VhaWZ0X2xvY2spO1xcbiB1bnBpbjI6XFxuIFxcdGlmIChmaWItXFx1MDAzZWZtdDAuc3VtID09IDEpXFxuQEAgLTM5Niw3ICs0NjEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXFxuIFxcdFxcdHBjb3VudCsrO1xcbiBcXHR9XFxuIFxcdGlmIChwY291bnQgXFx1MDAzZSAwKVxcbi1cXHRcXHR1bmFjY291bnRfbWVtKHBjb3VudCk7XFxuK1xcdFxcdHVuYWNjb3VudF9tZW0oa3pkZXYsIHBjb3VudCk7XFxuIG91dDpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhaWZ0LVxcdTAwM2VhaWZ0X2xvY2spO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wY2kuaCBiL2FyY2gvczM5MC9rdm0vcGNpLmhcXG5pbmRleCBmZjA5NzJkZDVlNzFkYy4uZmRmOGM3YmY0ZWQwODIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wY2kuaFxcbisrKyBiL2FyY2gvczM5MC9rdm0vcGNpLmhcXG5AQCAtMjIsNiArMjIsOCBAQCBzdHJ1Y3Qga3ZtX3pkZXYge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuIFxcdHN0cnVjdCB6cGNpX2ZpYiBmaWI7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XFxuK1xcdHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcl9hY2NvdW50O1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9hY2NvdW50O1xcbiB9O1xcbiBcXG4gc3RydWN0IHpwY2lfZ2FpdGUge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NToyNy41MDg5NjE4OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzc2NDg5NDgwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiVkZJT19QQ0lfWkRFVl9LVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fczM5MF9wY2lfenBjaV9vcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBlcnJvciBoYW5kbGluZyBpbiBzMzkweCBLVk0gUENJIHBhc3N0aHJvdWdoICh6UENJKSBkdXJpbmcgQUlGIChBZGFwdGVyIEludGVycnVwdGlvbiBGYWNpbGl0eSkgZW5hYmxlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZXJyb3IgcGF0aHMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZm9yIG1lbW9yeSBwaW5uaW5nIGFuZCBpbnRlcnJ1cHQgdmVjdG9yIGFsbG9jYXRpb24uIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEtWTV9TMzkwX1pQQ0lfT1AgaW9jdGwsIGhhbmRsZWQgYnkga3ZtX3MzOTBfcGNpX3pwY2lfb3AuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmZWEyY2VlNThhNGE5MGViZWNkZTlkM2I5MTcwMTZjZGQyYWYwNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMzo0NToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcGNpLmMgYi9hcmNoL3MzOTAva3ZtL3BjaS5jXG5pbmRleCA3MjBiYjU4Y2FiZTJlOS4uNDM5NGNlZmVmMjQyMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3BjaS5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3BjaS5jXG5AQCAtMTkwLDQwICsxOTAsNjEgQEAgc3RhdGljIGludCBrdm1fenBjaV9jbGVhcl9haXJxKHN0cnVjdCB6cGNpX2RldiAqemRldilcbiBcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5hY2NvdW50X21lbSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuLVx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ2V0X3VpZChjdXJyZW50X3VzZXIoKSk7XG4rXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBremRldi1cdTAwM2V1c2VyX2FjY291bnQ7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9hY2NvdW50ID0ga3pkZXYtXHUwMDNlbW1fYWNjb3VudDtcbiBcbi1cdGlmICh1c2VyKVxuK1x0aWYgKHVzZXIpIHtcbiBcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3BhZ2VzLCBcdTAwMjZ1c2VyLVx1MDAzZWxvY2tlZF92bSk7XG4tXHRpZiAoY3VycmVudC1cdTAwM2VtbSlcbi1cdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4rXHRcdGZyZWVfdWlkKHVzZXIpO1xuK1x0XHRremRldi1cdTAwM2V1c2VyX2FjY291bnQgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKG1tX2FjY291bnQpIHtcbitcdFx0YXRvbWljNjRfc3ViKG5yX3BhZ2VzLCBcdTAwMjZtbV9hY2NvdW50LVx1MDAzZXBpbm5lZF92bSk7XG4rXHRcdG1tZHJvcChtbV9hY2NvdW50KTtcbitcdFx0a3pkZXYtXHUwMDNlbW1fYWNjb3VudCA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4rc3RhdGljIGlubGluZSBpbnQgYWNjb3VudF9tZW0oc3RydWN0IGt2bV96ZGV2ICpremRldiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBnZXRfdWlkKGN1cnJlbnRfdXNlcigpKTtcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XG4rXHRpbnQgcmMgPSAwO1xuIFxuIFx0cGFnZV9saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRjdXJfcGFnZXMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnVzZXItXHUwMDNlbG9ja2VkX3ZtKTtcbiBcdGRvIHtcbiBcdFx0bmV3X3BhZ2VzID0gY3VyX3BhZ2VzICsgbnJfcGFnZXM7XG4tXHRcdGlmIChuZXdfcGFnZXMgXHUwMDNlIHBhZ2VfbGltaXQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGlmIChuZXdfcGFnZXMgXHUwMDNlIHBhZ2VfbGltaXQpIHtcbitcdFx0XHRyYyA9ICAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGcoXHUwMDI2dXNlci1cdTAwM2Vsb2NrZWRfdm0sIFx1MDAyNmN1cl9wYWdlcywgbmV3X3BhZ2VzKSk7XG4gXG4tXHRhdG9taWM2NF9hZGQobnJfcGFnZXMsIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGlubmVkX3ZtKTtcbitcdGlmIChjdXJyZW50LVx1MDAzZW1tKSB7XG4rXHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbitcdFx0YXRvbWljNjRfYWRkKG5yX3BhZ2VzLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBpbm5lZF92bSk7XG4rXHR9XG4rXG4rXHRremRldi1cdTAwM2V1c2VyX2FjY291bnQgPSB1c2VyO1xuK1x0a3pkZXYtXHUwMDNlbW1fYWNjb3VudCA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXQ6XG4rXHRmcmVlX3VpZCh1c2VyKTtcbitcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0XHRcdFx0ICAgYm9vbCBhc3Npc3QpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2VzWzFdLCAqYWlidl9wYWdlLCAqYWlzYl9wYWdlID0gTlVMTDtcbi1cdHVuc2lnbmVkIGludCBtc2lfdmVjcywgaWR4O1xuK1x0dW5zaWduZWQgaW50IG1zaV92ZWNzLCBpZHgsIHNpemU7XG4gXHRzdHJ1Y3QgenBjaV9nYWl0ZSAqZ2FpdGU7XG4gXHR1bnNpZ25lZCBsb25nIGh2YSwgYml0O1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuQEAgLTIzNyw2ICsyNTgsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0aWYgKHpkZXYtXHUwMDNlZ2lzYSA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIEFJRiBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgKi9cbitcdGlmICh6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRrdm0gPSB6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWt2bTtcbiBcdG1zaV92ZWNzID0gbWluX3QodW5zaWduZWQgaW50LCBmaWItXHUwMDNlZm10MC5ub2ksIHpkZXYtXHUwMDNlbWF4X21zaSk7XG4gXG5AQCAtMjQ2LDYgKzI3MSwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXG4gXHRcdHJldHVybiBnaXNjO1xuIFxuIFx0LyogUmVwbGFjZSBBSUJWIGFkZHJlc3MgKi9cbitcdHNpemUgPSBCSVRTX1RPX0xPTkdTKG1zaV92ZWNzICsgZmliLVx1MDAzZWZtdDAuYWlidm8pICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuK1x0bnBhZ2VzID0gRElWX1JPVU5EX1VQKChmaWItXHUwMDNlZm10MC5haWJ2IFx1MDAyNiB+UEFHRV9NQVNLKSArIHNpemUsIFBBR0VfU0laRSk7XG4rXHQvKiBBSUJWIGNhbm5vdCBzcGFuIG1vcmUgdGhhbiAxIHBhZ2UgKi9cbitcdGlmIChucGFnZXMgXHUwMDNlIDEpIHtcbitcdFx0cmMgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcdGh2YSA9IGdmbl90b19odmEoa3ZtLCBncGFfdG9fZ2ZuKChncGFfdClmaWItXHUwMDNlZm10MC5haWJ2KSk7XG4gXHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sIHBhZ2VzKTtcbkBAIC0yNjEsNiArMjk0LDEyIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBzdHJ1Y3QgenBjaV9maWIgKmZpYixcbiBcbiBcdC8qIFBpbiB0aGUgZ3Vlc3QgQUlTQiBpZiBvbmUgd2FzIHNwZWNpZmllZCAqL1xuIFx0aWYgKGZpYi1cdTAwM2VmbXQwLnN1bSA9PSAxKSB7XG4rXHRcdC8qIEFJU0IgbXVzdCBiZSBkd29yZCBhbGlnbmVkICovXG4rXHRcdGlmIChmaWItXHUwMDNlZm10MC5haXNiIFx1MDAyNiAweDcpIHtcbitcdFx0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bnBpbjE7XG4rXHRcdH1cbitcbiBcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFx0XHRodmEgPSBnZm5fdG9faHZhKGt2bSwgZ3BhX3RvX2dmbigoZ3BhX3QpZmliLVx1MDAzZWZtdDAuYWlzYikpO1xuIFx0XHRucGFnZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGh2YSwgMSwgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG5AQCAtMjc1LDIwICszMTQsMjggQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0fVxuIFxuIFx0LyogQWNjb3VudCBmb3IgcGlubmVkIHBhZ2VzLCByb2xsIGJhY2sgb24gZmFpbHVyZSAqL1xuLVx0aWYgKGFjY291bnRfbWVtKHBjb3VudCkpXG4rXHRyYyA9IGFjY291bnRfbWVtKHpkZXYtXHUwMDNla3pkZXYsIHBjb3VudCk7XG4rXHRpZiAocmMpXG4gXHRcdGdvdG8gdW5waW4yO1xuIFxuIFx0LyogQUlTQiBtdXN0IGJlIGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIGZpbGwgaW4gR0FJVEUgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIFx0Yml0ID0gYWlycV9pdl9hbGxvY19iaXQoYWlmdC1cdTAwM2VzYnYpO1xuLVx0aWYgKGJpdCA9PSAtMVVMKVxuK1x0aWYgKGJpdCA9PSAtMVVMKSB7XG4rXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXHR6ZGV2LVx1MDAzZWFpc2IgPSBiaXQ7IC8qIHN0b3JlIHRoZSBzdW1tYXJ5IGJpdCBudW1iZXIgKi9cbiBcdHpkZXYtXHUwMDNlYWlidiA9IGFpcnFfaXZfY3JlYXRlKG1zaV92ZWNzLCBBSVJRX0lWX0RBVEEgfFxuIFx0XHRcdFx0ICAgIEFJUlFfSVZfQklUTE9DSyB8XG4gXHRcdFx0XHQgICAgQUlSUV9JVl9HVUVTVFZFQyxcbiBcdFx0XHRcdCAgICBwaHlzX3RvX3ZpcnQoZmliLVx1MDAzZWZtdDAuYWlidikpO1xuIFxuK1x0aWYgKCF6ZGV2LVx1MDAzZWFpYnYpIHtcbitcdFx0cmMgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGZyZWVfYWlzYjtcbitcdH1cbitcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2YWlmdC1cdTAwM2VnYWl0X2xvY2spO1xuIFx0Z2FpdGUgPSBhaWZ0LVx1MDAzZWdhaXQgKyB6ZGV2LVx1MDAzZWFpc2I7XG4gXG5AQCAtMzExLDIxICszNTgsMzkgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIHN0cnVjdCB6cGNpX2ZpYiAqZmliLFxuIFx0YWlmdC1cdTAwM2VremRldlt6ZGV2LVx1MDAzZWFpc2JdID0gemRldi1cdTAwM2VremRldjtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZhaWZ0LVx1MDAzZWdhaXRfbG9jayk7XG4gXG4tXHQvKiBVcGRhdGUgZ3Vlc3QgRklCIGZvciByZS1pc3N1ZSAqL1xuLVx0ZmliLVx1MDAzZWZtdDAuYWlzYm8gPSB6ZGV2LVx1MDAzZWFpc2IgXHUwMDI2IDYzO1xuLVx0ZmliLVx1MDAzZWZtdDAuYWlzYiA9IHZpcnRfdG9fcGh5cyhhaWZ0LVx1MDAzZXNidi1cdTAwM2V2ZWN0b3IpICsgKHpkZXYtXHUwMDNlYWlzYiAvIDY0KSAqIDg7XG4tXHRmaWItXHUwMDNlZm10MC5pc2MgPSBnaXNjO1xuLVxuIFx0LyogU2F2ZSBzb21lIGd1ZXN0IGZpYiB2YWx1ZXMgaW4gdGhlIGhvc3QgZm9yIGxhdGVyIHVzZSAqL1xuLVx0emRldi1cdTAwM2VremRldi1cdTAwM2VmaWIuZm10MC5pc2MgPSBmaWItXHUwMDNlZm10MC5pc2M7XG4rXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmlzYyA9IGdpc2M7XG4gXHR6ZGV2LVx1MDAzZWt6ZGV2LVx1MDAzZWZpYi5mbXQwLmFpYnYgPSBmaWItXHUwMDNlZm10MC5haWJ2O1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFpZnQtXHUwMDNlYWlmdF9sb2NrKTtcbiBcbiBcdC8qIElzc3VlIHRoZSBjbHAgdG8gc2V0dXAgdGhlIGlycSBub3cgKi9cbiBcdHJjID0ga3ZtX3pwY2lfc2V0X2FpcnEoemRldik7XG4tXHRyZXR1cm4gcmM7XG4rXHRpZiAoIXJjKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZhaWZ0LVx1MDAzZWFpZnRfbG9jayk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdC8qIFN0YXJ0IGNsZWFudXAgKi9cbitcdHpkZXYtXHUwMDNla3pkZXYtXHUwMDNlZmliLmZtdDAuaXNjID0gMDtcbitcdHpkZXYtXHUwMDNla3pkZXYtXHUwMDNlZmliLmZtdDAuYWlidiA9IDA7XG4gXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmFpZnQtXHUwMDNlZ2FpdF9sb2NrKTtcbitcdGdhaXRlLVx1MDAzZWNvdW50LS07XG4rXHRnYWl0ZS1cdTAwM2VhaXNiID0gMDtcbitcdGdhaXRlLVx1MDAzZWdpc2MgPSAwO1xuK1x0Z2FpdGUtXHUwMDNlYWlzYm8gPSAwO1xuK1x0Z2FpdGUtXHUwMDNlZ2lzYSA9IDA7XG4rXHRhaWZ0LVx1MDAzZWt6ZGV2W3pkZXYtXHUwMDNlYWlzYl0gPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmFpZnQtXHUwMDNlZ2FpdF9sb2NrKTtcbitcbitcdGFpcnFfaXZfcmVsZWFzZSh6ZGV2LVx1MDAzZWFpYnYpO1xuK1x0emRldi1cdTAwM2VhaWJ2ID0gTlVMTDtcbitcbitmcmVlX2Fpc2I6XG4rXHRhaXJxX2l2X2ZyZWVfYml0KGFpZnQtXHUwMDNlc2J2LCB6ZGV2LVx1MDAzZWFpc2IpO1xuK1x0emRldi1cdTAwM2VhaXNiID0gMDtcbiB1bmxvY2s6XG4rXHRpZiAocGNvdW50IFx1MDAzZSAwKVxuK1x0XHR1bmFjY291bnRfbWVtKHpkZXYtXHUwMDNla3pkZXYsIHBjb3VudCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIHVucGluMjpcbiBcdGlmIChmaWItXHUwMDNlZm10MC5zdW0gPT0gMSlcbkBAIC0zOTYsNyArNDYxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoc3RydWN0IHpwY2lfZGV2ICp6ZGV2LCBib29sIGZvcmNlKVxuIFx0XHRwY291bnQrKztcbiBcdH1cbiBcdGlmIChwY291bnQgXHUwMDNlIDApXG4tXHRcdHVuYWNjb3VudF9tZW0ocGNvdW50KTtcbitcdFx0dW5hY2NvdW50X21lbShremRldiwgcGNvdW50KTtcbiBvdXQ6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWlmdC1cdTAwM2VhaWZ0X2xvY2spO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcGNpLmggYi9hcmNoL3MzOTAva3ZtL3BjaS5oXG5pbmRleCBmZjA5NzJkZDVlNzFkYy4uZmRmOGM3YmY0ZWQwODIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3BjaS5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL3BjaS5oXG5AQCAtMjIsNiArMjIsOCBAQCBzdHJ1Y3Qga3ZtX3pkZXYge1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0c3RydWN0IHpwY2lfZmliIGZpYjtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4rXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXJfYWNjb3VudDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2FjY291bnQ7XG4gfTtcbiBcbiBzdHJ1Y3QgenBjaV9nYWl0ZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NToyNy41MDg5NjM4NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUwNTIzMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBzMzkwIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgYGFyY2gvczM5MC9rdm0vcGNpLmNgIGFuZCBgYXJjaC9zMzkwL2t2bS9wY2kuaGAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGF0IGB1bmFjY291bnRfbWVtYCBhbmQgYGFjY291bnRfbWVtYCBhcmUgbm93IHRha2luZyBhIGBzdHJ1Y3Qga3ZtX3pkZXYgKmt6ZGV2YCBhbmQgdXNpbmcgdGhhdCB0byBtYW5hZ2UgYHVzZXJfYWNjb3VudGAgYW5kIGBtbV9hY2NvdW50YCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZ2xvYmFsIHZhcmlhYmxlcyBsaWtlIGBjdXJyZW50X3VzZXIoKWAgYW5kIGBjdXJyZW50LVx1MDAzZW1tYC4gVGhhdCdzIGEgZ29vZCBzdGVwIHRvd2FyZHMgaW1wcm92ZWQgaXNvbGF0aW9uLiBQbHVzLCBJIHNlZSBzb21lIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBpbiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCB3aGljaCBpcyBhbHdheXMgYSBwbHVzLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlmIGl0J3Mgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nLiBMZXQncyBzZWUuLi4gaXQncyBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFJpZ2h0LCBzbyBLVk0gb24gczM5MHggaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydCBvZiBzMzkweCB2aXJ0dWFsaXphdGlvbiwgc28gaXQncyB2ZXJ5IGxpa2VseSB0byBiZSByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIFFFTVUgc2V0dXBzLiBOb3csIHRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgZXZlbiBzdXBwb3J0cyBmdXp6aW5nIHMzOTB4IEtWTS4gVGhhbmtmdWxseSwgdGhlIGFuc3dlciBpcyB5ZXMsIHN5emthbGxlciBkb2VzIHN1cHBvcnQgczM5MHgsIGFuZCBpdCBkb2VzIGZ1enogS1ZNLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5jb3VyYWdpbmcuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGxvb2tpbmcgYXQgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCwgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAsIHBsdXMgdGhlIGFmb3JlbWVudGlvbmVkIGBhY2NvdW50X21lbWAgYW5kIGB1bmFjY291bnRfbWVtYC4gT2theSwgbm93IEkgd2FudCB0byBmaW5kIHdoZXJlIGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAgaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9wY2kuY2AgdG8gc2VlIGhvdyBpdCdzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ1OjMzLjg1OTQ5NjYwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI2MTM2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3BjaV9haWZfZW5hYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcGNpLmM9MjExPXN0YXRpYyBpbmxpbmUgaW50IGFjY291bnRfbWVtKHN0cnVjdCBrdm1femRldiAqa3pkZXYsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTI0Mi1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjI0MzpzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy0yNDQtXFx0XFx0XFx0XFx0ICAgYm9vbCBhc3Npc3QpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY2MT1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oc3RydWN0IHpwY2lfZGV2ICp6ZGV2LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODAtXFx0aG9zdGZsYWcgPSAhKGFyZ3MtXFx1MDAzZXUucmVnX2Flbi5mbGFncyBcXHUwMDI2IEtWTV9TMzkwX1pQQ0lPUF9SRUdBRU5fSE9TVCk7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2ODE6XFx0cmV0dXJuIGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHpkZXYsIFxcdTAwMjZmaWIsIGhvc3RmbGFnKTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ1OjM2Ljk4NTYzNzk1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDkxMTUzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgQWN0aXZhdGlvbiBvZiB0aGUgQUlGIEVuYWJsZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGluIHRoZSBLVk0vczM5MCBQQ0kgY29kZS4gVGhlIGZpcnN0IGNsdWUgSSBoYXZlIGlzIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbmAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGFwcHJvYWNoOiBmaW5kIHRoZSBjYWxsZXIsIHRoZW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gZGlnIGludG8gYGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW5gLiBJJ2xsIHdhbnQgdG8gc2VlIHdoZXJlICppdCogZ2V0cyBjYWxsZWQgZnJvbSwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBldmVudHMgb3IgY29uZGl0aW9ucyB0aGF0IGV2ZW50dWFsbHkgbGVhZCB0byB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgQUlGIGVuYWJsZSBmdW5jdGlvbi4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBtYXAgb3V0IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgQUlGIGVuYWJsZSBtZWNoYW5pc20gYW5kIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBaUENJIHJlZ2lzdHJhdGlvbiBhbmQgZXZlbnQgbm90aWZpY2F0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NTo0MC43OTQ3NTczMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODU2ODg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcGNpLmM9NjQ0PXN0YXRpYyBzdHJ1Y3QgenBjaV9kZXYgKmdldF96ZGV2X2Zyb21fa3ZtX2J5X2ZoKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGZoKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02NjAtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2NjE6c3RhdGljIGludCBrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuKHN0cnVjdCB6cGNpX2RldiAqemRldixcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY2Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz02ODQ9aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTcxMy1cXHRcXHR9XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3MTQ6XFx0XFx0ciA9IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oemRldiwgYXJncyk7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ1OjQzLjIyMzMzMjM1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTE5MTA3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBrdm1fczM5MF9wY2lfenBjaV9vcGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCdzIGhpdHRpbmcgbWUgaXMgdGhhdCBmdW5jdGlvbiBuYW1lOiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgS1ZNLCBzbyB0aGlzIGlzIHZpcnR1YWxpemF0aW9uIG9uIGFuIHMzOTAgYXJjaGl0ZWN0dXJlLiBcIlBDSSxcIiBcInpwY2lcIiBpbXBsaWVzIGludGVyYWN0aW9uIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0sIGxpa2VseSBhIFpQQ0kgZGV2aWNlLCB3aGljaCBpcyBob3cgd2UgaGFuZGxlIFBDSSBkZXZpY2VzIGluIHRoZSBzMzkwIHdvcmxkLiBcIk9wXCIgc3VnZ2VzdHMgc29tZSBraW5kIG9mIG9wZXJhdGlvbiBvciBmdW5jdGlvbi5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgKndoZXJlKiBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoYXQgY2FsbCBzaXRlIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgS1ZNIGh5cGVyY2FsbD8gSXMgaXQgd2l0aGluIHRoZSBndWVzdC1zaWRlIGVtdWxhdGlvbiBvZiB0aGUgZGV2aWNlLCBvciBpcyBpdCBvbiB0aGUgaG9zdCBzaWRlLCBtYW5hZ2luZyB0aGUgdW5kZXJseWluZyByZXNvdXJjZXM/IFRoZSBjb250ZXh0IGlzIGNyaXRpY2FsLlxuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZmluZCBpdHMgY2FsbGVycy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3RydWN0dXJlcyBpbnRlcmFjdCB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIGRldGVybWluZSB3aGljaCBldmVudCBpbml0aWF0ZXMgaXQuIElzIGl0IGludGVycnVwdCByZWxhdGVkPyBJcyBpdCB0cmlnZ2VyZWQgYnkgTU1JTz8gSXMgaXQgYSByZXN1bHQgb2Ygc29tZSBLVk0gb3BlcmF0aW9uIHJlbGF0ZWQgdG8gWlBDSSBjb25maWd1cmF0aW9uPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZnVuIGxpdHRsZSBqb3VybmV5LiBJIGJldCB0aGVyZSBpcyBzb21lIGltcG9ydGFudCBjb250cm9sIG92ZXIgWlBDSSBkZXZpY2Ugd2l0aGluIHRoZSBLVk0vczM5MCBzZXR1cCB0aGF0IG5lZWRzIG15IGZ1bGwgYW5kIGltbWVkaWF0ZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NTo0Ny4xMzUyNDU2MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNDcxMjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wY2lfenBjaV9vcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNT1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5Mi1cXHRcXHR9XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwOTM6XFx0XFx0ciA9IGt2bV9zMzkwX3BjaV96cGNpX29wKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDk0LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz02NjE9c3RhdGljIGludCBrdm1fczM5MF9wY2lfenBjaV9yZWdfYWVuKHN0cnVjdCB6cGNpX2RldiAqemRldixcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjgzLVxcbmFyY2gvczM5MC9rdm0vcGNpLmM6Njg0OmludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjg1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmg9NjE9dm9pZCBrdm1fczM5MF9wY2lfY2xlYXJfbGlzdChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjItXFxuYXJjaC9zMzkwL2t2bS9wY2kuaDo2MzppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncyk7XFxuYXJjaC9zMzkwL2t2bS9wY2kuaC02NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6NTEuNzU5OTY2NjM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NjYxMDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBLVk1fUzM5MF9aUENJX09QKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgYSBwcm9taXNpbmcgbGVhZCBoZXJlLiBUaGlzIGBLVk1fUzM5MF9aUENJX09QYCBpb2N0bCwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgc2NyZWFtcyBcImNvcmUgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25hbGl0eVwiIHRvIG1lLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGFuZCBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi4gVGhlc2UgbG93LWxldmVsIGludGVyZmFjZXMgYXJlIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBtb3N0IGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWdzIGluIHRoZSBoeXBlcnZpc29yLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hlbiBgYXJjaC9zMzkwL2t2bS9wY2kuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4gTGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBidWlsZCBmbGFncy4gS25vd2luZyB0aGUgYnVpbGQgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gY29uc3RydWN0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMgYW5kIG1pbmltaXppbmcgbm9pc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NTo1NS41MTY1Nzk3ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQ2MjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEyPWt2bS15ICs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTEzLVxcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTQ6a3ZtLSQoQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNKSArPSBwY2kub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6NTUuNjM0MDUxMTYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzExNzE2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlZGSU8tUENJIFpERVYgS1ZNIEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgKnRoYXQncyogd2hhdCBJIG5lZWQuIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBpcyB0aGUgY3J1Y2lhbCBlbGVtZW50IGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgZXhhY3RseSB3aGF0IHRoYXQgZmxhZyBlbmFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIFZGSU8gYW5kIEtWTSBsYW5kc2NhcGUuIElzIGl0IGNvcnJlY3RseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBzZXR1cD8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBwYXRjaGVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhhdCBvcHRpb24gY29udHJvbHMgYW5kIGlmIGl0J3MgdGhlIHNwZWNpZmljIHRoaW5nIHRvIHJlc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuIExldOKAmXMgZ2V0IHRvIHRoZSByb290IG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDU6NTguNTY1MjI1MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjM3NDgzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MDEuNTI4OTc5Nzg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzODMzNjc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byB0aGUgVkZJTyBLY29uZmlnIGZvciBVbmRlcnN0YW5kaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSA0NywgYXMgdGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBjb250cm9sbGVkIGhlcmUgZm9yIHRoZSBWRklPLVBDSSBkcml2ZXIuIElzIGl0IHRoZSBmZWF0dXJlIGZsYWdzLCBwbGF0Zm9ybSBzdXBwb3J0IG9yIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gcmVtZW1iZXI/IExldCdzIHJlZnJlc2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjowMy45MTIzNTA5NDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgYXNzaWdubWVudCB0byB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBpbmNsdWRlcyBleHBvc2luZyBhbiBJR0RcXG4gIDQxOlxcdFxcdCAgc3BlY2lmaWMgZmlybXdhcmUgdGFibGUgYW5kIHJlYWQtb25seSBjb3BpZXMgb2YgdGhlIGhvc3QgYnJpZGdlXFxuICA0MjpcXHRcXHQgIGFuZCBMUEMgYnJpZGdlIGNvbmZpZyBzcGFjZS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ICBUbyBlbmFibGUgSW50ZWwgSUdEIGFzc2lnbm1lbnQgdGhyb3VnaCB2ZmlvLXBjaSwgc2F5IFkuXFxuICA0NTpcXHRlbmRpZlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gUzM5MCBcXHUwMDI2XFx1MDAyNiBLVk1cXG4gIDUwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNTE6XFx0XFx0aGVscFxcbiAgNTI6XFx0XFx0ICBTdXBwb3J0IHMzOTB4LXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGVuaGFuY2VtZW50c1xcbiAgNTM6XFx0XFx0ICB0byBLVk0gcGFzc3Rocm91Z2ggY2FwYWJpbGl0aWVzLCBzdWNoIGFzIGludGVycHJldGl2ZSBleGVjdXRpb24gb2ZcXG4gIDU0OlxcdFxcdCAgelBDSSBpbnN0cnVjdGlvbnMuXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gZW5hYmxlIHMzOTB4IEtWTSB2ZmlvLXBjaSBleHRlbnNpb25zLCBzYXkgWS5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbiAgNTk6XFx0XFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MDMuOTEyNDQyNjQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTY3MDUxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIGJvaWxzIGRvd24gdG8gaG93IHRoaW5ncyBhcmUgY29uZmlndXJlZCBmb3IgYFMzOTBgIGFuZCBgS1ZNYC4gUmlnaHQsIHNvIHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCwgYENPTkZJR19LVk1gLCBhbmQgYENPTkZJR19TMzkwYCDigJMgdGhhdCdzIHRoZSBhcmNoaXRlY3R1cmUuIEFoLCBidXQgd2FpdCwgYENPTkZJR19WRklPX1BDSV9aREVWX0tWTWAgKmRlZmF1bHRzKiB0byAneScgaWYgYm90aCBgUzM5MGAgYW5kIGBLVk1gIGFyZSBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICpvdGhlciogY3J1Y2lhbCBjb25maWd1cmF0aW9ucz8gSG1tbSwgZG9lcyBpdCBuZWVkIGBDT05GSUdfVkZJT19QQ0lgIGFzIHdlbGw/IExldCdzIHZlcmlmeSB0aGF0LiBBbmQsIGhhbmcgb24sIHRoaXMgYFZGSU9fUENJX1pERVZfS1ZNYCBzZXR0aW5nIGlzIGRlZmluZWQsIGluc2lkZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgc2l0cyB3aXRoaW4gYW4gYGlmIFZGSU9fUENJYCBibG9jaywgb3IgaWYgaXQncyBpbmRlcGVuZGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjA3LjkwOTE1MTI1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFZGSU9fUENJX0NPUkVcXG4gICA2OlxcdFxcdHRyaXN0YXRlXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19WSVJRRkRcXG4gICA4OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFZGSU9fUENJX0lOVFhcXG4gIDExOlxcdFxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVkZJT19QQ0lcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuICAxNjpcXHRcXHRzZWxlY3QgVkZJT19QQ0lfQ09SRVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgZ2VuZXJpYyBQQ0kgVkZJTyBidXMgZHJpdmVyIHdoaWNoIGNhbiBjb25uZWN0IGFueVxcbiAgMTk6XFx0XFx0ICBQQ0kgZGV2aWNlIHRvIHRoZSBWRklPIGZyYW1ld29yay5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRpZiBWRklPX1BDSVxcbiAgMjQ6XFx0Y29uZmlnIFZGSU9fUENJX1ZHQVxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1xcXCJcXG4gIDI2OlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2IFZHQV9BUkJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXFxuICAyOTpcXHRcXHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcXG4gIDMwOlxcdFxcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBWRklPX1BDSV9JR0RcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gWDg2XFxuICAzNzpcXHRcXHRkZWZhdWx0IHlcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgU3VwcG9ydCBmb3IgSW50ZWwgSUdEIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gZW5hYmxlIGRpcmVjdFxcbiAgNDA6XFx0XFx0ICBhc3NpZ25tZW50IHRvIHZpcnR1YWwgbWFjaGluZXMuICBUaGlzIGluY2x1ZGVzIGV4cG9zaW5nIGFuIElHRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjowNy45MDkyNjI3MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMjY4NTIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYGlmIFZGSU9fUENJYCBjbG9zZXMgYXQgbGluZSA0NS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYFZGSU9fUENJX1pERVZfS1ZNYC4gSXQgbG9va3MgbGlrZSBpdCAqaXNuJ3QqIG5lc3RlZCB3aXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0IGRvZXNuJ3QgZGVwZW5kIG9uIGBWRklPX1BDSWAsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQgbG9va3MgbGlrZSBpdHMgZGVwZW5kZW5jaWVzIGFyZSBgUzM5MCBcdTAwMjZcdTAwMjYgS1ZNYCwgd2hpY2ggaXMgZmluZSwgYnV0IEkgc3VzcGVjdCB0aGVyZSBjb3VsZCBiZSBtb3JlIHRvIGl0LiBEb2VzIGl0IGRlcGVuZCBvbiB0aGUgYnJvYWRlciBgVkZJT2AgY29uZmlndXJhdGlvbiBvcHRpb24/IFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvdmZpby9gLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlciBmb3IgdGhlIGRlcGVuZGVuY3kgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjExLjAxMTk1MTE0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgVkZJT1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcXG4gICA2OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXFxuICAgODpcXHRcXHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxcbiAgIDk6XFx0XFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxcbiAgMTI6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgVkZJT1xcbiAgMTc6XFx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgXFx1MDAyNlxcdTAwMjYgIVNQQVBSX1RDRV9JT01NVVxcbiAgMjA6XFx0XFx0ZGVmYXVsdCAhVkZJT19HUk9VUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjoxMS4wMTIwNjM0ODFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMDg1ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqVkZJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBpcyBvbmx5IGluY2x1ZGVkIHdoZW4gYFZGSU9gIGl0c2VsZiBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBzb3VyY2luZyBoaWVyYXJjaHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGVyZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBpcyBpbmNsdWRlZC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIGBkcml2ZXJzL3ZmaW8vTWFrZWZpbGVgIG9yIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4cGxpY2l0IGluY2x1c2lvbiBydWxlcy4gS25vd2luZyB0aGUgYnVpbGQgc3lzdGVtLCBpdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgVkZJTyBkaXJlY3RvcnkgaGFzIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCwgYnV0IHRoZSBNYWtlZmlsZSB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gZ28gaWYgSSBuZWVkZWQgdG8ga25vdyB3aGF0IGNvbXBvbmVudHMgYXJlIGdldHRpbmcgbGlua2VkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MTQuMjEyOTI1NTE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkyMTM4NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXFxcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vS2NvbmZpZz04Mz1jb25maWcgVkZJT19ERUJVR0ZTXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo5Mzpzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05NC1zb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjoxNy4zMDUwNzMyNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNzg0MzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgVkZJTyBDb25kaXRpb25hbCoqXG5cblJpZ2h0LCBzbyBJJ20gcHJldHR5IHN1cmUgdGhhdCBwaWVjZSBvZiBjb2RlIGlzIG5lc3RsZWQgd2l0aGluIGFuIGBpZiBWRklPYCBibG9jay4uLiBidXQgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGRldmlsJ3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggdGhlc2UgdGhpbmdzLCBhbmQgYSBtaXNwbGFjZWQgY29uZGl0aW9uIGNhbiB3cmVhayBoYXZvYy4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlICpleGFjdCogbG9jYXRpb24gd2hlcmUgdGhhdCBgaWYgVkZJT2Agc3RhdGVtZW50IHRlcm1pbmF0ZXMuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBsb2dpYyBkZXBlbmRpbmcgb24gdGhhdCBjb25kaXRpb24gaXMgcHJvcGVybHkgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGF0IFZGSU8gYmxvY2suIE9rYXksIGxldCBtZSBmb2xsb3cgdGhlIGJyYWNrZXRzIGFuZCBzZWUgd2hlcmUgdGhlIFwiZW5kIGlmXCIgc3RhdGVtZW50IGlzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIG90aGVyd2lzZSwgdGhlcmUgY291bGQgYmUgYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgcmVzdWx0cyBkb3duc3RyZWFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjIxLjUxMjkyMjgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxMTczMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWc9NTc9Y29uZmlnIFZGSU9fSU9NTVVfU1BBUFJfVENFXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02MC1cXHRkZWZhdWx0IFZGSU9cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2MTplbmRpZlxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYyLVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9OTc9c291cmNlIFxcXCJkcml2ZXJzL3ZmaW8vY2R4L0tjb25maWdcXFwiXFxuZHJpdmVycy92ZmlvL0tjb25maWc6OTg6ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy05OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MjEuNjUzMDQ4NTc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNjQ3NTA5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0vVkZJTyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCwgYGVuZGlmYCBpcyBhdCBsaW5lIDk4LCBjb25maXJtaW5nIGl0J3Mgd2l0aGluIHRoZSBgaWYgVkZJT2AgYmxvY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gvczM5MC9rdm0vcGNpLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGZpbGUgZXZlbiBnZXQgYnVpbHQgd2hlbiBgVkZJT19QQ0lfWkRFVl9LVk1gIGlzIGVuYWJsZWQ/IFRpbWUgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAuIEFoLCB5ZXMsIGBrdm0tJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICs9IHBjaS5vYCBjbGVhcmx5IHNob3dzIHRoYXQgaXQgaXMuIFNvLCBgVkZJT19QQ0lfWkRFVl9LVk1gLCBgS1ZNYCwgYW5kIGBWRklPYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuTm93IEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkLiBMZXQncyBzZWUuLi4gdGhlIHByaW1hcnkgc3VzcGVjdHMgYXJlOiBga3ZtX3MzOTBfcGNpX2FpZl9lbmFibGVgLCBga3ZtX3MzOTBfcGNpX2FpZl9kaXNhYmxlYCwgYW5kIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuIEFuZCBpdCBhcHBlYXJzIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgY2FsbHMgYGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW5gIHdoaWNoIGluIHR1cm4gY2FsbHMgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSXMgYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCBzdGF0aWM/IFllcywgaXQgaXMuIEJ1dCwgd2FpdCwgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyAqbm90KiBzdGF0aWMhIEFscmlnaHQsIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBlbnRyeSBwb2ludCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaW4gYGFyY2gvczM5MC9rdm0vcGNpLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjoyNy43MTc4MTMzNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAyNjQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfcGNpX3pwY2lfb3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjU9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwOTItXFx0XFx0fVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDkzOlxcdFxcdHIgPSBrdm1fczM5MF9wY2lfenBjaV9vcChrdm0sIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA5NC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmM9NjYxPXN0YXRpYyBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfcmVnX2FlbihzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4My1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjY4NDppbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTY4NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5oPTYxPXZvaWQga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5oLTYyLVxcbmFyY2gvczM5MC9rdm0vcGNpLmg6NjM6aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0vcGNpLmgtNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjMwLjE1ODA4NzI1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQxMjI0MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgWlBDSSBPcGVyYXRpb25zIGluIEtWTS9zMzkweCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gU2VlbXMgbGlrZSB0aGF0J3MgYSBrZXkgZnVuY3Rpb24sIGEgZ29vZCBjZW50cmFsIHBvaW50IHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgWlBDSSAoei9BcmNoaXRlY3R1cmUgUENJKSBvcGVyYXRpb24gd2l0aGluIEtWTS9zMzkweC4gSXQgbWFrZXMgc2Vuc2UgYXMgYSBmb2N1cyBzeW1ib2wsIGdpdmVuIHRoYXQgaXQncyBpbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IGZvciB0aGVzZSBQQ0kgZGV2aWNlcyBvbiBzMzkweC5cblxuTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24gY29tZXMgdG8gbWluZCAtIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIG9yIG5vdCBoYXMgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgaG93IGl0J3MgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBJZiBpdCBpcyBzdGF0aWMsIHRoZW4gaXQncyBsb2NhbCB0byBhIG1vZHVsZSBvciBmaWxlIGFuZCBJIHdpbGwgbmVlZCB0byBsb29rIGFyb3VuZCBpdCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgY2FzZSBtb3JlIGZ1bGx5LiBUaGlzIHdob2xlIHNldCBvZiBpbnRlcmFjdGlvbnMgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIGhvdyBaUENJIGlzIGhhbmRsZWQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjI2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6MzQuMjk5MzE0ODcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0Njk3OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3BjaS5jPTI0Mz1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlKHN0cnVjdCB6cGNpX2RldiAqemRldiwgc3RydWN0IHpwY2lfZmliICpmaWIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTQwNC1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjQwNTpzdGF0aWMgaW50IGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZShzdHJ1Y3QgenBjaV9kZXYgKnpkZXYsIGJvb2wgZm9yY2UpXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy00MDYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz01NzY9c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNjAyLVxcdGlmICh6ZGV2LVxcdTAwM2VremRldi1cXHUwMDNlZmliLmZtdDAuYWlidiAhPSAwKVxcbmFyY2gvczM5MC9rdm0vcGNpLmM6NjAzOlxcdFxcdGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZSh6ZGV2LCB0cnVlKTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYwNC1cXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmM9Njg0PWludCBrdm1fczM5MF9wY2lfenBjaV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF96cGNpX29wICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MTYtXFx0Y2FzZSBLVk1fUzM5MF9aUENJT1BfREVSRUdfQUVOOlxcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzE3OlxcdFxcdHIgPSBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGUoemRldiwgZmFsc2UpO1xcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzE4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NjozNi43MTQwMTkyOTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMTc2MjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpQQ0kgRGVyZWdpc3RyYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBhcnQgaXMgc3RhdGljLiBJdCdzIGludm9rZWQgYnkgYGt2bV9zMzkwX3BjaV96cGNpX29wYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgdGhlIGBLVk1fUzM5MF9aUENJT1BfREVSRUdfQUVOYCBjYXNlLCBhbmQgYWxzbyBkaXJlY3RseSBieSBga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtYC4gSG1tLCBxdWljayBjaGVjay4uLiB5ZXAsIGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gIGlzIGFsc28gc3RhdGljLlxuXG5SaWdodCwgc28gdGhhdCBtZWFucyBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBib3RoIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhpcyBaUENJIGZ1bmN0aW9uYWxpdHkuIE5vdywgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBXaGVyZSAqZWxzZSogaXMgYGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bWAgYmVpbmcgY2FsbGVkIGZyb20/IEdvdCB0byB0cmFjZSB0aGF0IGJhY2sgZm9yIGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA3NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0Njo0MC44NDU3ODQ3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MjQ3OTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wY2kuYz01MDE9c3RhdGljIGludCBrdm1fczM5MF9wY2lfcmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy01NzUtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo1NzY6c3RhdGljIHZvaWQga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtKHZvaWQgKm9wYXF1ZSlcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTU3Ny17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMS1cXHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm07XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3MzI6XFx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlciA9IGt2bV9zMzkwX3BjaV91bnJlZ2lzdGVyX2t2bTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTczMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6NDMuNTg4MjY5MzA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Nzg1MjkzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFbnRyeSBQb2ludCBvZiB0aGUgTW9kaWZpZWQgS1ZNIENvZGUqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgaG9vayB0byBzdGFydCBkaWdnaW5nIGludG8uIFRoZSBjb2RlIGNoYW5nZXMgc2VlbSBjZW50ZXJlZCBhcm91bmQgYGt2bV9zMzkwX3BjaV96cGNpX29wYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgYGFjY291bnRfbWVtYCBhbmQgYHVuYWNjb3VudF9tZW1gIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiBpdCBhcmUgc3RhdGljIGlubGluZS4gVGhhdCdzIGEgY29tbW9uIG9wdGltaXphdGlvbiwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGJlIHN1cmUsIHdoaWNoIHRoZXkgYXJlLiBUaGlzIGZ1bmN0aW9uLCBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgLCBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiBob3cgaXMgYGt2bV9zMzkwX3BjaV96cGNpX29wYCBhY3R1YWxseSAqcmVhY2hlZCogd2l0aGluIFFFTVU/IExldCdzIHRyYWNlIGl0IGRvd24uIEFoLCB5ZXMsIGl04oCZcyBhbiBpb2N0bCwgc3BlY2lmaWNhbGx5IGBLVk1fUzM5MF9aUENJX09QYC4gVGhhdCdzIGludGVyZXN0aW5nOyBTeXprYWxsZXIgaXMga25vd24gdG8gZnV6eiBLVk0gaW9jdGxzLiBUaGlzIGlzIGxpa2VseSBob3cgdGhleSB3aWxsIGV4cG9zZSB0aGVzZSBjaGFuZ2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gV2hhdCBhcmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gYmUgZW5hYmxlZD8gT2theSwgY2xlYXJseSwgd2UgbmVlZCBgQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNYCBhbmQgYENPTkZJR19LVk1gLiBCdXQgd2hhdCBhYm91dCBgQ09ORklHX1ZGSU9fUENJYD8gSG1tbSwgaWYgYFZGSU9fUENJX1pERVZfS1ZNYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLCBpdCB3b3VsZCBtYWtlIHNlbnNlIGlmIGl0IGRlcGVuZHMgb24gYFZGSU9fUENJYC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQncyBiZXN0IHRvIGJlIHByZWNpc2UsIG9yIEknbSBib3VuZCB0byBtaXNzIHNvbWV0aGluZyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjQ5LjI2NjgwMTI4NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdGVuZGlmXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwIFxcdTAwMjZcXHUwMDI2IEtWTVxcbiAgNTA6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFN1cHBvcnQgczM5MHgtc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBlbmFibGUgc3VwcG9ydCBmb3IgZW5oYW5jZW1lbnRzXFxuICA1MzpcXHRcXHQgIHRvIEtWTSBwYXNzdGhyb3VnaCBjYXBhYmlsaXRpZXMsIHN1Y2ggYXMgaW50ZXJwcmV0aXZlIGV4ZWN1dGlvbiBvZlxcbiAgNTQ6XFx0XFx0ICB6UENJIGluc3RydWN0aW9ucy5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBlbmFibGUgczM5MHggS1ZNIHZmaW8tcGNpIGV4dGVuc2lvbnMsIHNheSBZLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuICA1OTpcXHRcXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcbiAgNjA6XFx0XFxuICA2MTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wY2kvbWx4NS9LY29uZmlnXFxcIlxcbiAgNjI6XFx0XFxuICA2MzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdmZpby9wY2kvaXNtL0tjb25maWdcXFwiXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6NDkuMjY2OTA2MTE2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTk3NDAyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBicmVha2luZyBkb3duIHRoZSBkZXBlbmRlbmN5IGlzc3VlLlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBWRklPIGFuZCBpdHMgSW1wbGljYXRpb25zKipcblxuSG1tLCB0aGlzIGRlcGVuZGVuY3kgaXNuJ3QgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGluaXRpYWxseSB0aG91Z2h0LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGBWRklPX1BDSWAsIGJ1dCBpdCBzZWVtcyB0aGUgcmVhbCBrZXkgaXMgdGhlIGludGVycGxheSBiZXR3ZWVuIGBTMzkwYCBhbmQgYEtWTWAuIFRob3NlIGFyZSB0aGUgY29yZSByZXF1aXJlbWVudHMuIEhvd2V2ZXIsIHRoZSBgS2NvbmZpZ2Agc3RydWN0dXJlIGlzIHRoZSBjdWxwcml0IGhlcmUuIFdlIHNlZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gbmVzdGVkIHdpdGhpbiBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCwgd2hpY2ggaXMsIGluIHR1cm4sIHNvdXJjZWQgaW5zaWRlIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AsIHVuZGVyIHRoZSBgaWYgVkZJT2AgY29uZGl0aW9uLiBFc3NlbnRpYWxseSwgZXZlbiB0aG91Z2ggdGhlIGRpcmVjdCBkZXBlbmRlbmN5IGlzbid0IG9uIGBWRklPX1BDSWAsIHRoZSB3YXkgdGhlIGtlcm5lbCBjb25maWcgaXMgc3RydWN0dXJlZCBtZWFucyB0aGF0IGBWRklPYCBpdHNlbGYgKmlzKiByZXF1aXJlZCBiZWNhdXNlIG9mIHRoaXMgbmVzdGluZy4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgZXZlbiBpZiBpdCdzIG5vdCB0aGUgY3JpdGljYWwgZW5hYmxpbmcgZmFjdG9yLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBWRklPYCBpcyB0cnVseSBuZWNlc3NhcnkgaGVyZSwgZXZlbiB3aXRoIHRoZSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDY6NTMuMTI2NjQ5NjE1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBWRklPXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVyIGZyYW1ld29ya1xcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBJT01NVV9BUElcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU9NTVVGRCB8fCAhSU9NTVVGRFxcbiAgIDY6XFx0XFx0c2VsZWN0IElOVEVSVkFMX1RSRUVcXG4gICA3OlxcdFxcdHNlbGVjdCBWRklPX0dST1VQIGlmIFNQQVBSX1RDRV9JT01NVSB8fCBJT01NVUZEPW5cXG4gICA4OlxcdFxcdHNlbGVjdCBWRklPX0RFVklDRV9DREVWIGlmICFWRklPX0dST1VQXFxuICAgOTpcXHRcXHRzZWxlY3QgVkZJT19DT05UQUlORVIgaWYgSU9NTVVGRD1uXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFZGSU8gcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHNlY3VyZSB1c2Vyc3BhY2UgZGV2aWNlIGRyaXZlcnMuXFxuICAxMjpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby5yc3QgZm9yIG1vcmUgZGV0YWlscy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBWRklPXFxuICAxNzpcXHRjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY2RldiAvZGV2L3ZmaW8vZGV2aWNlcy92ZmlvWFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gSU9NTVVGRCBcXHUwMDI2XFx1MDAyNiAhU1BBUFJfVENFX0lPTU1VXFxuICAyMDpcXHRcXHRkZWZhdWx0ICFWRklPX0dST1VQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ2OjUzLjEyNjc1MzExNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDUyODU1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTUzNzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0Njo1OC41Nzk2MTE4MjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzMzODgwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienBjaV9rdm1faG9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD03Njk9dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzcwLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjc3MTpzdHJ1Y3QgenBjaV9rdm1faG9vayB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzcyLVxcdGludCAoKmt2bV9yZWdpc3Rlcikodm9pZCAqb3BhcXVlLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzc1LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjc3NjpleHRlcm4gc3RydWN0IHpwY2lfa3ZtX2hvb2sgenBjaV9rdm1faG9vaztcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NzctXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTcyOT1pbnQgX19pbml0IGt2bV9zMzkwX3BjaV9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03MzAte1xcbmFyY2gvczM5MC9rdm0vcGNpLmM6NzMxOlxcdHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyID0ga3ZtX3MzOTBfcGNpX3JlZ2lzdGVyX2t2bTtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjczMjpcXHR6cGNpX2t2bV9ob29rLmt2bV91bnJlZ2lzdGVyID0ga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtO1xcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzMzLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz03NDc9dm9pZCBrdm1fczM5MF9wY2lfZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzQ4LXtcXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjc0OTpcXHR6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlciA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3NTA6XFx0enBjaV9rdm1faG9vay5rdm1fdW5yZWdpc3RlciA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03NTEtXFxuLS1cXG5hcmNoL3MzOTAvcGNpL3BjaV9rdm1faG9vay5jLTExLVxcbmFyY2gvczM5MC9wY2kvcGNpX2t2bV9ob29rLmM6MTI6c3RydWN0IHpwY2lfa3ZtX2hvb2sgenBjaV9rdm1faG9vaztcXG5hcmNoL3MzOTAvcGNpL3BjaV9rdm1faG9vay5jOjEzOkVYUE9SVF9TWU1CT0xfR1BMKHpwY2lfa3ZtX2hvb2spO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmM9MTQ0PWludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE1My1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYzoxNTQ6XFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jOjE1NTpcXHRcXHRyZXR1cm4genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwgdmRldi1cXHUwMDNldmRldi5rdm0pO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE1Ni1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jPTE2MD12b2lkIHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jLTE2Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYzoxNjc6XFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmM6MTY4OlxcdFxcdHpwY2lfa3ZtX2hvb2sua3ZtX3VucmVnaXN0ZXIoemRldik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMtMTY5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDc6MDEuMTEzMDA4Njg5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDU5NjExNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPLVBDSSBhbmQgS1ZNL3MzOTAgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8tUENJIGRyaXZlciBhbmQgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbS4gSXQgbG9va3MgbGlrZSBgdmZpb19wY2lfemRldl9vcGVuX2RldmljZWAgdHJpZ2dlcnMgdGhlIGBrdm1fcmVnaXN0ZXJgIHByb2Nlc3MsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gLiBDb252ZXJzZWx5LCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIGhhbmRsZXMgdGhlIGNsZWFudXAgYnkgY2FsbGluZyBga3ZtX3VucmVnaXN0ZXJgLCBsZWFkaW5nIHRvIGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gLiBJIHNlZSB0aGF0IGBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm1gIHRoZW4gY2FsbHMgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAuIFNvLCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIG9mZmVycyBhbm90aGVyIHJvdXRlIHRvIGBrdm1fczM5MF9wY2lfYWlmX2Rpc2FibGVgLlxuXG5JIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUuLi4gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBzZWVtcyBsaWtlIHRoZSBiZXN0IGNhbmRpZGF0ZSBiZWNhdXNlIGl0IGNvdmVycyB0aGUgaW9jdGwgcGF0aC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGZvY3VzLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBjb25zaWRlcj8gTGV0J3MgcnVsZSB0aGVtIG91dC4gYGt2bV9zMzkwX3BjaV9haWZfZW5hYmxlYCBhbmQgYGt2bV9zMzkwX3BjaV9haWZfZGlzYWJsZWAgYXJlIHN0YXRpYywgc28gdGhhdCdzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGV4YW1pbmF0aW9uLiBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFNpbWlsYXJseSwgYGt2bV9zMzkwX3BjaV9yZWdpc3Rlcl9rdm1gIGFuZCBga3ZtX3MzOTBfcGNpX3VucmVnaXN0ZXJfa3ZtYCBhcmUgc3RhdGljLlxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIHRoZSBsb2NhdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gYHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2VgIGFuZCBgdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2VgIHJlc2lkZSBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNgLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGluIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCwgd2hpY2ggc3RyZW5ndGhlbnMgdGhlIGFyZ3VtZW50IHRoYXQgZm9jdXNpbmcgb24gYGt2bV9zMzkwX3BjaV96cGNpX29wYCBpcyB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IHNlZW1zIGxvZ2ljYWwuXG5cbk5vdywgbGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIGBhcmNoL3MzOTAva3ZtL3BjaS5jYCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgaW1tZWRpYXRlbHkgb2J2aW91cyBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBub3RlLiBUaGlzIHNob3VsZCBoZWxwIG1lIGNvbmZpcm0gdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGEgY3J1Y2lhbCBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzY5LCJPdXRwdXRUb2tlbnMiOjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjA5LjMxODk3MzEwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjcxMjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcGNpLmM9MjE9c3RhdGljIGlubGluZSBpbnQgX19zZXRfaXJxX25vaWliKHUxNiBjdGwsIHU4IGlzYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtMjctXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzoyODp2b2lkIGt2bV9zMzkwX3BjaV9hZW5fZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtMjkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz0xMDE9c3RhdGljIGludCB6cGNpX3Jlc2V0X2FpcGIodTggbmlzYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtMTE5LVxcbmFyY2gvczM5MC9rdm0vcGNpLmM6MTIwOmludCBrdm1fczM5MF9wY2lfYWVuX2luaXQodTggbmlzYylcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTEyMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTU3Nj1zdGF0aWMgdm9pZCBrdm1fczM5MF9wY2lfdW5yZWdpc3Rlcl9rdm0odm9pZCAqb3BhcXVlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02MjYtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2Mjc6dm9pZCBrdm1fczM5MF9wY2lfaW5pdF9saXN0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYyOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYzMi1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jOjYzMzp2b2lkIGt2bV9zMzkwX3BjaV9jbGVhcl9saXN0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL3BjaS5jLTYzNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3BjaS5jPTY2MT1zdGF0aWMgaW50IGt2bV9zMzkwX3BjaV96cGNpX3JlZ19hZW4oc3RydWN0IHpwY2lfZGV2ICp6ZGV2LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODMtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo2ODQ6aW50IGt2bV9zMzkwX3BjaV96cGNpX29wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgKmFyZ3MpXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy02ODUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYz03Mjk9aW50IF9faW5pdCBrdm1fczM5MF9wY2lfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wY2kuYy03NDYtXFxuYXJjaC9zMzkwL2t2bS9wY2kuYzo3NDc6dm9pZCBrdm1fczM5MF9wY2lfZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9rdm0vcGNpLmMtNzQ4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDM6NDc6MDkuNDc1MjQ5MTMxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQzNjI2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBaUENJIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfcGNpX3pwY2lfb3BgIGZ1bmN0aW9uOyB0aGF0J3MgdGhlIGNvcmUgb2YgdGhpcywgcmlnaHQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjaywgdGhvdWdoIOKAkyBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFoLCB5ZXMsIGBDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk1gIGxvb2tzIGxpa2UgYSBrZXkgb25lIHRvby4gTmF0dXJhbGx5LCBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIGEgcHJlcmVxdWlzaXRlLiBBbmQgb2YgY291cnNlIGBDT05GSUdfVkZJT2AgYW5kIGBDT05GSUdfVkZJT19QQ0lgLiBIYW5nIG9u4oCmIGlzbid0IGB2ZmlvX3BjaV96ZGV2LmNgIGxvY2F0ZWQgaW4gYGRyaXZlcnMvdmZpby9wY2kvYD8gUmlnaHQsIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoxMy4yMzk2MTY0OThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTYzODg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV96ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZT0zPXZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjQ6dmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgKz0gdmZpb19wY2lfemRldi5vXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZS01LXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSArPSB2ZmlvX3BjaV9kbWFidWYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoxMy40NTEyNjI4OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM0MjQ4NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbCBhbmQgVkZJTzpcblxuKipWRklPIE1vZHVsZSBSZWxhdGlvbnNoaXBzOiBBIFF1aWNrIE1lbnRhbCBEcmlsbCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIHRoaW5raW5nIGFib3V0IGB2ZmlvX3BjaV96ZGV2Lm9gLiBUaGF0J3MgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBWRklPLVBDSSBpbmZyYXN0cnVjdHVyZSwgaXNuJ3QgaXQ/IFNlZW1zIHJpZ2h0LiBJdCdzIG5vdCBhIHN0YW5kYWxvbmUgdGhpbmc7IGl0J3MgaW50cmljYXRlbHkgbGlua2VkLiBTbywgYHZmaW9fcGNpX3pkZXYub2AuLi4gdGhhdCdzICpwYXJ0KiBvZiB0aGUgbGFyZ2VyIGB2ZmlvLXBjaS1jb3JlYCBtb2R1bGUsIGdvdCBpdC5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogd2hlbiBkb2VzIHRoaXMgYHZmaW8tcGNpLWNvcmVgIG1vZHVsZSBhY3R1YWxseSBnZXQgY29tcGlsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgYnVpbGQgcHJvY2VzcyBvciB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0byBwaW4gZG93biB3aGVuIHRoZSBjb3JlIFZGSU8tUENJIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlLiBXaGVyZSBpcyBpdCByZWZlcmVuY2VkIGluIHRoZSBLY29uZmlnPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgaXRzIGNvbXBpbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjE3LjU4NTUxMzg4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMDY4NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW8tcGNpLWNvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlLTItXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZTozOnZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlOjQ6dmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgKz0gdmZpb19wY2lfemRldi5vXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZTo1OnZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSArPSB2ZmlvX3BjaV9kbWFidWYub1xcbmRyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVkZJT19QQ0lfQ09SRSkgKz0gdmZpby1wY2ktY29yZS5vXFxuZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoxNy44Njc1OTEyNzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NjEzNjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IFZGSU8tUENJLiBTZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1ZGSU9fUENJX0NPUkVgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBzb21ldGhpbmcgSSdtIHdvcmtpbmcgb24uIE1ha2VzIHNlbnNlLCBpdCdzIHRoZSBjb3JlIGNvbXBvbmVudC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGFuZCB0byBjaGVjayBmb3IgYW55IGNhdmVhdHMgb3IgYXNzb2NpYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCB0aGUgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgZmlsZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGEgc3VwcG9ydGluZyBjb25maWcsIG9yIGFuIGVkZ2UgY2FzZS4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZSBiZWZvcmUgSSBwcm9jZWVkLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSB0eXBpY2FsbHkgbGllLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjIxLjAzMzczMTUyOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyOTg2ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19QQ0lfQ09SRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoyMy43NjM2MDQ3MDRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0OTYzNTc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIHdvcmtpbmcgb24gc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgVkZJTy1QQ0ksIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZC4gUmlnaHQsIGBWRklPX1BDSV9DT1JFYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgVkZJT19QQ0lgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBWRklPX1BDSV9DT1JFYCBwcm92aWRlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRoYXQgYFZGSU9fUENJYCBidWlsZHMgdXBvbi4gVGhlcmVmb3JlLCB0byBnZXQgYFZGSU9fUENJX0NPUkVgIHdvcmtpbmcsIEkgKm11c3QqIGhhdmUgYENPTkZJR19WRklPX1BDSWAgZW5hYmxlZCBpbiBteSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXTigJlzIGEgZGVwZW5kZW5jeSwgbm90IGEgc3RhbmRhbG9uZSBvcHRpb24uXG5cbk5vdywgd2hlcmUgd2FzIHRoYXQgS2NvbmZpZyBmaWxlIGFnYWluIGZvciBWRklPLVBDST8gUmlnaHQsIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBob3cgYFZGSU9fUENJYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbuKAmXQgbWlzc2VkIGFueXRoaW5nIGZ1bmRhbWVudGFsIGR1cmluZyBteSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGFzIGV4cGVjdGVkLiBMZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIG1vZHVsZXMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMzo0NzoyNy4yMTMyNDM2MjhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc3ODU1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjMxLjYyMTAzNjYxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzg2MzQ1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWRklPLVBDSSBaREVWIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBWRklPX1BDSWAgc2VsZWN0cyBgVkZJT19QQ0lfQ09SRWAuICBgVkZJT19QQ0lfWkRFVl9LVk1gIGlzIHNlcGFyYXRlLCBkZXBlbmRpbmcgb24gYFMzOTAgXHUwMDI2XHUwMDI2IEtWTWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgaWYgYFZGSU9fUENJX1pERVZfS1ZNYCBpcyBlbmFibGVkLCBgYXJjaC9zMzkwL2t2bS9wY2kub2AgZ2V0cyBjb21waWxlZC4gIEJ1dCB3YWl0LCBkb2VzIGBWRklPX1BDSV9aREVWX0tWTWAgYWN0dWFsbHkgKnJlcXVpcmUqIGBWRklPX1BDSV9DT1JFYCB0byBiZSBlbmFibGVkPyBJdCBzZWVtcyBzbywgYmVjYXVzZSBgdmZpb19wY2lfemRldi5vYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYFZGSU9fUENJX0NPUkVgIGlzIGVuYWJsZWQuIFNpbmNlIHdlIG5lZWQgdG8gdXNlIHRoZSBob29rcywgd2UgKmRlZmluaXRlbHkqIG5lZWQgYFZGSU9fUENJX0NPUkVgLCB3aGljaCBtZWFucyB3ZSAqbXVzdCogaGF2ZSBgQ09ORklHX1ZGSU9fUENJYCBlbmFibGVkLiAgR290IGl0LlxuXG5TbywgdGhlIGtleSBjb25maWd1cmF0aW9ucyBuZWVkZWQgYXJlOiBgS1ZNYCwgYFZGSU9gLCBgVkZJT19QQ0lgLCBhbmQgYFZGSU9fUENJX1pERVZfS1ZNYC4gIExldCdzIGRvdWJsZS1jaGVjayBpZiBgVkZJT19QQ0lfWkRFVl9LVk1gIGlzIGBkZWZhdWx0IHlgIHVuZGVyIGBTMzkwIFx1MDAyNlx1MDAyNiBLVk1gLiBZZXMsIGl0IGlzLiBUaGVyZWZvcmUsIHdlIGp1c3QgaGF2ZSB0byBlbnN1cmUgYFZGSU9gIGFuZCBgVkZJT19QQ0lgIGFyZSBlbmFibGVkLCBhbG9uZyB3aXRoIGBLVk1gLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQuIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgc2VlbXMgdG8gYmUgdGhlIG1haW4gb25lLiAgSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMuIGBrdm1fczM5MF9wY2lfYWVuX2luaXRgIGFuZCBga3ZtX3MzOTBfcGNpX2luaXRgLCBhcmUgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2luaXRgLiBBbHNvLCBga3ZtX3MzOTBfcGNpX2Flbl9leGl0YCBhbmQgYGt2bV9zMzkwX3BjaV9leGl0YCBhcmUgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2V4aXRgLiBBbmQgZmluYWxseSwgYGt2bV9zMzkwX3BjaV9pbml0X2xpc3RgIGFuZCBga3ZtX3MzOTBfcGNpX2NsZWFyX2xpc3RgIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfaW5pdF92bWAgYW5kIGBrdm1fYXJjaF9kZXN0cm95X3ZtYC5cblxuU28sIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBpb2N0bCBwZXItVk0sIGFuZCBoYW5kbGVzIHRoZSBtb3N0IG9mIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5Ob3csIGxldCdzIHJldmlzaXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBjaGFuZ2luZyBgdW5hY2NvdW50X21lbWAgYW5kIGBhY2NvdW50X21lbWAgdG8gdXNlIGBremRldi1cdTAwM2V1c2VyX2FjY291bnRgIGFuZCBga3pkZXYtXHUwMDNlbW1fYWNjb3VudGAgaW5zdGVhZCBvZiBgY3VycmVudF91c2VyKClgIGFuZCBgY3VycmVudC1cdTAwM2VtbWAuICBDcnVjaWFsbHksIGl0J3MgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGluIGBrdm1fczM5MF9wY2lfYWlmX2VuYWJsZWAgZm9yIGBhY2NvdW50X21lbWAgZmFpbHVyZXMuIEl0IGFsc28gY2hlY2tzIGlmIEFJQlYgaXMgYWxyZWFkeSBlbmFibGVkLCBhcyB3ZWxsIGFzIGlmIEFJQlYgc3BhbnMgbW9yZSB0aGFuIDEgcGFnZSBhbmQgaWYgQUlTQiBpcyBkd29yZCBhbGlnbmVkLiAgQWRkaXRpb25hbGx5LCBpdCBoYW5kbGVzIGZhaWx1cmVzIGZvciBgYWlycV9pdl9hbGxvY19iaXRgLCBgYWlycV9pdl9jcmVhdGVgLCBhbmQgYGt2bV96cGNpX3NldF9haXJxYC4gVGhhdCdzIGEgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoIGEgbG90IG9mIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIGBrdm1fczM5MF9wY2lfenBjaV9vcGAuXG5cbkkgbmVlZCB0byBlbmFibGUgYEtWTWAsIGBWRklPYCwgYFZGSU9fUENJYCwgYW5kIGBWRklPX1BDSV9aREVWX0tWTWAgaW4gdGhlIGNvbmZpZy4gQW5kIG5vLCBgUzM5MGAgaXMgdGhlIGFyY2hpdGVjdHVyZSwgaXQgd2lsbCBiZSBydW4gb24gczM5MHguXG5cbkxldCdzIHZlcmlmeSB0aGF0IGZ1bmN0aW9uIG5hbWU6IGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgaW5kZWVkIGBpbnQga3ZtX3MzOTBfcGNpX3pwY2lfb3Aoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCAqYXJncylgXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBNYXliZSBgdmZpb19wY2lfemRldl9vcGVuX2RldmljZWA/IFRoYXQgb25lIGlzIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY2AsIGFuZCB0aGUgcGF0Y2ggZG9lc24ndCB0b3VjaCBpdC4gU28sIGBrdm1fczM5MF9wY2lfenBjaV9vcGAgaXMgc3VmZmljaWVudC5cblxuTm93LCBsZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgzNSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAzOjQ3OjQ1LjAwNzM4NjcxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDYwMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJWRklPX1BDSV9aREVWX0tWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX3BjaV96cGNpX29wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJWRklPX1BDSV9aREVWX0tWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zMzkwX3BjaV96cGNpX29wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGluIHMzOTB4IEtWTSBQQ0kgcGFzc3Rocm91Z2ggKHpQQ0kpIGR1cmluZyBBSUYgKEFkYXB0ZXIgSW50ZXJydXB0aW9uIEZhY2lsaXR5KSBlbmFibGVtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBlcnJvciBwYXRocyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmb3IgbWVtb3J5IHBpbm5pbmcgYW5kIGludGVycnVwdCB2ZWN0b3IgYWxsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgS1ZNX1MzOTBfWlBDSV9PUCBpb2N0bCwgaGFuZGxlZCBieSBrdm1fczM5MF9wY2lfenBjaV9vcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowmn42g[1] Phase: Succeeded StartedAt: 2026-07-25 03:47:56 +0000 UTC FinishedAt: 2026-07-25 03:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 03:47:56 +0000 UTC FinishedAt: 2026-07-25 03:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2] Phase: Succeeded StartedAt: 2026-07-25 03:47:56 +0000 UTC FinishedAt: 2026-07-25 05:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 03:47:56 +0000 UTC FinishedAt: 2026-07-25 05:34:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","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-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 03:47:56 +0000 UTC FinishedAt: 2026-07-25 03:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 03:47:56 +0000 UTC FinishedAt: 2026-07-25 03:48:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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-workflowmn42g/series-workflowmn42g-convert-artifact-3520955646/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 03:48:07 +0000 UTC FinishedAt: 2026-07-25 04:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 03:48:07 +0000 UTC FinishedAt: 2026-07-25 04:50:05 +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:*f11fd2ca-3c41-4b52-80ad-20f9abe6f89e,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-workflowmn42g/series-workflowmn42g-convert-artifact-3520955646/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": "67c9f5b9-d4ac-4f1f-b692-c46bfc0f10fb", "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-workflowmn42g/series-workflowmn42g-build-action-2790026468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 03:48:07 +0000 UTC FinishedAt: 2026-07-25 04:49:55 +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:*f11fd2ca-3c41-4b52-80ad-20f9abe6f89e,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-workflowmn42g/series-workflowmn42g-convert-artifact-3520955646/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": "67c9f5b9-d4ac-4f1f-b692-c46bfc0f10fb", "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-workflowmn42g/series-workflowmn42g-build-action-2790026468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 04:50:05 +0000 UTC FinishedAt: 2026-07-25 04:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 04:50:05 +0000 UTC FinishedAt: 2026-07-25 04:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 04:50:05 +0000 UTC FinishedAt: 2026-07-25 04:50:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 04:50:05 +0000 UTC FinishedAt: 2026-07-25 04:50:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","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-workflowmn42g/series-workflowmn42g-convert-artifact-538133041/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 04:50:15 +0000 UTC FinishedAt: 2026-07-25 04:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 04:50:15 +0000 UTC FinishedAt: 2026-07-25 04:52:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*67c9f5b9-d4ac-4f1f-b692-c46bfc0f10fb,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-workflowmn42g/series-workflowmn42g-build-action-2790026468/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-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 04:52:23 +0000 UTC FinishedAt: 2026-07-25 04:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 04:52:23 +0000 UTC FinishedAt: 2026-07-25 04:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 04:52:23 +0000 UTC FinishedAt: 2026-07-25 05:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 04:52:23 +0000 UTC FinishedAt: 2026-07-25 05:29:25 +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:*f11fd2ca-3c41-4b52-80ad-20f9abe6f89e,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-workflowmn42g/series-workflowmn42g-convert-artifact-538133041/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": "4ca2bded-cf87-4f4c-b1c8-7afa0f243297", "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-workflowmn42g/series-workflowmn42g-build-action-2673246205/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 04:52:23 +0000 UTC FinishedAt: 2026-07-25 05:29:15 +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:*f11fd2ca-3c41-4b52-80ad-20f9abe6f89e,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-workflowmn42g/series-workflowmn42g-convert-artifact-538133041/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": "4ca2bded-cf87-4f4c-b1c8-7afa0f243297", "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-workflowmn42g/series-workflowmn42g-build-action-2673246205/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 05:29:25 +0000 UTC FinishedAt: 2026-07-25 05:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 05:29:25 +0000 UTC FinishedAt: 2026-07-25 05:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 05:29:25 +0000 UTC FinishedAt: 2026-07-25 05:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 05:29:25 +0000 UTC FinishedAt: 2026-07-25 05:31:33 +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:*4ca2bded-cf87-4f4c-b1c8-7afa0f243297,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-workflowmn42g/series-workflowmn42g-build-action-2673246205/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-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:34:44 +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_s390_pci_zpci_op"],"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:*67c9f5b9-d4ac-4f1f-b692-c46bfc0f10fb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4ca2bded-cf87-4f4c-b1c8-7afa0f243297,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-workflowmn42g/series-workflowmn42g-build-action-2790026468/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-workflowmn42g/series-workflowmn42g-build-action-2673246205/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:31:48 +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_s390_pci_zpci_op"],"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-workflowmn42g/series-workflowmn42g-convert-artifact-3099840230/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 05:31:43 +0000 UTC FinishedAt: 2026-07-25 05:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 05:31:53 +0000 UTC FinishedAt: 2026-07-25 05:34:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn42g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"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_s390_pci_zpci_op"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VFIO","VFIO_PCI","VFIO_PCI_ZDEV_KVM"],"series_id":"104faa58-b642-47ac-a163-11d299d531f2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 05:31:53 +0000 UTC FinishedAt: 2026-07-25 05:34:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*67c9f5b9-d4ac-4f1f-b692-c46bfc0f10fb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4ca2bded-cf87-4f4c-b1c8-7afa0f243297,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-workflowmn42g/series-workflowmn42g-build-action-2790026468/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-workflowmn42g/series-workflowmn42g-build-action-2673246205/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-workflowmn42g/series-workflowmn42g-convert-artifact-3099840230/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,}